aboutsummaryrefslogtreecommitdiff
path: root/hotline/user.go
diff options
context:
space:
mode:
authorJeff Halter <868228+jhalter@users.noreply.github.com>2024-06-09 13:56:29 -0700
committerJeff Halter <868228+jhalter@users.noreply.github.com>2024-06-09 14:05:15 -0700
commit9cf66aeafbcbb9237fedc2efc97cc2856eb60f7f (patch)
treec3139d8af2bd6ae106a1f619cad7d64f2ddea6db /hotline/user.go
parentb129b7cbc9fd9a9c11a77e5922861ef08893efa1 (diff)
Convert more bespoke methods to io.Reader/io.Writer interfaces
Diffstat (limited to 'hotline/user.go')
-rw-r--r--hotline/user.go28
1 files changed, 18 insertions, 10 deletions
diff --git a/hotline/user.go b/hotline/user.go
index 5b1b705..7d6f851 100644
--- a/hotline/user.go
+++ b/hotline/user.go
@@ -2,6 +2,8 @@ package hotline
import (
"encoding/binary"
+ "io"
+ "slices"
)
// User flags are stored as a 2 byte bitmap and represent various user states
@@ -26,7 +28,7 @@ type User struct {
Name string // Variable length user name
}
-func (u User) Payload() []byte {
+func (u *User) Read(p []byte) (int, error) {
nameLen := make([]byte, 2)
binary.BigEndian.PutUint16(nameLen, uint16(len(u.Name)))
@@ -43,17 +45,23 @@ func (u User) Payload() []byte {
out = append(out, nameLen...)
out = append(out, u.Name...)
- return out
+ return copy(p, slices.Concat(
+ u.ID,
+ u.Icon,
+ u.Flags,
+ nameLen,
+ []byte(u.Name),
+ )), io.EOF
}
-func ReadUser(b []byte) (*User, error) {
- u := &User{
- ID: b[0:2],
- Icon: b[2:4],
- Flags: b[4:6],
- Name: string(b[8:]),
- }
- return u, nil
+func (u *User) Write(p []byte) (int, error) {
+ namelen := int(binary.BigEndian.Uint16(p[6:8]))
+ u.ID = p[0:2]
+ u.Icon = p[2:4]
+ u.Flags = p[4:6]
+ u.Name = string(p[8 : 8+namelen])
+
+ return 8 + namelen, nil
}
// decodeString decodes an obfuscated user string from a client