spliter.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package debugger
  2. import (
  3. "Wine-Server/utils"
  4. "github.com/gin-gonic/gin"
  5. "github.com/gorilla/websocket"
  6. )
  7. func debuggerConnect(did string, conn *websocket.Conn) {
  8. utils.DebugLock.Lock()
  9. utils.DebugWss[did] = conn
  10. utils.DebugLock.Unlock()
  11. utils.Logger.Printf("debugger[%s] connected\n", did)
  12. }
  13. func debuggerDisconnect(did string) {
  14. utils.DebugLock.Lock()
  15. delete(utils.DebugWss, did)
  16. utils.DebugLock.Unlock()
  17. utils.Logger.Printf("debugger[%s] disconnected\n", did)
  18. }
  19. func SocketHandler(ctx *gin.Context) {
  20. conn, err := utils.UpgradeHttp2Ws.Upgrade(ctx.Writer, ctx.Request, nil)
  21. if err != nil {
  22. utils.Logger.Println("can't establish debugger socket connect")
  23. ctx.JSON(utils.HttpError, utils.Fail("can't establish socket connect"))
  24. return
  25. }
  26. who := ctx.Param("id")
  27. if who == "" {
  28. _ = conn.WriteJSON(utils.WsError("debugger id is required"))
  29. return
  30. }
  31. debuggerConnect(who, conn)
  32. for {
  33. var msg utils.WsMsg
  34. err = conn.ReadJSON(&msg)
  35. if err != nil {
  36. debuggerDisconnect(who)
  37. return
  38. }
  39. switch msg.Event {
  40. case "pin":
  41. keepAlive(conn)
  42. break
  43. case "listDevices":
  44. listDevices(conn)
  45. break
  46. case "setDebug":
  47. setDebug(conn, msg.Data)
  48. break
  49. case "openGate":
  50. openGate(conn, who, msg.Data)
  51. break
  52. case "setLocation":
  53. setLocation(conn, msg.Data)
  54. break
  55. case "setPpv":
  56. setPpv(conn, msg.Data)
  57. break
  58. default:
  59. _ = conn.WriteJSON(utils.WsError("unrecognized event"))
  60. break
  61. }
  62. }
  63. }