EntityActorHandler.cs 2.0 KB

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