MailBoxComponentSystem.cs 1.5 KB

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