service.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package online
  2. import (
  3. "f1-game/internal/component/redis"
  4. facade "f1-game/internal/facade"
  5. nameRedis "f1-game/internal/name/redis"
  6. "f1-game/internal/sessions"
  7. "f1-game/nodes/game/internal/db"
  8. cproto "github.com/cherry-game/cherry/net/proto"
  9. )
  10. var srv = &service{}
  11. func Service() *service {
  12. return srv
  13. }
  14. type service struct {
  15. facade.PlayerServiceBase[*db.PlayerTable]
  16. }
  17. func (p *service) OnLogin(playerTable *db.PlayerTable, session *cproto.Session) {
  18. fields := map[string]any{}
  19. fields[nameRedis.Player_IP] = session.Ip
  20. fields[nameRedis.Player_IsOnline] = true
  21. var (
  22. isNewPlayer = session.Contains(sessions.IsNewPlayer)
  23. hasValue = redis.Game.GetPlayerDataHash(playerTable.PlayerID, nameRedis.Player_PlayerID)
  24. )
  25. if isNewPlayer || hasValue == nil {
  26. fields[nameRedis.Player_PlayerID] = playerTable.PlayerID
  27. fields[nameRedis.Player_PlayerName] = playerTable.Lord.Name
  28. fields[nameRedis.Player_LordLevel] = playerTable.Lord.Level
  29. fields[nameRedis.Player_IconID] = playerTable.Lord.IconID
  30. fields[nameRedis.Player_FrameID] = playerTable.Lord.FrameID
  31. fields[nameRedis.Player_GameNodeID] = playerTable.NodeID
  32. fields[nameRedis.Player_MapNodeID] = playerTable.Map.MapNodeID
  33. fields[nameRedis.Player_UID] = session.Uid
  34. fields[nameRedis.Player_PID] = sessions.GetPID(session)
  35. }
  36. redis.Game.SavePlayerDataFields(playerTable.PlayerID, fields)
  37. }
  38. // func (p *service) OnLogined(playerTable *db.PlayerTable, session *cproto.Session) {
  39. // }
  40. func (p *service) OnLogout(playerTable *db.PlayerTable) {
  41. // 清除 redis 数据
  42. redis.Game.SavePlayerDataFields(playerTable.PlayerID, map[string]any{
  43. nameRedis.Player_IsOnline: false,
  44. })
  45. }
  46. // func (p *service) OnReset(playerTable *db.PlayerTable, time *ctime.CherryTime, byLogin bool) {
  47. // }
  48. // func (p *service) Push(playerTable *db.PlayerTable, session *cproto.Session) {
  49. // }