diff options
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/client/main.go | 74 |
1 files changed, 19 insertions, 55 deletions
diff --git a/cmd/client/main.go b/cmd/client/main.go index c362247..defcc17 100644 --- a/cmd/client/main.go +++ b/cmd/client/main.go @@ -2,12 +2,11 @@ package main import ( "flag" - "fmt" "log" "net" "strings" - "time" + "git.rctt.net/solec/client" "git.rctt.net/solec/core" "git.rctt.net/solec/prompt" ) @@ -16,8 +15,19 @@ var ( serverAddr string user string conn net.Conn + c *client.Client ) +type Handler struct{} + +func (h *Handler) HandleMessage(msg core.Message) { + log.Println("received message", msg.Source, "->", msg.Target, msg.Content) +} + +func (h *Handler) HandleError(err error) { + log.Println("client error:", err) +} + func main() { prompt.Commands["send"] = sendMessage @@ -25,67 +35,21 @@ func main() { flag.StringVar(&user, "u", "user", "username") flag.Parse() - var ( - d net.Dialer - err error - ) - log.Println("connecting to " + serverAddr + " as " + user) - conn, err = d.Dial("tcp", serverAddr) - if err != nil { - log.Fatal("cannot dial: ", err) - } - defer conn.Close() - - hs := core.Handshake{0, 1} - if err := core.Send(conn, hs); err != nil { - panic(err) - } - - auth := core.Auth{user, "valid"} - if err := core.Send(conn, auth); err != nil { - panic(err) - } + c = client.NewClient(&Handler{}, serverAddr, user, "valid") go prompt.Read() - read(conn) -} - -func read(conn net.Conn) { - for { - payload, err := core.Read(conn) - if err != nil { - panic(err) - } - - handlePayload(conn, payload) - } -} - -func handlePayload(conn net.Conn, payload any) { - switch v := payload.(type) { - case core.Message: - handleMessage(conn, v) - default: - fmt.Println(payload) + if err := c.Connect(); err != nil { + log.Fatal(err) + return } } -func handleMessage(conn net.Conn, msg core.Message) { - log.Println("received message", msg.Source, "->", msg.Target, msg.Content) -} - func sendMessage(args []string) { - msg := core.Message{ - Source: user, - Target: args[0], - Timestamp: time.Now(), - Content: strings.Join(args[1:], " "), - } - - if err := core.Send(conn, msg); err != nil { - panic(err) + err := c.SendMessage(args[0], strings.Join(args[1:], " ")) + if err != nil { + log.Println("cannot send message:", err) } } |
