summaryrefslogtreecommitdiffstats
path: root/cmd/client/main.go
diff options
context:
space:
mode:
authorbt <bt@rctt.net>2026-03-14 23:11:15 +0100
committerbt <bt@rctt.net>2026-03-18 16:21:58 +0100
commit54ddec67c477a6fd73b0f623258c0849ba695b88 (patch)
tree3a34b67e62b8788f0611abc4f9f8cfe7954aae46 /cmd/client/main.go
parent8932846aa4d29d59fd208f40bbfd44d1bb9cf1ff (diff)
downloadsolec-54ddec67c477a6fd73b0f623258c0849ba695b88.tar.gz
solec-54ddec67c477a6fd73b0f623258c0849ba695b88.zip
Basic server implementation
Diffstat (limited to 'cmd/client/main.go')
-rw-r--r--cmd/client/main.go87
1 files changed, 58 insertions, 29 deletions
diff --git a/cmd/client/main.go b/cmd/client/main.go
index 6e5d996..2612267 100644
--- a/cmd/client/main.go
+++ b/cmd/client/main.go
@@ -4,58 +4,87 @@ import (
"flag"
"log"
"net"
+ "strings"
"time"
- "git.sr.ht/~rctt/solecd/core"
+ "git.sr.ht/~rctt/solec/core"
+ "git.sr.ht/~rctt/solec/prompt"
)
-var serverAddr string
+var (
+ serverAddr string
+ user string
+ conn net.Conn
+)
func main() {
+ prompt.Commands["*"] = broadcast
+
flag.StringVar(&serverAddr, "a", "localhost:9999", "Server address:port")
+ flag.StringVar(&user, "u", "user", "username")
flag.Parse()
- var d net.Dialer
+ var (
+ d net.Dialer
+ err error
+ )
- conn, err := d.Dial("tcp", serverAddr)
+ log.Println("connecting to " + serverAddr + " as " + user)
+
+ conn, err = d.Dial("tcp", serverAddr)
if err != nil {
log.Fatal("cannot dial: ", err)
}
defer conn.Close()
- ping(conn)
+ hs := core.Handshake{0, 1}
+ if err := core.Send(conn, hs); err != nil {
+ panic(err)
+ }
+
+ auth := core.Auth{user, "pass"}
+ if err := core.Send(conn, auth); err != nil {
+ panic(err)
+ }
+
+ go prompt.Read()
+
+ read(conn)
}
-func ping(conn net.Conn) {
+func read(conn net.Conn) {
for {
- log.Print("ping")
- data, err := core.Encode(core.Pong{Timestamp: time.Now()})
+ payload, err := core.Read(conn)
if err != nil {
panic(err)
}
- if _, err := conn.Write(data); err != nil {
- panic(err)
- }
- test := core.Test{
- Num1: 1,
- Time1: time.Now(),
- Str1: "test string",
- Num2: 2,
- Bin1: []byte{0x01, 0x02, 0x03},
- Num3: 3,
- Str2: "こんにちは",
- Num4: 4,
- }
+ handlePayload(conn, payload)
+ }
+}
- data, err = core.Encode(test)
- if err != nil {
- panic(err)
- }
- if _, err = conn.Write(data); err != nil {
- panic(err)
- }
+func handlePayload(conn net.Conn, payload any) {
+ switch v := payload.(type) {
+ case core.Message:
+ handleMessage(conn, v)
+ }
+}
+
+func handleMessage(conn net.Conn, msg core.Message) {
+ log.Println("received message", msg.Source, "->", msg.Target, msg.Content)
+}
+
+func broadcast(args []string) {
+ msg := core.Message{
+ Source: user,
+ Target: "*",
+ Timestamp: time.Now(),
+ Content: strings.Join(args[0:], " "),
+ }
+
+ log.Println(msg.Content)
- time.Sleep(time.Second)
+ if err := core.Send(conn, msg); err != nil {
+ panic(err)
}
}