58 lines
983 B
Go
58 lines
983 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[0] == '?' {
|
|
switch msg {
|
|
case "?\n", "/help\n":
|
|
fmt.Println(helpMessage)
|
|
case "/new-password\n":
|
|
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")
|
|
}
|
|
}
|