user.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package user
  2. import (
  3. mongodbmgr "server/db/mongodb"
  4. redismgr "server/db/redis"
  5. agentmanager "server/game/agentManager"
  6. "server/msg"
  7. "github.com/name5566/leaf/log"
  8. )
  9. // 查找用户信息是否已经存在 Redis 中
  10. func GetUserInfoById(userId string) *msg.UserInfo {
  11. // 从 Redis 中获取用户数据
  12. userData, err := redismgr.GetUserInfoFromRedis(userId)
  13. if err != nil {
  14. log.Debug("Error fetching user info from Redis:", err)
  15. return nil
  16. }
  17. // 如果 Redis 中有数据,直接返回
  18. if userData != nil {
  19. log.Debug("User found in Redis: %s", userId)
  20. return userData
  21. }
  22. // 如果 Redis 中没有数据,检查 MongoDB
  23. log.Debug("User not found in Redis, checking MongoDB: %s", userId)
  24. userData, err = redismgr.GetUserInfoFromRedis(userId)
  25. if err != nil {
  26. log.Debug("Error fetching user info from MongoDB:", err)
  27. return nil
  28. }
  29. // 如果 MongoDB 中也没有数据,执行新增操作
  30. if userData == nil {
  31. log.Debug("User not found in MongoDB, creating new user: %s", userId)
  32. userData = &msg.UserInfo{
  33. UserId: userId,
  34. }
  35. // 保存到 MongoDB 和 Redis
  36. err = mongodbmgr.AddUser(userData)
  37. if err != nil {
  38. log.Debug("Error saving new user to MongoDB:", err)
  39. return nil
  40. }
  41. err = redismgr.SaveUserInfoToRedis(userData)
  42. if err != nil {
  43. log.Debug("Error saving new user to Redis:", err)
  44. return nil
  45. }
  46. }
  47. return userData
  48. }
  49. // 减少用户金币
  50. func DecreaseUserCoin(coin int32, userId string) {
  51. userData := GetUserInfoById(userId)
  52. // 获取存储在 agent 中的 UserData
  53. // 减少用户积分
  54. userData.MCoin -= coin
  55. SetUserInfo(userData)
  56. // 打印更新日志
  57. log.Debug("User %s's coin decreased by %d. New balance: %d", userId, coin, userData)
  58. }
  59. func SetUserInfo(userData *msg.UserInfo) {
  60. redismgr.SaveUserInfoToRedis(userData)
  61. user_agent := agentmanager.GetAgentByUserID(userData.UserId)
  62. if user_agent != nil {
  63. user_agent.SetUserData(userData)
  64. user_agent.WriteMsg(&msg.UpdateUserInfo{
  65. Info: userData,
  66. })
  67. }
  68. }
  69. // 添加用户金币
  70. func AddUserCoin(coin int32, userId string) {
  71. // 查找用户数据
  72. userData := GetUserInfoById(userId)
  73. // 更新用户的金币
  74. userData.MCoin += coin
  75. SetUserInfo(userData)
  76. // 打印更新日志
  77. log.Debug("User %s's points updated: %d", userId, userData)
  78. }