actor_league.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package chat
  2. import (
  3. "f1-game/internal/component/redis"
  4. "f1-game/internal/enum"
  5. nameActor "f1-game/internal/name/actor"
  6. nameRemote "f1-game/internal/name/remote"
  7. nameRoute "f1-game/internal/name/route"
  8. "f1-game/internal/pb"
  9. ctime "github.com/cherry-game/cherry/extend/time"
  10. )
  11. type (
  12. actorLeague struct {
  13. RoomTypeList
  14. }
  15. )
  16. func NewActorLeague() *actorLeague {
  17. return &actorLeague{
  18. RoomTypeList: newRoomTypeList(enum.ChatType_League),
  19. }
  20. }
  21. func (p *actorLeague) OnInit() {
  22. p.Remote().Register(nameRemote.Chat_Send, p.send)
  23. p.Remote().Register(nameRemote.Chat_Push, p.Push)
  24. p.Remote().Register(nameRemote.Chat_Destory, p.Destory)
  25. p.Remote().Register(nameRemote.Chat_DelMsg, p.DelMsg)
  26. p.initCleanRoomTimer()
  27. }
  28. func (p *actorLeague) AliasID() string {
  29. return nameActor.Chat_League
  30. }
  31. func (p *actorLeague) send(req *pb.ChatMsgList) {
  32. chatRoom := p.GetChatRoom(req.ChatID)
  33. p.flushPlayerIDList(chatRoom)
  34. p.AddChatMsg(req)
  35. p.Broadcast2Client(chatRoom, nameRoute.PushChat_MsgList, req)
  36. // update last send time
  37. chatRoom.LastSendTime = ctime.Now()
  38. }
  39. // 联盟每一秒钟刷新一次玩家列表
  40. func (p *actorLeague) flushPlayerIDList(chatRoom *ChatRoom) {
  41. if chatRoom.LastSendTime.NowDiffSecond() < 1 {
  42. return
  43. }
  44. chatRoom.PlayerIDList = redis.Chat.GetLeagueMembers(chatRoom.ChatID)
  45. }