Clients.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package MqttServer
  2. import (
  3. "Yunlot/logs"
  4. "Yunlot/models/Device"
  5. "encoding/json"
  6. )
  7. // / - 连接 实体
  8. type Ms_Project_Connected struct {
  9. Clientid string `json:"clientid"`
  10. Username string `json:"username"`
  11. Ipaddress string `json:"ipaddress"`
  12. Reason string `json:"reason"` // sha ccv
  13. }
  14. // / - 离线断开 实体
  15. type Ms_Project_Disconnected struct {
  16. Clientid string `json:"clientid"`
  17. Username string `json:"username"`
  18. Ipaddress string `json:"ipaddress"`
  19. Reason string `json:"reason"`
  20. //终端连接断开原因:
  21. //normal:客户端主动断开
  22. //kicked:服务端踢出,通过 REST API
  23. //keepalive_timeout: keepalive 超时
  24. //not_authorized: 认证失败,或者 acl_nomatch = disconnect 时没有权限的 Pub/Sub 会主动断开客户端
  25. //tcp_closed: 对端关闭了网络连接
  26. //internal_error: 畸形报文或其他未知错误
  27. }
  28. // 设备连接
  29. func MessageConnected(topicName string, message []byte) {
  30. logs.Println("============= MessageConnected Mqtt JSON =============")
  31. logs.Println("topic:", topicName, " message:", string(message))
  32. //logs.Println("=>", a)
  33. var Ms_project Ms_Project_Connected
  34. err := json.Unmarshal(message, &Ms_project)
  35. if err != nil {
  36. logs.PrintlnError("MqttServer", "JSON反序列化失败[Ms_Project]", string(message))
  37. return
  38. }
  39. var r_Device Device.Device
  40. r_Device.T_sn = Ms_project.Clientid
  41. r_Device.Read()
  42. if err != nil {
  43. logs.Println("MessageDisconnected 没有该设备:", Ms_project.Clientid)
  44. return
  45. }
  46. logs.Println("Clientid:", Ms_project.Clientid)
  47. logs.Println("Username:", Ms_project.Username)
  48. r_Device.T_state = 1
  49. r_Device.T_online = 1
  50. // 同步参数
  51. r_Device.Update("T_state","T_online")
  52. logs.Println("============= MessageConnected Mqtt JSON AND =============", topicName)
  53. }
  54. func ToReason(str string) (Reason string) {
  55. switch str {
  56. case "normal":
  57. Reason = "客户端主动断开"
  58. break
  59. case "kicked":
  60. Reason = "设备异常掉线,服务端踢出,通过 REST API"
  61. break
  62. case "keepalive_timeout":
  63. Reason = "设备异常掉线,keepalive 超时"
  64. break
  65. case "not_authorized":
  66. Reason = "设备异常掉线,认证失败"
  67. break
  68. case "tcp_closed":
  69. Reason = "设备异常掉线,对端关闭了网络连接"
  70. break
  71. case "internal_error":
  72. Reason = "设备异常掉线,畸形报文或其他未知错误"
  73. break
  74. }
  75. return Reason
  76. }
  77. // 设备断开
  78. func MessageDisconnected(topicName string, message []byte) {
  79. logs.Println("============= MessageDisconnected Mqtt JSON =============")
  80. logs.Println("topic:", topicName, " message:", string(message))
  81. //logs.Println("=>", a)
  82. var Ms_project Ms_Project_Disconnected
  83. err := json.Unmarshal(message, &Ms_project)
  84. if err != nil {
  85. logs.PrintlnError("MqttServer", "JSON反序列化失败[Ms_Project]", string(message))
  86. return
  87. }
  88. logs.Println("Clientid:", Ms_project.Clientid)
  89. logs.Println("Username:", Ms_project.Username)
  90. var r_Device Device.Device
  91. r_Device.T_sn = Ms_project.Clientid
  92. r_Device.Read()
  93. if err != nil {
  94. logs.Println("MessageDisconnected 没有该设备:", Ms_project.Clientid)
  95. return
  96. }
  97. r_Device.T_online = 0
  98. // 同步参数
  99. r_Device.Update("T_online")
  100. logs.Println("============= MessageDisconnected Mqtt JSON AND =============", topicName)
  101. }