actor_league.go 2.4 KB

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