spliter.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package seller
  2. import (
  3. "Wine-Server/utils"
  4. "Wine-Server/utils/tables"
  5. "database/sql"
  6. "fmt"
  7. "github.com/gin-gonic/gin"
  8. "github.com/gorilla/websocket"
  9. )
  10. func sellerConnected(seq string, conn *websocket.Conn) *tables.DeviceTable {
  11. device := tables.DeviceTable{Id: seq}
  12. err := device.Get()
  13. if err == sql.ErrNoRows { // insert new device
  14. err = device.Insert()
  15. if err != nil {
  16. _ = conn.WriteJSON(utils.WsError("New device join failed"))
  17. return nil
  18. }
  19. _ = device.Get()
  20. } else { // update last time
  21. device.Last = utils.TimeNow()
  22. err = device.Update(utils.JsonType{"last": device.Last})
  23. if err != nil {
  24. _ = conn.WriteJSON(utils.WsError("Update last active time failed"))
  25. return nil
  26. }
  27. }
  28. utils.SellerLock.Lock()
  29. utils.SellerWss[seq] = conn
  30. utils.SellerLock.Unlock()
  31. fmt.Printf("device connected: %s\n", seq)
  32. return &device
  33. }
  34. func sellerDisconnect(seq string) {
  35. utils.SellerLock.Lock()
  36. delete(utils.SellerWss, seq)
  37. utils.SellerLock.Unlock()
  38. fmt.Printf("device[%s] disconnected\n", seq)
  39. }
  40. func SocketHandler(ctx *gin.Context) {
  41. conn, err := utils.UpgradeHttp2Ws.Upgrade(ctx.Writer, ctx.Request, nil)
  42. if err != nil {
  43. ctx.JSON(utils.HttpError, utils.Fail("can't establish socket connect"))
  44. return
  45. }
  46. seq := ctx.Param("seq") //ctx.DefaultQuery("seq", "")
  47. if seq == "" {
  48. _ = conn.WriteJSON(utils.WsError("device seq is required"))
  49. return
  50. }
  51. device := sellerConnected(seq, conn)
  52. if device == nil {
  53. return
  54. }
  55. infoOfDevice(device, conn)
  56. for {
  57. var msg utils.WsMsg
  58. err = conn.ReadJSON(&msg)
  59. if err != nil {
  60. sellerDisconnect(seq)
  61. return
  62. }
  63. switch msg.Event {
  64. case "setLocation":
  65. updateLocation(device, conn, msg.Data)
  66. break
  67. case "getQrcode":
  68. getQrcode(conn, msg.Data)
  69. break
  70. case "checkAuthCode":
  71. checkAuthCode(conn, device.Id, msg.Data)
  72. break
  73. case "openResult":
  74. openResult(conn, msg.Data)
  75. break
  76. case "workFinished":
  77. workFinished(conn, msg.Data)
  78. break
  79. default:
  80. _ = conn.WriteJSON(utils.WsError("unrecognized event"))
  81. break
  82. }
  83. }
  84. }