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 }