spliter.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package manager
  2. import (
  3. "Wine-Server/utils"
  4. "fmt"
  5. "github.com/gin-gonic/gin"
  6. "github.com/gorilla/websocket"
  7. )
  8. func managerConnected(mid string, conn *websocket.Conn) {
  9. utils.ManagerLock.Lock()
  10. utils.ManagerWss[mid] = conn
  11. utils.ManagerLock.Unlock()
  12. fmt.Printf("manager[%s] connected\n", mid)
  13. }
  14. func managerDisconnect(mid string) {
  15. utils.ManagerLock.Lock()
  16. delete(utils.ManagerWss, mid)
  17. utils.ManagerLock.Unlock()
  18. fmt.Printf("manager[%s] disconnected\n", mid)
  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. var ok bool
  27. var mid string
  28. if mid, ok = ctx.GetQuery("token"); ok {
  29. if _, err = utils.Redis.Get(ctx, mid).Bool(); err != nil { // better to get pub,pri secret here
  30. // token is invalid
  31. } else {
  32. // token is valid
  33. }
  34. } else {
  35. // no token
  36. }
  37. managerConnected(mid, conn)
  38. for {
  39. var msg utils.WsMsg
  40. err = conn.ReadJSON(&msg)
  41. if err != nil {
  42. managerDisconnect(mid)
  43. return
  44. }
  45. switch msg.Event {
  46. case "openGate":
  47. break
  48. case "orderFinished":
  49. break
  50. default:
  51. _ = conn.WriteJSON(utils.WsError("unrecognized event"))
  52. break
  53. }
  54. }
  55. }