spliter.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package worker
  2. import (
  3. "Wine-Server/utils"
  4. "github.com/gin-gonic/gin"
  5. "github.com/gorilla/websocket"
  6. )
  7. func workerConnected(wid string, conn *websocket.Conn) {
  8. utils.WorkerLock.Lock()
  9. utils.WorkerWss[wid] = conn
  10. utils.WorkerLock.Unlock()
  11. utils.Logger.Printf("worker[%s] connected\n", wid)
  12. }
  13. func workerDisconnect(wid string) {
  14. utils.WorkerLock.Lock()
  15. delete(utils.WorkerWss, wid)
  16. utils.WorkerLock.Unlock()
  17. utils.Logger.Printf("worker[%s] disconnected\n", wid)
  18. }
  19. func SocketHandler(ctx *gin.Context) {
  20. conn, err := utils.UpgradeHttp2Ws.Upgrade(ctx.Writer, ctx.Request, nil)
  21. if err != nil {
  22. ctx.JSON(utils.HttpError, utils.Fail("can't establish socket connect"))
  23. return
  24. }
  25. wid := ctx.Param("wid")
  26. if wid == "" {
  27. _ = conn.WriteJSON(utils.WsError("worker id is required"))
  28. return
  29. }
  30. workerConnected(wid, conn)
  31. for {
  32. var msg utils.WsMsg
  33. err = conn.ReadJSON(&msg)
  34. if err != nil {
  35. workerDisconnect(wid)
  36. return
  37. }
  38. switch msg.Event {
  39. case "openGate":
  40. openGate(conn, wid, msg.Data)
  41. break
  42. case "orderFinished":
  43. orderFinished(conn, msg.Data)
  44. break
  45. default:
  46. _ = conn.WriteJSON(utils.WsError("unrecognized event"))
  47. break
  48. }
  49. }
  50. }