gommunicator/internal/input/input.go

58 lines
974 B
Go

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")
}
}