EntityActorHandler.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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, IActorMessage actorMessage)
  12. {
  13. ActorResponse actorResponse = new ActorResponse
  14. {
  15. RpcId = actorMessage.RpcId
  16. };
  17. try
  18. {
  19. // 发送给客户端
  20. Session clientSession = entity as Session;
  21. clientSession.Send(actorMessage);
  22. session.Reply(actorResponse);
  23. await Task.CompletedTask;
  24. }
  25. catch (Exception e)
  26. {
  27. actorResponse.Error = ErrorCode.ERR_SessionActorError;
  28. actorResponse.Message = $"session actor error {e}";
  29. session.Reply(actorResponse);
  30. throw;
  31. }
  32. }
  33. }
  34. public class CommonEntityActorHandler : IEntityActorHandler
  35. {
  36. public async Task Handle(Session session, Entity entity, IActorMessage actorMessage)
  37. {
  38. await Game.Scene.GetComponent<ActorMessageDispatherComponent>().Handle(session, entity, actorMessage);
  39. }
  40. }
  41. /// <summary>
  42. /// 玩家收到帧同步消息交给帧同步组件处理
  43. /// </summary>
  44. public class MapUnitEntityActorHandler : IEntityActorHandler
  45. {
  46. public async Task Handle(Session session, Entity entity, IActorMessage actorMessage)
  47. {
  48. if (actorMessage is OneFrameMessage aFrameMessage)
  49. {
  50. Game.Scene.GetComponent<ServerFrameComponent>().Add(aFrameMessage);
  51. ActorResponse actorResponse = new ActorResponse
  52. {
  53. RpcId = actorMessage.RpcId
  54. };
  55. session.Reply(actorResponse);
  56. return;
  57. }
  58. await Game.Scene.GetComponent<ActorMessageDispatherComponent>().Handle(session, entity, actorMessage);
  59. }
  60. }
  61. }