forked from Open-Nyzo/go-nyzo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
node_join.go
52 lines (45 loc) · 1.54 KB
/
node_join.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/*
TODO: the Java version sends V1 join messages during the startup process, but V2s in some other contexts. Clarify whether this is really needed, or whether we can just live with V2 everywhere.
*/
package message_content
import (
"github.com/cryptic-monk/go-nyzo/internal/nyzo/messages/message_content/message_fields"
"io"
)
const (
maximumNicknameLengthBytes = 50 // max length of utf8-encoded Nickname bytes that we'll transfer
)
type NodeJoin struct {
PortTcp int32
PortUdp int32
Nickname string
}
func NewNodeJoin(portTcp, portUdp int32, nickname string) *NodeJoin {
return &NodeJoin{portTcp, portUdp, nickname}
}
// Serializable interface: data length when serialized
func (c *NodeJoin) GetSerializedLength() int {
return message_fields.SizePort*2 + message_fields.SerializedStringLength(c.Nickname, maximumNicknameLengthBytes)
}
// Serializable interface: convert to bytes.
func (c *NodeJoin) ToBytes() []byte {
var serialized []byte
serialized = append(serialized, message_fields.SerializeInt32(c.PortTcp)...)
serialized = append(serialized, message_fields.SerializeInt32(c.PortUdp)...)
serialized = append(serialized, message_fields.SerializeString(c.Nickname, maximumNicknameLengthBytes)...)
return serialized
}
// Serializable interface: convert from bytes.
func (c *NodeJoin) Read(r io.Reader) error {
var err error
c.PortTcp, err = message_fields.ReadInt32(r)
if err != nil {
return err
}
c.PortUdp, err = message_fields.ReadInt32(r)
if err != nil {
return err
}
c.Nickname, err = message_fields.ReadString(r)
return err
}