spliter.go 1.2 KB

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