diff options
| author | bt <bt@rctt.net> | 2026-03-07 20:18:59 +0100 |
|---|---|---|
| committer | bt <bt@rctt.net> | 2026-03-07 20:18:59 +0100 |
| commit | 236457dfda1e8e79daf86e0d6512f3d186373a65 (patch) | |
| tree | 7c977c514795520963fde5ef60551393127aa472 | |
| parent | c772746ea7600f19c0252c8ca2c10cc57d6f8e82 (diff) | |
| download | solec-236457dfda1e8e79daf86e0d6512f3d186373a65.tar.gz solec-236457dfda1e8e79daf86e0d6512f3d186373a65.zip | |
Implement basic TCP server
| -rw-r--r-- | PROTOCOL.md | 4 | ||||
| -rw-r--r-- | cmd/mock/main.go | 59 |
2 files changed, 59 insertions, 4 deletions
diff --git a/PROTOCOL.md b/PROTOCOL.md index d17eded..6686036 100644 --- a/PROTOCOL.md +++ b/PROTOCOL.md @@ -12,6 +12,7 @@ Every packet starts with `uint8` denoting type of the rest of remaining data. | 0x01 | Handshake | | 0x02 | Ping | | 0x03 | Pong | +| 0xFF | Test | ## Events @@ -38,3 +39,6 @@ Timezone should always be UTC. |--------|------|------------------| | uint64 | time | Unix timestamp | +### Test + +Event type reserved for testing. Does not have defined structure.
\ No newline at end of file diff --git a/cmd/mock/main.go b/cmd/mock/main.go index 8516821..88888f5 100644 --- a/cmd/mock/main.go +++ b/cmd/mock/main.go @@ -1,6 +1,7 @@ package main import ( + "encoding/binary" "flag" "log" "net" @@ -8,11 +9,31 @@ import ( var listenAddr string +type Encoder interface { + Encode() []any +} + +type Handshake struct { + ver uint8 +} + +func (h Handshake) Encode() []any { + return []any{h.ver} +} + +type Test struct { + msg string +} + +func (h Test) Encode() []any { + return []any{[]byte(h.msg)} +} + func main() { flag.StringVar(&listenAddr, "a", "localhost:9999", "Listening address:port") flag.Parse() - log.Print("Starting solec daemon mock") + log.Print("starting solec daemon mock") log.Fatal(listen()) } @@ -22,17 +43,47 @@ func listen() error { return err } - log.Print("Server is listening on: ", listenAddr) + log.Print("server is listening on: ", listenAddr) for { conn, err := ln.Accept() if err != nil { - log.Print("Cannot accept connection: ", err) + log.Print("cannot accept connection: ", err) } go handle(conn) } } func handle(conn net.Conn) { - log.Print("Received connection from: ", conn.RemoteAddr()) + log.Print("received connection from: ", conn.RemoteAddr()) + + hs := Handshake{ + ver: 0x0, + } + + if err := send(conn, 0x01, hs); err != nil { + log.Print("cannot send handshake ", err) + return + } + + if err := send(conn, 0xFF, Test{msg: "solec kujawski jest zajebisty"}); err != nil { + log.Print("cannot send test message ", err) + return + } +} + +func send(conn net.Conn, eType uint8, data Encoder) error { + err := binary.Write(conn, binary.BigEndian, eType) + if err != nil { + return err + } + + for _, v := range data.Encode() { + err := binary.Write(conn, binary.BigEndian, v) + if err != nil { + return err + } + } + + return nil } |
