MailBoxComponentSystem.cs 1.5 KB

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