summaryrefslogtreecommitdiffstats
path: root/core/data.go
diff options
context:
space:
mode:
Diffstat (limited to 'core/data.go')
-rw-r--r--core/data.go76
1 files changed, 43 insertions, 33 deletions
diff --git a/core/data.go b/core/data.go
index 7ccc4f9..ddf1db8 100644
--- a/core/data.go
+++ b/core/data.go
@@ -5,6 +5,7 @@ import (
"fmt"
"io"
"strings"
+ "time"
)
type Marshaler interface {
@@ -21,63 +22,72 @@ const (
TypeTest = 0xFF
)
+func ReadDataType(r io.Reader) (DataType, error) {
+ var data uint8
+ if err := read(r, &data); err != nil {
+ return TypeUnknown, err
+ }
+
+ dType := DataType(data)
+
+ return dType, nil
+}
+
type Handshake struct {
Version uint8
}
-func (h Handshake) Marshal() []any {
- return []any{h.Version}
+func (t Handshake) Marshal() []any {
+ return []any{t.Version}
}
func ReadHandshake(r io.Reader) (Handshake, error) {
- var d Handshake
- err := read(r, &d.Version)
- return d, err
+ var t Handshake
+ err := read(r, &t.Version)
+ return t, err
}
type Test struct {
Message string
}
-func ReadTest(r io.Reader) (Test, error) {
- var d Test
- err := readString(r, &d.Message)
- return d, err
+func (t Test) Marshal() []any {
+ return []any{append([]byte(t.Message), 0x0)}
}
-func (h Test) Marshal() []any {
- return []any{append([]byte(h.Message), 0x0)}
+func ReadTest(r io.Reader) (Test, error) {
+ var t Test
+ err := readString(r, &t.Message)
+ return t, err
}
-func Read(r io.Reader) (any, error) {
- dType, err := ReadDataType(r)
- if err != nil {
- return nil, fmt.Errorf("cannot read data type", err)
- }
+type Ping struct{}
- switch dType {
- case TypeUnknown:
- return nil, fmt.Errorf("cannot read data type 0x00 (TypeUnknown)")
- case TypeHandshake:
- return ReadHandshake(r)
- case TypeTest:
- return ReadTest(r)
- default:
- return nil, fmt.Errorf("unsupported type: %v", dType)
- }
+func (t Ping) Marshal() []any {
+ return []any{}
}
-func ReadDataType(r io.Reader) (DataType, error) {
- var data uint8
- if err := read(r, &data); err != nil {
- return TypeUnknown, err
- }
+type Pong struct {
+ Timestamp time.Time
+}
- dType := DataType(data)
+func (t Pong) Marshal() []any {
+ return []any{uint64(t.Timestamp.Unix())}
+}
- return dType, nil
+func ReadPong(r io.Reader) (Pong, error) {
+ var (
+ t Pong
+ timestamp uint64
+ )
+
+ err := read(r, &timestamp)
+ t.Timestamp = time.Unix(int64(timestamp), 0)
+ return t, err
}
+//
+
func readString(r io.Reader, ptr *string) error {
var (
sb strings.Builder