worker.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package manager
  2. import (
  3. "Wine-Server/utils"
  4. "Wine-Server/utils/tables"
  5. "errors"
  6. "github.com/gorilla/websocket"
  7. )
  8. func keepAlive(conn *websocket.Conn) {
  9. _ = conn.WriteJSON(utils.WsEvent("pon", nil))
  10. }
  11. func getSecrets(conn *websocket.Conn) {
  12. _ = conn.WriteJSON(utils.WsEvent("secrets", utils.JsonType{
  13. "public": utils.ClientPub, "private": utils.ClientPri,
  14. }))
  15. }
  16. func userLogin(conn *websocket.Conn, data any) (string, error) {
  17. var param loginParam
  18. err := utils.AnyTrans(data, &param)
  19. if err != nil {
  20. _ = conn.WriteJSON(utils.WsEvent("loginResult", utils.Fail("参数错误")))
  21. return "", err
  22. }
  23. var pass string
  24. pass, err = utils.Decrypt(param.Password)
  25. if err != nil {
  26. utils.Logger.Println(err)
  27. _ = conn.WriteJSON(utils.WsEvent("loginResult", utils.Fail("解密失败")))
  28. return "", err
  29. }
  30. manager := tables.ManagerTable{Account: param.Account, Password: utils.HashPassword(pass)}
  31. err = manager.Login()
  32. if err != nil {
  33. utils.Logger.Println(err)
  34. _ = conn.WriteJSON(utils.WsEvent("loginResult", utils.Fail("用户名或密码错误")))
  35. return "", err
  36. }
  37. var token string
  38. utils.ManagerLock.Lock()
  39. if _, exist := utils.ManagerWss[manager.Id]; exist {
  40. utils.ManagerLock.Unlock()
  41. _ = conn.WriteJSON(utils.WsEvent("loginResult", utils.Fail("账户已在别处登录")))
  42. return "", errors.New("login other where")
  43. }
  44. for {
  45. token = utils.Format("ManagerToken_%s", utils.RandomString(19, utils.AlphaNumPatten))
  46. exist, _ := utils.Redis.Exists(utils.WxPayCli, token).Result()
  47. if exist != 1 {
  48. utils.Redis.Set(utils.WxPayCli, token, manager.Id, utils.Duration(7*24*60*60))
  49. break
  50. }
  51. }
  52. utils.ManagerLock.Unlock()
  53. _ = conn.WriteJSON(utils.WsEvent("loginResult", utils.Success(utils.JsonType{"token": token, "super": manager.Super})))
  54. return manager.Id, nil
  55. }
  56. func getUserInfo(conn *websocket.Conn, manager *tables.ManagerTable) {
  57. _ = conn.WriteJSON(utils.WsEvent("userInfo", utils.JsonType{
  58. "id": manager.Id, "super": manager.Super, "name": manager.Name,
  59. "order": manager.Order, "income": manager.Income,
  60. }))
  61. }
  62. func userLogout(conn *websocket.Conn, data any) {
  63. utils.Redis.Del(utils.WxPayCli, data.(string))
  64. _ = conn.WriteJSON(utils.WsEvent("logoutResult", nil))
  65. }