EntityActorHandler.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System.Threading.Tasks;
  2. using Model;
  3. namespace Hotfix
  4. {
  5. /// <summary>
  6. /// gate session收到的消息直接转发给客户端
  7. /// </summary>
  8. public class GateSessionEntityActorHandler : IEntityActorHandler
  9. {
  10. public async Task Handle(Session session, Entity entity, ActorRequest message)
  11. {
  12. ((Session)entity).Send(message.AMessage);
  13. ActorResponse response = new ActorResponse
  14. {
  15. RpcId = message.RpcId
  16. };
  17. session.Reply(response);
  18. }
  19. }
  20. public class CommonEntityActorHandler : IEntityActorHandler
  21. {
  22. public async Task Handle(Session session, Entity entity, ActorRequest message)
  23. {
  24. await Game.Scene.GetComponent<ActorMessageDispatherComponent>().Handle(session, entity, message);
  25. }
  26. }
  27. /// <summary>
  28. /// 玩家收到帧同步消息交给帧同步组件处理
  29. /// </summary>
  30. public class MapUnitEntityActorHandler : IEntityActorHandler
  31. {
  32. public async Task Handle(Session session, Entity entity, ActorRequest message)
  33. {
  34. if (message.AMessage is AFrameMessage aFrameMessage)
  35. {
  36. // 客户端发送不需要设置Frame消息的id,在这里统一设置,防止客户端被破解发个假的id过来
  37. aFrameMessage.Id = entity.Id;
  38. Game.Scene.GetComponent<ServerFrameComponent>().Add(aFrameMessage);
  39. ActorResponse response = new ActorResponse
  40. {
  41. RpcId = message.RpcId
  42. };
  43. session.Reply(response);
  44. return;
  45. }
  46. await Game.Scene.GetComponent<ActorMessageDispatherComponent>().Handle(session, entity, message);
  47. }
  48. }
  49. }