diff options
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/client/main.go | 87 | ||||
| -rw-r--r-- | cmd/daemon/main.go | 58 | ||||
| -rw-r--r-- | cmd/mock/main.go | 41 | ||||
| -rw-r--r-- | cmd/test/main.go | 2 |
4 files changed, 95 insertions, 93 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) } } diff --git a/cmd/daemon/main.go b/cmd/daemon/main.go index b55cc69..56b7c16 100644 --- a/cmd/daemon/main.go +++ b/cmd/daemon/main.go @@ -1,39 +1,53 @@ package main import ( - "flag" + "bufio" + "fmt" "log" - "net" + "maps" + "os" + "slices" + "strings" - "git.sr.ht/~rctt/solecd/core" + "git.sr.ht/~rctt/solec/server" ) -var listenAddr string +var ( + cmds = map[string]func(args []string){ + "ping": sendPing, + } -func main() { - flag.StringVar(&listenAddr, "a", "localhost:9999", "Listening address:port") - flag.Parse() + serv = server.NewServer("localhost:9999") +) - log.Print("starting solec daemon mock") - log.Fatal(listen()) -} +func main() { + fmt.Println("SOLEC MOCK SERVER") + fmt.Println("Commands:", slices.Sorted(maps.Keys(cmds))) -func listen() error { - ln, err := net.Listen("tcp", listenAddr) - if err != nil { - return err + if err := serv.Start(); err != nil { + panic(err) } + readCmds() +} - log.Print("server is listening on: ", listenAddr) +func readCmds() { + sc := bufio.NewScanner(os.Stdin) + for sc.Scan() { + args := strings.Split(sc.Text(), " ") - for { - conn, err := ln.Accept() - if err != nil { - log.Print("cannot accept connection: ", err) + cmd, ok := cmds[args[0]] + if !ok { + fmt.Println("unknown command") + continue } - log.Print("received connection from: ", conn.RemoteAddr()) - - go core.ReadConnection(conn) + cmd(args[1:]) + } + if err := sc.Err(); err != nil { + log.Println(err) } } + +func sendPing(args []string) { + +} diff --git a/cmd/mock/main.go b/cmd/mock/main.go deleted file mode 100644 index c4c726c..0000000 --- a/cmd/mock/main.go +++ /dev/null @@ -1,41 +0,0 @@ -package main - -import ( - "bufio" - "fmt" - "log" - "maps" - "os" - "slices" - "strings" -) - -var cmds = map[string]func(args []string){ - "ping": sendPing, -} - -func main() { - fmt.Println("SOLEC MOCK SERVER") - fmt.Println("Commands:", slices.Sorted(maps.Keys(cmds))) - - scanner := bufio.NewScanner(os.Stdin) - for scanner.Scan() { - args := strings.Split(scanner.Text(), " ") - - cmd, ok := cmds[args[0]] - if !ok { - fmt.Println("unknown command") - continue - } - - cmd(args[1:]) - } - - if err := scanner.Err(); err != nil { - log.Println(err) - } -} - -func sendPing(args []string) { - -} diff --git a/cmd/test/main.go b/cmd/test/main.go index 35eddad..05768ea 100644 --- a/cmd/test/main.go +++ b/cmd/test/main.go @@ -5,7 +5,7 @@ import ( "fmt" "time" - "git.sr.ht/~rctt/solecd/core" + "git.sr.ht/~rctt/solec/core" ) func main() { |
