Server.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package HttpServer
  2. import (
  3. "Yunlot/Handle"
  4. "Yunlot/conf"
  5. "Yunlot/lib"
  6. "Yunlot/logs"
  7. "Yunlot/models/Device"
  8. "encoding/json"
  9. "fmt"
  10. "github.com/gin-gonic/gin"
  11. "strings"
  12. )
  13. func ReturnHandle(Device_r *Device.Device, topicName string, data lib.JSONR) interface{} {
  14. b, _ := json.Marshal(data)
  15. _, byte_r := Handle.PushHandle(Device_r, topicName, string(b))
  16. var json_r map[string]interface{}
  17. if len(byte_r) > 0 {
  18. err := json.Unmarshal(byte_r, &json_r)
  19. if err == nil {
  20. return json_r
  21. }
  22. return byte_r
  23. }
  24. err := json.Unmarshal(byte_r, &json_r)
  25. if err == nil {
  26. return json_r
  27. }
  28. return b
  29. }
  30. func json_key() {
  31. }
  32. func Run() {
  33. // 创建一个Gin路由器
  34. r := gin.Default()
  35. //设备上报属性
  36. r.POST("/*topicName", func(c *gin.Context) {
  37. logs.Println("T_sn:", c.Query("T_sn"))
  38. logs.Println("topicName:", c.Param("topicName"))
  39. Device_r := Device.Device{T_sn: c.Query("T_sn")}
  40. if !Device_r.Read_Tidy() {
  41. c.JSON(200, lib.JSONR{Code: lib.Error, Msg: "T_sn 错误!"})
  42. return
  43. }
  44. if Device_r.T_state != 1 {
  45. c.JSON(200, lib.JSONR{Code: lib.Error, Msg: "T_sn 错误!"})
  46. return
  47. }
  48. if Device_r.T_password != c.Query("T_password") {
  49. c.JSON(200, ReturnHandle(&Device_r, c.Param("topicName"), lib.JSONR{Code: lib.Error, Msg: "T_password 错误!"}))
  50. return
  51. }
  52. //
  53. byte_r, err := c.GetRawData()
  54. if err != nil {
  55. c.JSON(200, ReturnHandle(&Device_r, c.Param("topicName"), lib.JSONR{Code: lib.Error, Msg: "JSON 错误!"}))
  56. return
  57. }
  58. if len(byte_r) == 0 {
  59. c.JSON(200, ReturnHandle(&Device_r, c.Param("topicName"), lib.JSONR{Code: lib.Error, Msg: "JSON 错误!"}))
  60. return
  61. }
  62. logs.Println("byte", string(byte_r))
  63. // 转换
  64. Rt_r := Handle.PullHandle(&Device_r, c.Param("topicName"), byte_r)
  65. //logs.Println("ReturnHandle:",string(ReturnHandle(&Device_r,c.Param("topicName"),Rt_r)))
  66. c.JSON(200, ReturnHandle(&Device_r, c.Param("topicName"), Rt_r))
  67. return
  68. })
  69. //获取属性
  70. r.GET("/*topicName", func(c *gin.Context) {
  71. logs.Println("T_sn:", c.Query("T_sn"))
  72. logs.Println("topicName:", c.Param("topicName"))
  73. Device_r := Device.Device{T_sn: c.Query("T_sn")}
  74. if !Device_r.Read_Tidy() {
  75. c.JSON(200, lib.JSONR{Code: lib.Error, Msg: "T_sn 错误!"})
  76. return
  77. }
  78. if Device_r.T_state != 1 {
  79. c.JSON(200, lib.JSONR{Code: lib.Error, Msg: "T_sn 错误!"})
  80. return
  81. }
  82. if Device_r.T_password != c.Query("T_password") {
  83. c.JSON(200, ReturnHandle(&Device_r, c.Param("topicName"), lib.JSONR{Code: lib.Error, Msg: "T_password 错误!"}))
  84. return
  85. }
  86. topicName := strings.Trim(c.Param("topicName"), "/") // 参数: /A/B/C/D
  87. topicNameList := strings.Split(topicName, "/") // 分割数组
  88. x := lib.Json_key(topicNameList, 0, Device_r.T_dataJson) //获取指定 json 数据,如果失败,返回已找到的全部json
  89. c.JSON(200, ReturnHandle(&Device_r, c.Param("topicName"), lib.JSONR{Code: lib.Success, Msg: "ok!", Data: x}))
  90. return
  91. })
  92. r.Run(fmt.Sprintf(":%d", conf.HTTPServer_Port))
  93. }