actor_league.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package mapLeague
  2. import (
  3. cherryApp "f1-game/internal/cherry_app"
  4. nameRemote "f1-game/internal/name/remote"
  5. "f1-game/internal/pb"
  6. "f1-game/internal/sessions"
  7. "f1-game/nodes/map/internal/db"
  8. mapFacade "f1-game/nodes/map/internal/facade"
  9. cherryActor "github.com/cherry-game/cherry/net/actor"
  10. )
  11. type actorLeague struct {
  12. cherryApp.ActorLogger
  13. leagueID int64 // 联盟ID
  14. leagueTable *db.MapLeagueTable
  15. }
  16. func newActorLeague(leagueID int64) actorLeague {
  17. return actorLeague{
  18. ActorLogger: cherryApp.NewLoggerPrefix("league", leagueID),
  19. leagueID: leagueID,
  20. }
  21. }
  22. func (p *actorLeague) OnInit() {
  23. p.initMapLeagueTable()
  24. p.startTimer()
  25. p.initTech()
  26. p.initAssemble()
  27. p.initReport()
  28. p.initCastle()
  29. p.initStorage()
  30. p.initDiplomacy()
  31. p.initQuest()
  32. p.initMap()
  33. p.initWar()
  34. p.initLeagueBase() // 联盟基础
  35. p.initLeagueMember() // 联盟成员
  36. p.initLeagueMail() // 联盟邮件
  37. p.Remote().Register(nameRemote.MapLeague_OnLogin, p.onLogin)
  38. }
  39. // 初始化地图联盟表
  40. func (p *actorLeague) initMapLeagueTable() {
  41. if leagueTable, found := db.GetMapLeagueTable(p.leagueID); found {
  42. p.leagueTable = leagueTable
  43. return
  44. }
  45. p.leagueTable = db.NewMapLeagueTable(p.leagueID)
  46. }
  47. // 登录操作
  48. func (p *actorLeague) onLogin(req *pb.I64) {
  49. playerID := req.Value
  50. if playerID < 1 {
  51. return
  52. }
  53. session, found := sessions.GetSession(playerID)
  54. if !found {
  55. p.Warn("league push fail, session not found. playerID:%d", playerID)
  56. return
  57. }
  58. // 推送整合到service中
  59. mapFacade.LeagueServicePush(p.leagueTable, session)
  60. }
  61. // 推送消息给联盟成员
  62. func (p *actorLeague) pushToMembers(route string, arg any) {
  63. leagueMemberTable, ok := db.GetMapLeagueMemberTable(p.leagueID)
  64. if !ok {
  65. return
  66. }
  67. sessions.PushPlayers(leagueMemberTable.GetLeagueMemberIDs(), route, arg)
  68. }
  69. func (p *actorLeague) EventRegister(name string, fn cherryActor.IEventFunc) {
  70. p.Event().Register(name, fn, p.leagueID)
  71. }