protocol.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package protocol
  2. import (
  3. json2 "encoding/json"
  4. jsoniter "github.com/json-iterator/go"
  5. )
  6. var json = jsoniter.ConfigFastest
  7. var (
  8. SUCCESS uint8 = 0
  9. FAILED uint8 = 1
  10. SUCCESS_STR = "Successed"
  11. FAILED_STR = "Failed"
  12. )
  13. type Header struct {
  14. Id string `json:"id"` //设备编码[网关、一键呼叫、灯控、环境传感器、摄象机等]
  15. Seq uint64 `json:"seq"` //消息序号
  16. Gid string `json:"gid,omitempty"` //网关ID,没有可不填写
  17. Time string `json:"time"` //时间
  18. }
  19. func (o *Header) SetHeaderData(id, gid string, seq uint64) {
  20. o.Id = id
  21. o.Gid = gid
  22. o.Seq = seq
  23. o.Time = BJNow().Format("2006-01-02 15:04:05")
  24. }
  25. type StateError struct {
  26. State uint8 `json:"state"` //状态
  27. Error string `json:"error,omitempty"` //错误内容
  28. }
  29. func NewStateError(err error) *StateError {
  30. var r StateError
  31. if err != nil {
  32. r.State = FAILED
  33. r.Error = err.Error()
  34. } else {
  35. r.State = SUCCESS
  36. r.Error = SUCCESS_STR
  37. }
  38. return &r
  39. }
  40. func (o *StateError) SetStateErrorData(err error) {
  41. if err != nil {
  42. o.State = FAILED
  43. o.Error = err.Error()
  44. } else {
  45. o.State = SUCCESS
  46. o.Error = SUCCESS_STR
  47. }
  48. }
  49. type Pack_Ack struct {
  50. Header
  51. Data StateError `json:"data"`
  52. }
  53. func (o *Pack_Ack) EnCode(id, gid string, seq uint64, err error) (string, error) {
  54. o.Header.SetHeaderData(id, gid, seq)
  55. o.Data.SetStateErrorData(err)
  56. return json.MarshalToString(o)
  57. }
  58. func (o *Pack_Ack) DeCode(message string) error {
  59. return json.UnmarshalFromString(message, o)
  60. }
  61. type IDObject struct {
  62. Id uint `json:"id"`
  63. }
  64. type Pack_IDObject struct {
  65. Header
  66. Data IDObject `json:"data"`
  67. }
  68. func (o *Pack_IDObject) EnCode(gid string, seq uint64, id uint) (string, error) {
  69. o.Header.SetHeaderData(gid, gid, seq)
  70. o.Data.Id = id
  71. return json.MarshalToString(o)
  72. }
  73. func (o *Pack_IDObject) DeCode(message string) error {
  74. return json.UnmarshalFromString(message, o)
  75. }
  76. type UploadData struct {
  77. StateError
  78. Tid uint16 `json:"tid"`
  79. Data map[uint16]float64 `json:"data,omitempty"`
  80. }
  81. type Pack_UploadData struct {
  82. Header
  83. Data UploadData `json:"data"`
  84. }
  85. func (o *Pack_UploadData) EnCode(id, gid string, seq uint64, err error, tid uint16, data map[uint16]float64) (string, error) {
  86. o.Header.SetHeaderData(id, gid, seq)
  87. o.Data.StateError.SetStateErrorData(err)
  88. o.Data.Tid = tid
  89. o.Data.Data = data
  90. marshal, err1 := json2.Marshal(o)
  91. return string(marshal), err1
  92. //return json.MarshalToString(o)
  93. }
  94. func (o *Pack_UploadData) DeCode(message string) error {
  95. return json.UnmarshalFromString(message, o)
  96. }
  97. type ControlData struct {
  98. Tid uint16 `json:"tid"`
  99. Sid uint16 `json:"sid"`
  100. Val uint `json:"val"`
  101. }
  102. type Pack_ControlData struct {
  103. Header
  104. Data ControlData `json:"data"`
  105. }
  106. func (o *Pack_ControlData) EnCode(id, gid string, seq uint64, tid, sid uint16, val uint) (string, error) {
  107. o.Header.SetHeaderData(id, gid, seq)
  108. o.Data.Tid = tid
  109. o.Data.Sid = sid
  110. o.Data.Val = val
  111. return json.MarshalToString(o)
  112. }
  113. func (o *Pack_ControlData) DeCode(message string) error {
  114. return json.UnmarshalFromString(message, o)
  115. }