EntityActorHandler.cs 2.0 KB

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