Trans.go 720 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package udp
  2. import (
  3. "../com"
  4. "bytes"
  5. )
  6. const (
  7. SplitChar = ','
  8. MaxDataLen = 1024
  9. PackSize = 1100
  10. )
  11. type DataPacket struct {
  12. Seq uint
  13. Inner int
  14. Payload []byte
  15. }
  16. type EventPacket struct {
  17. Event string
  18. Data *DataPacket
  19. }
  20. func UnpackEventPacket(data []byte) *EventPacket {
  21. if index := bytes.IndexByte(data, SplitChar); index != -1 {
  22. event, payload := string(data[:index]), unpackDataPacket(data[index+1:])
  23. return &EventPacket{Event: event, Data: payload}
  24. }
  25. return nil
  26. }
  27. func unpackDataPacket(data []byte) *DataPacket {
  28. if len(data) == 0 {
  29. return nil
  30. }
  31. seq, inner := com.BytesToUint(data[0:4]), com.BytesToInt(data[4:8])
  32. return &DataPacket{Seq: seq, Inner: inner, Payload: data[8:]}
  33. }