InnerMessageDispatcherHelper.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using ETModel;
  2. namespace ETHotfix
  3. {
  4. public static class InnerMessageDispatcherHelper
  5. {
  6. public static async ETVoid HandleIActorResponse(Session session, IActorResponse iActorResponse)
  7. {
  8. ActorMessageSenderComponent.Instance.RunMessage(iActorResponse);
  9. }
  10. public static async ETVoid HandleIActorRequest(Session session, IActorRequest iActorRequest)
  11. {
  12. long replyId = IdGenerater.GetProcessId(iActorRequest.ActorId);
  13. iActorRequest.ActorId = iActorRequest.ActorId & IdGenerater.HeadMask | IdGenerater.Head;
  14. using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.Mailbox, iActorRequest.ActorId))
  15. {
  16. string address = StartConfigComponent.Instance.GetProcessInnerAddress(replyId);
  17. Session ss = NetInnerComponent.Instance.Get(address);
  18. Entity entity = Game.EventSystem.Get(iActorRequest.ActorId);
  19. if (entity == null)
  20. {
  21. Log.Warning($"not found actor: {MongoHelper.ToJson(iActorRequest)}");
  22. ActorResponse response = new ActorResponse
  23. {
  24. Error = ErrorCode.ERR_NotFoundActor,
  25. RpcId = iActorRequest.RpcId,
  26. };
  27. ss.Reply(response);
  28. return;
  29. }
  30. MailBoxComponent mailBoxComponent = entity.GetComponent<MailBoxComponent>();
  31. if (mailBoxComponent == null)
  32. {
  33. ActorResponse response = new ActorResponse
  34. {
  35. Error = ErrorCode.ERR_ActorNoMailBoxComponent,
  36. RpcId = iActorRequest.RpcId,
  37. };
  38. ss.Reply(response);
  39. Log.Error($"actor not add MailBoxComponent: {entity.GetType().Name} {iActorRequest}");
  40. return;
  41. }
  42. await MailboxDispatcherComponent.Instance.Handle(entity, mailBoxComponent.MailboxType, ss, iActorRequest);
  43. }
  44. }
  45. public static async ETVoid HandleIActorMessage(Session session, IActorMessage iActorMessage)
  46. {
  47. long replyId = IdGenerater.GetProcessId(iActorMessage.ActorId);
  48. iActorMessage.ActorId = iActorMessage.ActorId & IdGenerater.HeadMask | IdGenerater.Head;
  49. using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.Mailbox, iActorMessage.ActorId))
  50. {
  51. Entity entity = Game.EventSystem.Get(iActorMessage.ActorId);
  52. if (entity == null)
  53. {
  54. Log.Error($"not found actor: {MongoHelper.ToJson(iActorMessage)}");
  55. return;
  56. }
  57. MailBoxComponent mailBoxComponent = entity.GetComponent<MailBoxComponent>();
  58. if (mailBoxComponent == null)
  59. {
  60. Log.Error($"actor not add MailBoxComponent: {entity.GetType().Name} {iActorMessage}");
  61. return;
  62. }
  63. Session ss = NetInnerComponent.Instance.Get(replyId);
  64. await MailboxDispatcherComponent.Instance.Handle(entity, mailBoxComponent.MailboxType, ss, iActorMessage);
  65. }
  66. }
  67. }
  68. }