worker.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package debugger
  2. import (
  3. "Wine-Server/utils"
  4. "Wine-Server/utils/tables"
  5. "github.com/gin-gonic/gin"
  6. "github.com/gorilla/websocket"
  7. )
  8. func broadcastHandler(ctx *gin.Context) {
  9. ctx.JSON(utils.HttpOk, utils.Success(nil))
  10. }
  11. func keepAlive(conn *websocket.Conn) {
  12. _ = conn.WriteJSON(utils.WsEvent("pon", nil))
  13. }
  14. func listDevices(conn *websocket.Conn) {
  15. result := utils.JsonType{}
  16. for seq, device := range utils.SellerDevices {
  17. table := tables.DeviceTable{Id: seq}
  18. _ = table.Get()
  19. result[seq] = utils.JsonType{
  20. "seq": seq, "online": device.Online, "location": table.Addr,
  21. "vpp1": table.Wines[0].Vpp, "vpp2": table.Wines[1].Vpp,
  22. "vpp3": table.Wines[2].Vpp, "vpp4": table.Wines[3].Vpp,
  23. }
  24. }
  25. _ = conn.WriteJSON(utils.WsEvent("devices", result))
  26. }
  27. func setDebug(conn *websocket.Conn, data any) {
  28. var param debugParam
  29. err := utils.AnyTrans(data, &param)
  30. if err != nil {
  31. _ = conn.WriteJSON(utils.WsError("params error"))
  32. return
  33. }
  34. if device, exist := utils.SellerDevices[param.Seq]; exist {
  35. if device.Online {
  36. _ = device.Conn.WriteJSON(utils.WsEvent("setDebug", param.Debug))
  37. return
  38. }
  39. _ = conn.WriteJSON(utils.WsError("device offline"))
  40. return
  41. }
  42. _ = conn.WriteJSON(utils.WsError("no such device"))
  43. }
  44. func openGate(conn *websocket.Conn, who string, data any) {
  45. var param openParam
  46. err := utils.AnyTrans(data, &param)
  47. if err != nil {
  48. _ = conn.WriteJSON(utils.WsError("params error"))
  49. return
  50. }
  51. if device, exist := utils.SellerDevices[param.Seq]; exist {
  52. if device.Online {
  53. var prefix string
  54. if param.Kind == "Changing" {
  55. prefix = "Change"
  56. } else if param.Kind == "Fixing" {
  57. prefix = "Fix"
  58. } else {
  59. utils.Logger.Printf("unrecognized open type: %s\n", param.Kind)
  60. _ = conn.WriteJSON(utils.WsEvent("authCode", utils.Fail("error open type")))
  61. return
  62. }
  63. key := utils.Format("%s_%s_%s", prefix, param.Seq, who)
  64. code, err := utils.Redis.Get(utils.WxPayCli, key).Result()
  65. if err != nil {
  66. code = utils.RandomString(6, utils.NumberPatten)
  67. utils.Redis.Set(utils.WxPayCli, key, code, utils.Duration(30))
  68. } else {
  69. utils.Redis.Expire(utils.WxPayCli, key, utils.Duration(30))
  70. }
  71. _ = device.Conn.WriteJSON(utils.WsEvent("openGate", utils.JsonType{
  72. "type": param.Kind, "user_type": "debugger", "user_id": who,
  73. }))
  74. _ = conn.WriteJSON(utils.WsEvent("authCode", utils.Success(code)))
  75. return
  76. }
  77. _ = conn.WriteJSON(utils.WsError("device offline"))
  78. return
  79. }
  80. _ = conn.WriteJSON(utils.WsError("no such device"))
  81. }
  82. func setLocation(conn *websocket.Conn, data any) {
  83. var param locationParam
  84. err := utils.AnyTrans(data, &param)
  85. if err != nil {
  86. _ = conn.WriteJSON(utils.WsError("params error"))
  87. return
  88. }
  89. table := tables.DeviceTable{Id: param.Seq}
  90. _ = table.Get()
  91. err = table.Update(utils.JsonType{"addr": param.Loc})
  92. if err != nil {
  93. utils.Logger.Printf("update location failed, device[%s], addr[%s], error: %s\n", param.Seq, param.Loc, err)
  94. _ = conn.WriteJSON(utils.WsError("update location failed"))
  95. }
  96. _ = conn.WriteJSON(utils.WsEvent("locationUpdated", nil))
  97. }
  98. func setVpp(conn *websocket.Conn, data any) {
  99. var param vppParam
  100. err := utils.AnyTrans(data, &param)
  101. if err != nil {
  102. _ = conn.WriteJSON(utils.WsError("params error"))
  103. return
  104. }
  105. table := tables.DeviceTable{Id: param.Seq}
  106. _ = table.Get()
  107. err = table.Update(utils.JsonType{utils.Format("vpp%d", param.Index+1): param.Value})
  108. if err != nil {
  109. utils.Logger.Printf(
  110. "update location failed, device[%s], vpp%d[%s], error: %s\n",
  111. param.Seq, param.Index, param.Value, err,
  112. )
  113. _ = conn.WriteJSON(utils.WsError("update vpp failed"))
  114. }
  115. if device, exist := utils.SellerDevices[param.Seq]; exist {
  116. if device.Online {
  117. _ = device.Conn.WriteJSON(utils.WsEvent("vppUpdate", utils.JsonType{
  118. "index": param.Index,
  119. "value": param.Value,
  120. }))
  121. return
  122. }
  123. _ = conn.WriteJSON(utils.WsError("device offline"))
  124. return
  125. }
  126. _ = conn.WriteJSON(utils.WsError("no such device"))
  127. }