Initial upload
This commit is contained in:
commit
cefd7abe8a
19 changed files with 1027 additions and 0 deletions
54
fcast/raw.go
Normal file
54
fcast/raw.go
Normal file
|
@ -0,0 +1,54 @@
|
|||
package fcast
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"errors"
|
||||
)
|
||||
|
||||
type OpCode uint8
|
||||
|
||||
type MessageHeader struct {
|
||||
Size uint32 // little endian (4) 0-3
|
||||
OpCode OpCode // (1) 4-4
|
||||
}
|
||||
|
||||
type RawMessage struct {
|
||||
Header MessageHeader // 0-4
|
||||
Body []byte // 5-
|
||||
}
|
||||
|
||||
func NewMessage(op OpCode, body []byte) *RawMessage {
|
||||
return &RawMessage{
|
||||
Header: MessageHeader{
|
||||
Size: uint32(len(body) + 1),
|
||||
OpCode: op,
|
||||
},
|
||||
Body: body,
|
||||
}
|
||||
}
|
||||
|
||||
func SerializeRaw(message *RawMessage) []byte {
|
||||
buf := make([]byte, 4+message.Header.Size)
|
||||
binary.LittleEndian.PutUint32(buf[0:4], message.Header.Size)
|
||||
buf[4] = byte(message.Header.OpCode)
|
||||
copy(buf[5:], message.Body)
|
||||
|
||||
return buf
|
||||
}
|
||||
|
||||
var (
|
||||
ErrHeaderTooShort = errors.New("header is too short")
|
||||
ErrBodyTooShort = errors.New("body is too short")
|
||||
)
|
||||
|
||||
func DeserializeRaw(bodyLen, opCode, body []byte) (*RawMessage, error) {
|
||||
|
||||
var msg RawMessage
|
||||
|
||||
msg.Header.Size = binary.LittleEndian.Uint32(bodyLen)
|
||||
msg.Header.OpCode = OpCode(uint8(opCode[0]))
|
||||
msg.Body = body
|
||||
|
||||
return &msg, nil
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue