summaryrefslogtreecommitdiffstats
path: root/core/network.go
diff options
context:
space:
mode:
authorbt <bt@rctt.net>2026-03-09 01:11:13 +0100
committerbt <bt@rctt.net>2026-03-09 22:52:52 +0100
commit077dde28324f42b96239075ada289a58197dc951 (patch)
tree4889aee82e8ea8efeeb141f2a98aeb089fff1798 /core/network.go
parentcfcb226d3834c00414f4aa57b8f94060b45bb072 (diff)
downloadsolec-077dde28324f42b96239075ada289a58197dc951.tar.gz
solec-077dde28324f42b96239075ada289a58197dc951.zip
Improve protocol format
Diffstat (limited to 'core/network.go')
-rw-r--r--core/network.go65
1 files changed, 7 insertions, 58 deletions
diff --git a/core/network.go b/core/network.go
index c662981..c182e7f 100644
--- a/core/network.go
+++ b/core/network.go
@@ -1,75 +1,24 @@
package core
import (
- "encoding/binary"
"fmt"
- "io"
- "log"
"net"
- "time"
)
-func Send(conn net.Conn, dataType DataType, data Marshaler) error {
- packet := []any{uint8(dataType)}
- packet = append(packet, data.Marshal()...)
-
- for _, v := range packet {
- err := binary.Write(conn, binary.BigEndian, v)
- if err != nil {
- return fmt.Errorf("cannot send: %v", err)
- }
- }
-
- return nil
-}
-
-func Read(r io.Reader) (any, error) {
- dType, err := ReadDataType(r)
- if err != nil {
- return nil, fmt.Errorf("cannot read data type", err)
- }
-
- switch dType {
- case TypeUnknown:
- return nil, fmt.Errorf("cannot read data type 0x00 (TypeUnknown)")
- case TypeHandshake:
- return ReadHandshake(r)
- case TypePing:
- return Ping{}, nil
- case TypePong:
- return ReadPong(r)
- case TypeTest:
- return ReadTest(r)
- default:
- return nil, fmt.Errorf("unsupported type: %v", dType)
- }
-}
-
-func Loop(conn net.Conn) error {
+func ReadConnection(conn net.Conn) {
for {
- d, err := Read(conn)
+ payload, err := Decode(conn)
if err != nil {
- return fmt.Errorf("cannot read data: %v", err)
+ panic(err)
}
- if err := handleEvent(d, conn); err != nil {
- return fmt.Errorf("cannot handle event: %v", err)
+ if err := handle(payload); err != nil {
+ panic(err)
}
}
}
-func handleEvent(data any, conn net.Conn) error {
- switch v := data.(type) {
- case Handshake:
- case Ping:
- log.Print("received ping")
- return Send(conn, TypePong, Pong{time.Now()})
- case Pong:
- log.Print("received pong ", v.Timestamp)
- case Test:
- default:
- return fmt.Errorf("unknown type")
- }
-
+func handle(payload any) error {
+ fmt.Println(payload)
return nil
}