12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package rpc
- import (
- "encoding/binary"
- "io"
- )
- const (
- FuncPing uint8 = 0x01
- FuncRequest = 0x02
- FuncResponse = 0x03
- )
- type Frame struct {
- Func uint8
- Sequence uint16
- Length uint16
- Data []byte
- }
- func readFrame(r io.Reader) (frame *Frame, err error) {
- frame = &Frame{}
- if err = binary.Read(r, binary.LittleEndian, &frame.Func); err != nil {
- return
- }
- if err = binary.Read(r, binary.LittleEndian, &frame.Sequence); err != nil {
- return
- }
- if err = binary.Read(r, binary.LittleEndian, &frame.Length); err != nil {
- return
- }
- frame.Data = make([]byte, frame.Length)
- _, err = io.ReadFull(r, frame.Data)
- return
- }
- func writeFrame(w io.Writer, frame *Frame) (err error) {
- if frame.Length == 0 {
- frame.Length = uint16(len(frame.Data))
- }
- if err = binary.Write(w, binary.LittleEndian, frame.Func); err != nil {
- return
- }
- if err = binary.Write(w, binary.LittleEndian, frame.Sequence); err != nil {
- return
- }
- if err = binary.Write(w, binary.LittleEndian, frame.Length); err != nil {
- return
- }
- _, err = w.Write(frame.Data)
- return
- }
|