package input import ( "bufio" "fmt" "log/slog" "os" "gommunicator/internal/usecase" ) type Input struct { log *slog.Logger uc *usecase.Usecase } func New(uc *usecase.Usecase, log *slog.Logger) *Input { return &Input{ log: log, uc: uc, } } func (i *Input) Run() { for { reader := bufio.NewReader(os.Stdin) msg, err := reader.ReadString('\n') if err != nil { i.log.Error("failed to scan input", "err", err) continue } if len(msg) < 1 { continue } // observe command if msg[0] == '/' || msg == "?" { switch msg { case "?", "/help": fmt.Println(helpMessage) case "/new-password": pass, err := i.uc.GenNewPassword() if err != nil { i.log.Error("failed to generate new client's password", "err", err) break } i.log.Info("new server password generated", "password", pass) } continue } if msg[len(msg)-1] == '\n' { msg = msg[:len(msg)-1] } i.uc.SendMessage(msg, "server") } }