summaryrefslogtreecommitdiffstats
path: root/core/network.go
diff options
context:
space:
mode:
authorbt <bt@rctt.net>2026-03-08 01:19:47 +0100
committerbt <bt@rctt.net>2026-03-08 01:19:47 +0100
commit18ca93effe37754b6642462325df02be37eb75ae (patch)
tree3f6cc52aac2455110ef9a70ff3f45c8fe031a92d /core/network.go
parent782394e769af6d89a6bc0656af1e4663c30844d6 (diff)
downloadsolec-18ca93effe37754b6642462325df02be37eb75ae.tar.gz
solec-18ca93effe37754b6642462325df02be37eb75ae.zip
Ping and pong
Diffstat (limited to 'core/network.go')
-rw-r--r--core/network.go54
1 files changed, 54 insertions, 0 deletions
diff --git a/core/network.go b/core/network.go
index 50c398f..c662981 100644
--- a/core/network.go
+++ b/core/network.go
@@ -3,7 +3,10 @@ package core
import (
"encoding/binary"
"fmt"
+ "io"
+ "log"
"net"
+ "time"
)
func Send(conn net.Conn, dataType DataType, data Marshaler) error {
@@ -19,3 +22,54 @@ func Send(conn net.Conn, dataType DataType, data Marshaler) error {
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 {
+ for {
+ d, err := Read(conn)
+ if err != nil {
+ return fmt.Errorf("cannot read data: %v", err)
+ }
+
+ if err := handleEvent(d, conn); err != nil {
+ return fmt.Errorf("cannot handle event: %v", 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")
+ }
+
+ return nil
+}