From 93b3e63e89594b2b7a05b791a5cfc366f10c763b Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sun, 18 Jun 2023 13:40:26 +0300 Subject: add universal tcp message reader and writer --- internal/tcp/tcp.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 internal/tcp/tcp.go (limited to 'internal/tcp/tcp.go') diff --git a/internal/tcp/tcp.go b/internal/tcp/tcp.go new file mode 100644 index 0000000..3f9bafc --- /dev/null +++ b/internal/tcp/tcp.go @@ -0,0 +1,44 @@ +package tcp + +import ( + "encoding/binary" + "io" +) + +type Writer interface { + Write(b []byte) (n int, err error) +} + +type Reader interface { + Read(b []byte) (n int, err error) +} + +func WriteStr(w Writer, message string) error { + messageBytes := []byte(message) + sizeBytes := make([]byte, 8) + binary.BigEndian.PutUint64(sizeBytes, uint64(len(messageBytes))) + + if _, err := w.Write(sizeBytes); err != nil { + return err + } + if _, err := w.Write(messageBytes); err != nil { + return err + } + + return nil +} + +func ReadStr(r Reader) (string, error) { + sizeBytes := make([]byte, 8) + if _, err := io.ReadFull(r, sizeBytes); err != nil { + return "", err + } + messageSize := binary.BigEndian.Uint64(sizeBytes) + + messageBytes := make([]byte, messageSize) + if _, err := io.ReadFull(r, messageBytes); err != nil { + return "", err + } + + return string(messageBytes), nil +} -- cgit v1.2.3