MailBoxComponentSystem.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System;
  2. using ETModel;
  3. namespace ETHotfix
  4. {
  5. [ObjectSystem]
  6. public class MailBoxComponentAwakeSystem : AwakeSystem<MailBoxComponent>
  7. {
  8. public override void Awake(MailBoxComponent self)
  9. {
  10. self.MailboxType = MailboxType.MessageDispatcher;
  11. }
  12. }
  13. [ObjectSystem]
  14. public class MailBoxComponentAwake1System : AwakeSystem<MailBoxComponent, MailboxType>
  15. {
  16. public override void Awake(MailBoxComponent self, MailboxType mailboxType)
  17. {
  18. self.MailboxType = mailboxType;
  19. }
  20. }
  21. public static class MailBoxComponentSystem
  22. {
  23. public static async ETTask Handle(this MailBoxComponent self, Session session, IActorMessage message)
  24. {
  25. using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.Mailbox, message.ActorId))
  26. {
  27. switch (self.MailboxType)
  28. {
  29. case MailboxType.GateSession:
  30. IActorMessage iActorMessage = message as IActorMessage;
  31. // 发送给客户端
  32. Session clientSession = self.Parent as Session;
  33. iActorMessage.ActorId = 0;
  34. clientSession.Send(iActorMessage);
  35. break;
  36. case MailboxType.MessageDispatcher:
  37. await ActorMessageDispatcherComponent.Instance.Handle(self.Parent, session, message);
  38. break;
  39. case MailboxType.UnOrderMessageDispatcher:
  40. self.HandleInner(session, message).Coroutine();
  41. break;
  42. }
  43. }
  44. }
  45. private static async ETVoid HandleInner(this MailBoxComponent self, Session session, IActorMessage message)
  46. {
  47. await ActorMessageDispatcherComponent.Instance.Handle(self.Parent, session, message);
  48. }
  49. }
  50. }