summaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/client/main.go87
-rw-r--r--cmd/daemon/main.go58
-rw-r--r--cmd/mock/main.go41
-rw-r--r--cmd/test/main.go2
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() {