summaryrefslogtreecommitdiffstats
path: root/cmd/client
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/client')
-rw-r--r--cmd/client/main.go74
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)
}
}