summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbt <bt@rctt.net>2026-03-07 20:18:59 +0100
committerbt <bt@rctt.net>2026-03-07 20:18:59 +0100
commit236457dfda1e8e79daf86e0d6512f3d186373a65 (patch)
tree7c977c514795520963fde5ef60551393127aa472
parentc772746ea7600f19c0252c8ca2c10cc57d6f8e82 (diff)
downloadsolec-236457dfda1e8e79daf86e0d6512f3d186373a65.tar.gz
solec-236457dfda1e8e79daf86e0d6512f3d186373a65.zip
Implement basic TCP server
-rw-r--r--PROTOCOL.md4
-rw-r--r--cmd/mock/main.go59
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
}