EntityActorHandler.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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, uint rpcId, ActorRequest message)
  12. {
  13. ActorResponse response = new ActorResponse();
  14. try
  15. {
  16. ((Session)entity).Send((IMessage)message.AMessage);
  17. session.Reply(rpcId, 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(rpcId, response);
  25. throw;
  26. }
  27. }
  28. }
  29. public class CommonEntityActorHandler : IEntityActorHandler
  30. {
  31. public async Task Handle(Session session, Entity entity, uint rpcId, ActorRequest message)
  32. {
  33. await Game.Scene.GetComponent<ActorMessageDispatherComponent>().Handle(session, entity, rpcId, message);
  34. }
  35. }
  36. /// <summary>
  37. /// 玩家收到帧同步消息交给帧同步组件处理
  38. /// </summary>
  39. public class MapUnitEntityActorHandler : IEntityActorHandler
  40. {
  41. public async Task Handle(Session session, Entity entity, uint rpcId, ActorRequest message)
  42. {
  43. if (message.AMessage is IFrameMessage aFrameMessage)
  44. {
  45. // 客户端发送不需要设置Frame消息的id,在这里统一设置,防止客户端被破解发个假的id过来
  46. aFrameMessage.Id = entity.Id;
  47. Game.Scene.GetComponent<ServerFrameComponent>().Add(aFrameMessage);
  48. ActorResponse response = new ActorResponse();
  49. session.Reply(rpcId, response);
  50. return;
  51. }
  52. await Game.Scene.GetComponent<ActorMessageDispatherComponent>().Handle(session, entity, rpcId, message);
  53. }
  54. }
  55. }