refactor/serializing (#1)
Co-authored-by: matst80 <mats.tornberg@gmail.com> Reviewed-on: https://git.tornberg.me/mats/go-cart-actor/pulls/1
This commit was merged in pull request #1.
This commit is contained in:
76
packet.go
Normal file
76
packet.go
Normal file
@@ -0,0 +1,76 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"io"
|
||||
)
|
||||
|
||||
const (
|
||||
RemoteGetState = uint16(0x01)
|
||||
RemoteHandleMessage = uint16(0x02)
|
||||
ResponseBody = uint16(0x03)
|
||||
)
|
||||
|
||||
type CartPacket struct {
|
||||
Version uint16
|
||||
MessageType uint16
|
||||
Id CartId
|
||||
DataLength uint16
|
||||
}
|
||||
|
||||
type ResponsePacket struct {
|
||||
Version uint16
|
||||
MessageType uint16
|
||||
DataLength uint16
|
||||
}
|
||||
|
||||
func SendCartPacket(conn io.Writer, id CartId, messageType uint16, datafn func(w io.Writer) error) error {
|
||||
data, err := GetData(datafn)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
binary.Write(conn, binary.LittleEndian, CartPacket{
|
||||
Version: 2,
|
||||
MessageType: messageType,
|
||||
Id: id,
|
||||
DataLength: uint16(len(data)),
|
||||
})
|
||||
_, err = conn.Write(data)
|
||||
return err
|
||||
}
|
||||
|
||||
func SendPacket(conn io.Writer, messageType uint16, datafn func(w io.Writer) error) error {
|
||||
data, err := GetData(datafn)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
binary.Write(conn, binary.LittleEndian, ResponsePacket{
|
||||
Version: 1,
|
||||
MessageType: messageType,
|
||||
DataLength: uint16(len(data)),
|
||||
})
|
||||
_, err = conn.Write(data)
|
||||
return err
|
||||
}
|
||||
|
||||
// func ReceiveCartPacket(conn io.Reader) (CartPacket, []byte, error) {
|
||||
// var packet CartPacket
|
||||
// err := binary.Read(conn, binary.LittleEndian, &packet)
|
||||
// if err != nil {
|
||||
// return packet, nil, err
|
||||
// }
|
||||
// data := make([]byte, packet.DataLength)
|
||||
// _, err = conn.Read(data)
|
||||
// return packet, data, err
|
||||
// }
|
||||
|
||||
func ReceivePacket(conn io.Reader) (uint16, []byte, error) {
|
||||
var packet ResponsePacket
|
||||
err := binary.Read(conn, binary.LittleEndian, &packet)
|
||||
if err != nil {
|
||||
return packet.MessageType, nil, err
|
||||
}
|
||||
data := make([]byte, packet.DataLength)
|
||||
_, err = conn.Read(data)
|
||||
return packet.MessageType, data, err
|
||||
}
|
||||
Reference in New Issue
Block a user