flathandler.go 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. package flathandler
  2. import (
  3. "errors"
  4. "fmt"
  5. business "device-manage/app/admin/models/busmodels"
  6. "device-manage/common/log"
  7. model "device-manage/common/mqttcli/flatbuffer/models"
  8. deviceopts "device-manage/common/mqttcli/flatbuffer/src/deviceopts/msg"
  9. flatbuffers "github.com/google/flatbuffers/go"
  10. )
  11. //create collect log data buffer
  12. func CreateLogCollectBuffer(userid, url string, reply string) []byte {
  13. builder := flatbuffers.NewBuilder(0)
  14. userOffset := builder.CreateString(userid)
  15. urlOffset := builder.CreateString(url)
  16. replyOffset := builder.CreateString(reply)
  17. reasonOffset := builder.CreateString("collect log.")
  18. deviceopts.LogCollectStart(builder)
  19. deviceopts.LogCollectAddUserid(builder, userOffset)
  20. deviceopts.LogCollectAddUrl(builder, urlOffset)
  21. deviceopts.LogCollectAddReason(builder, reasonOffset)
  22. deviceopts.LogCollectAddReply(builder, replyOffset)
  23. deviceopts.LogCollectAddResult(builder, 0)
  24. dataOffset := deviceopts.LogCollectEnd(builder)
  25. deviceopts.PayloadStart(builder)
  26. deviceopts.PayloadAddTypeType(builder, deviceopts.PayloadsLogCollect)
  27. deviceopts.PayloadAddType(builder, dataOffset)
  28. payload := deviceopts.PayloadEnd(builder)
  29. builder.Finish(payload)
  30. buffer := builder.FinishedBytes()
  31. return buffer
  32. }
  33. //create App Install data buffer
  34. func CreateFileUpgradeBuffer(userid, url, appKey, reply, fileUid string) []byte {
  35. builder := flatbuffers.NewBuilder(0)
  36. userOffset := builder.CreateString(userid)
  37. urlOffset := builder.CreateString(url)
  38. keyOffset := builder.CreateString(appKey)
  39. fileUidOffset := builder.CreateString(fileUid)
  40. reasonOffset := builder.CreateString("app install.")
  41. replyOffset := builder.CreateString(reply)
  42. deviceopts.FileUpgradeStart(builder)
  43. deviceopts.FileUpgradeAddUrl(builder, urlOffset)
  44. deviceopts.FileUpgradeAddUserid(builder, userOffset)
  45. deviceopts.FileUpgradeAddAppkey(builder, keyOffset)
  46. deviceopts.FileUpgradeAddReason(builder, reasonOffset)
  47. deviceopts.FileUpgradeAddUid(builder, fileUidOffset)
  48. deviceopts.FileUpgradeAddReply(builder, replyOffset)
  49. deviceopts.FileUpgradeAddResult(builder, 0)
  50. dataOffset := deviceopts.FileUpgradeEnd(builder)
  51. deviceopts.PayloadStart(builder)
  52. deviceopts.PayloadAddTypeType(builder, deviceopts.PayloadsFileUpgrade)
  53. deviceopts.PayloadAddType(builder, dataOffset)
  54. payload := deviceopts.PayloadEnd(builder)
  55. builder.Finish(payload)
  56. buffer := builder.FinishedBytes()
  57. return buffer
  58. }
  59. //create reboot data buffer
  60. func CreateRebootBuffer(reqtime int64, reply string) []byte {
  61. builder := flatbuffers.NewBuilder(0)
  62. reasonOffset := builder.CreateString("reboot.")
  63. replyOffset := builder.CreateString(reply)
  64. deviceopts.RebootStart(builder)
  65. deviceopts.RebootAddResult(builder, 0)
  66. deviceopts.RebootAddReqtime(builder, reqtime)
  67. deviceopts.RebootAddReply(builder, replyOffset)
  68. deviceopts.RebootAddReason(builder, reasonOffset)
  69. dataOffset := deviceopts.RebootEnd(builder)
  70. deviceopts.PayloadStart(builder)
  71. deviceopts.PayloadAddTypeType(builder, deviceopts.PayloadsReboot)
  72. deviceopts.PayloadAddType(builder, dataOffset)
  73. payload := deviceopts.PayloadEnd(builder)
  74. builder.Finish(payload)
  75. buffer := builder.FinishedBytes()
  76. return buffer
  77. }
  78. //create heartbeat buffer
  79. func CreateHeartbeatBuffer(messg *model.Heartbeat) []byte {
  80. builder := flatbuffers.NewBuilder(0)
  81. serialOffset := builder.CreateString(messg.Serial)
  82. ipOffset := builder.CreateString(messg.DeviceIp)
  83. gpsOffset := builder.CreateString(messg.Gps)
  84. devtypeOffset := builder.CreateString(messg.Devtype)
  85. softverOffset := builder.CreateString(messg.Softver)
  86. deviceopts.HeartBeatEventStart(builder)
  87. deviceopts.HeartBeatEventAddGps(builder, gpsOffset)
  88. deviceopts.HeartBeatEventAddDeviceip(builder, ipOffset)
  89. deviceopts.HeartBeatEventAddSerial(builder, serialOffset)
  90. deviceopts.HeartBeatEventAddSoftver(builder, softverOffset)
  91. deviceopts.HeartBeatEventAddDevtype(builder, devtypeOffset)
  92. deviceopts.HeartBeatEventAddStatus(builder, int32(messg.Status))
  93. deviceopts.HeartBeatEventAddNettype(builder, int32(messg.Nettype))
  94. dataOffset := deviceopts.HeartBeatEventEnd(builder)
  95. deviceopts.PayloadStart(builder)
  96. deviceopts.PayloadAddTypeType(builder, deviceopts.PayloadsHeartBeatEvent)
  97. deviceopts.PayloadAddType(builder, dataOffset)
  98. payload := deviceopts.PayloadEnd(builder)
  99. builder.Finish(payload)
  100. buffer := builder.FinishedBytes()
  101. return buffer
  102. }
  103. func FlatbufferHandler(deviceSn string, buf []byte) error {
  104. var err error = errors.New("null")
  105. msg := deviceopts.GetRootAsPayload(buf, 0)
  106. unionTable := new(flatbuffers.Table)
  107. if msg.Type(unionTable) {
  108. unionType := msg.TypeType()
  109. switch unionType {
  110. case deviceopts.PayloadsLogCollect:
  111. {
  112. fmt.Println("Cmd: LogCollect")
  113. unionData := new(deviceopts.LogCollect)
  114. unionData.Init(unionTable.Bytes, unionTable.Pos)
  115. result := unionData.Result()
  116. reason := unionData.Reason()
  117. url := unionData.Url()
  118. fmt.Println("result: ", result, " reason: ", string(reason), " url: ", string(url))
  119. log.Info("[recv: %s LogCollect][Result:%s][Reason:%s]\n", deviceSn, result, string(reason))
  120. if result == 0 {
  121. err = nil
  122. } else {
  123. err = errors.New(string(reason))
  124. }
  125. return err
  126. }
  127. case deviceopts.PayloadsHeartBeatEvent:
  128. {
  129. unionData := new(deviceopts.HeartBeatEvent)
  130. unionData.Init(unionTable.Bytes, unionTable.Pos)
  131. serial := unionData.Serial()
  132. devip := unionData.Deviceip()
  133. sevip := unionData.Serverip()
  134. gps := unionData.Gps()
  135. status := unionData.Status()
  136. nettype := unionData.Nettype()
  137. devtype := unionData.Devtype()
  138. softver := unionData.Softver()
  139. fmt.Println("serial:", string(serial))
  140. fmt.Println("devip:", string(devip))
  141. fmt.Println("sevip:", string(sevip))
  142. fmt.Println("gps:", string(gps))
  143. fmt.Println("status:", status)
  144. fmt.Println("nettype:", nettype)
  145. fmt.Println("devtype:", string(devtype))
  146. fmt.Println("softver:", string(softver))
  147. var hbeatInfo model.Heartbeat
  148. hbeatInfo.Devtype = string(devtype)
  149. hbeatInfo.Gps = string(gps)
  150. hbeatInfo.DeviceIp = string(devip)
  151. hbeatInfo.ServerIp = string(sevip)
  152. hbeatInfo.Nettype = int(nettype)
  153. hbeatInfo.Serial = string(serial)
  154. hbeatInfo.Softver = string(softver)
  155. hbeatInfo.Status = int(status)
  156. go func() {
  157. business.DevicesHeartBeat(&hbeatInfo)
  158. }()
  159. //log.Info("[recv: %s HBeat][status:%s][devtype:%s]\n", string(serial), status, string(devtype))
  160. return nil
  161. }
  162. case deviceopts.PayloadsUpgradeRecordEvent:
  163. {
  164. unionData := new(deviceopts.UpgradeRecordEvent)
  165. unionData.Init(unionTable.Bytes, unionTable.Pos)
  166. userid := unionData.Userid()
  167. url := unionData.Url()
  168. uid := unionData.Uid()
  169. appkey := unionData.Appkey()
  170. result := unionData.Result()
  171. reason := unionData.Reason()
  172. fmt.Println("deviceSn:", string(deviceSn))
  173. fmt.Println("userid:", string(userid))
  174. fmt.Println("url:", string(url))
  175. fmt.Println("uid:", string(uid))
  176. fmt.Println("appkey:", string(appkey))
  177. fmt.Println("result:", result)
  178. fmt.Println("reason:", reason)
  179. var record business.BusUpgradeRecord
  180. record.Uid = string(uid)
  181. record.DeviceSn = deviceSn
  182. record.CreateBy = string(userid)
  183. record.Insert()
  184. /* var hbeatInfo model.Heartbeat
  185. hbeatInfo.Devtype = string(devtype)
  186. hbeatInfo.Gps = string(gps)
  187. hbeatInfo.DeviceIp = string(devip)
  188. hbeatInfo.ServerIp = string(sevip)
  189. hbeatInfo.Nettype = int(nettype)
  190. hbeatInfo.Serial = string(serial)
  191. hbeatInfo.Softver = string(softver)
  192. hbeatInfo.Status = int(status)
  193. go func() {
  194. business.DevicesHeartBeat(&hbeatInfo)
  195. }() */
  196. //log.Info("[recv: %s HBeat][status:%s][devtype:%s]\n", string(serial), status, string(devtype))
  197. return nil
  198. }
  199. case deviceopts.PayloadsFileUpgrade:
  200. {
  201. fmt.Println("Cmd: FileUpgrade")
  202. unionData := new(deviceopts.FileUpgrade)
  203. unionData.Init(unionTable.Bytes, unionTable.Pos)
  204. result := unionData.Result()
  205. reason := unionData.Reason()
  206. url := unionData.Url()
  207. fmt.Println("result: ", result, " reason: ", string(reason), " url: ", string(url))
  208. //log.Info("[recv: %s AppInstall][Result:%s][Reason:%s]\n", deviceSn, result, string(reason))
  209. if result == 0 {
  210. err = nil
  211. } else {
  212. err = errors.New(string(reason))
  213. }
  214. return err
  215. }
  216. case deviceopts.PayloadsReboot:
  217. {
  218. fmt.Println("Cmd: Reboot")
  219. unionData := new(deviceopts.Reboot)
  220. unionData.Init(unionTable.Bytes, unionTable.Pos)
  221. result := unionData.Result()
  222. reason := unionData.Reason()
  223. reqtime := unionData.Reqtime()
  224. fmt.Println("result: ", result, " reason: ", string(reason), " reqtime: ", reqtime)
  225. //log.Info("[recv: %s Reboot][Result:%s][Reason:%s]\n", deviceSn, result, string(reason))
  226. if result == 0 {
  227. err = nil
  228. } else {
  229. err = errors.New(string(reason))
  230. }
  231. return err
  232. }
  233. default:
  234. fmt.Println("unknow type")
  235. }
  236. return err
  237. }
  238. return err
  239. }