summaryrefslogtreecommitdiffstats
path: root/core/payload.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/payload.go
parentcfcb226d3834c00414f4aa57b8f94060b45bb072 (diff)
downloadsolec-077dde28324f42b96239075ada289a58197dc951.tar.gz
solec-077dde28324f42b96239075ada289a58197dc951.zip
Improve protocol format
Diffstat (limited to 'core/payload.go')
-rw-r--r--core/payload.go128
1 files changed, 128 insertions, 0 deletions
diff --git a/core/payload.go b/core/payload.go
new file mode 100644
index 0000000..0711040
--- /dev/null
+++ b/core/payload.go
@@ -0,0 +1,128 @@
+package core
+
+import (
+ "io"
+ "time"
+)
+
+type Handshake struct {
+ Major, Minor uint8
+}
+
+func (h Handshake) Wrap() (PayloadType, []any) {
+ return PayloadHandshake, []any{
+ h.Major, h.Minor,
+ }
+}
+
+func DecodeHandshake(buf io.Reader) (Handshake, error) {
+ var h Handshake
+
+ err := decodeNumeric(buf, &h.Major)
+ if err != nil {
+ return h, err
+ }
+
+ err = decodeNumeric(buf, &h.Minor)
+ if err != nil {
+ return h, err
+ }
+
+ return h, nil
+}
+
+type Ping struct{}
+
+func (p Ping) Wrap() (PayloadType, []any) {
+ return PayloadPing, []any{}
+}
+
+type Pong struct {
+ Timestamp time.Time
+}
+
+func (p Pong) Wrap() (PayloadType, []any) {
+ return PayloadPong, []any{
+ p.Timestamp,
+ }
+}
+
+func DecodePong(buf io.Reader) (Pong, error) {
+ var p Pong
+ err := decodeTime(buf, &p.Timestamp)
+ if err != nil {
+ return p, err
+ }
+
+ return p, nil
+}
+
+type Test struct {
+ Num1 uint8
+ Time1 time.Time
+ Str1 string
+ Num2 uint16
+ Bin1 []byte
+ Num3 uint32
+ Str2 string
+ Num4 uint64
+}
+
+func (h Test) Wrap() (PayloadType, []any) {
+ return PayloadTest, []any{
+ h.Num1,
+ h.Time1,
+ h.Str1,
+ h.Num2,
+ h.Bin1,
+ h.Num3,
+ h.Str2,
+ h.Num4,
+ }
+}
+
+func DecodeTest(buf io.Reader) (Test, error) {
+ var t Test
+
+ err := decodeNumeric(buf, &t.Num1)
+ if err != nil {
+ return t, err
+ }
+
+ err = decodeTime(buf, &t.Time1)
+ if err != nil {
+ return t, err
+ }
+
+ err = decodeString(buf, &t.Str1)
+ if err != nil {
+ return t, err
+ }
+
+ err = decodeNumeric(buf, &t.Num2)
+ if err != nil {
+ return t, err
+ }
+
+ err = decodeBin(buf, &t.Bin1)
+ if err != nil {
+ return t, err
+ }
+
+ err = decodeNumeric(buf, &t.Num3)
+ if err != nil {
+ return t, err
+ }
+
+ err = decodeString(buf, &t.Str2)
+ if err != nil {
+ return t, err
+ }
+
+ err = decodeNumeric(buf, &t.Num4)
+ if err != nil {
+ return t, err
+ }
+
+ return t, nil
+}