1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- package worker
- import (
- "Wine-Server/utils"
- "fmt"
- "github.com/gin-gonic/gin"
- "github.com/gorilla/websocket"
- )
- func workerConnected(wid string, conn *websocket.Conn) {
- utils.WorkerLock.Lock()
- utils.WorkerWss[wid] = conn
- utils.WorkerLock.Unlock()
- fmt.Printf("worker[%s] connected\n", wid)
- }
- func workerDisconnect(wid string) {
- utils.WorkerLock.Lock()
- delete(utils.WorkerWss, wid)
- utils.WorkerLock.Unlock()
- fmt.Printf("worker[%s] disconnected\n", wid)
- }
- func SocketHandler(ctx *gin.Context) {
- conn, err := utils.UpgradeHttp2Ws.Upgrade(ctx.Writer, ctx.Request, nil)
- if err != nil {
- ctx.JSON(utils.HttpError, utils.Fail("can't establish socket connect"))
- return
- }
- wid := ctx.Param("wid")
- if wid == "" {
- _ = conn.WriteJSON(utils.WsError("device seq is required"))
- return
- }
- workerConnected(wid, conn)
- for {
- var msg utils.WsMsg
- err = conn.ReadJSON(&msg)
- if err != nil {
- workerDisconnect(wid)
- return
- }
- switch msg.Event {
- case "openGate":
- openGate(conn, wid, msg.Data)
- break
- case "orderFinished":
- orderFinished(conn, msg.Data)
- break
- default:
- _ = conn.WriteJSON(utils.WsError("unrecognized event"))
- break
- }
- }
- }
|