InnerMessageDispatcher.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using ETModel;
  2. namespace ETHotfix
  3. {
  4. public class InnerMessageDispatcher: IMessageDispatcher
  5. {
  6. public void Dispatch(Session session, ushort opcode, object message)
  7. {
  8. // 收到actor消息,放入actor队列
  9. switch (message)
  10. {
  11. case IActorRequest iActorRequest:
  12. {
  13. Entity entity = (Entity)Game.EventSystem.Get(iActorRequest.ActorId);
  14. if (entity == null)
  15. {
  16. Log.Warning($"not found actor: {message}");
  17. ActorResponse response = new ActorResponse
  18. {
  19. Error = ErrorCode.ERR_NotFoundActor,
  20. RpcId = iActorRequest.RpcId
  21. };
  22. session.Reply(response);
  23. return;
  24. }
  25. MailBoxComponent mailBoxComponent = entity.GetComponent<MailBoxComponent>();
  26. if (mailBoxComponent == null)
  27. {
  28. ActorResponse response = new ActorResponse
  29. {
  30. Error = ErrorCode.ERR_ActorNoMailBoxComponent,
  31. RpcId = iActorRequest.RpcId
  32. };
  33. session.Reply(response);
  34. Log.Error($"actor not add MailBoxComponent: {entity.GetType().Name} {message}");
  35. return;
  36. }
  37. mailBoxComponent.Add(new ActorMessageInfo() { Session = session, Message = iActorRequest });
  38. return;
  39. }
  40. case IActorMessage iactorMessage:
  41. {
  42. Entity entity = (Entity)Game.EventSystem.Get(iactorMessage.ActorId);
  43. if (entity == null)
  44. {
  45. Log.Error($"not found actor: {message}");
  46. return;
  47. }
  48. MailBoxComponent mailBoxComponent = entity.GetComponent<MailBoxComponent>();
  49. if (mailBoxComponent == null)
  50. {
  51. Log.Error($"actor not add MailBoxComponent: {entity.GetType().Name} {message}");
  52. return;
  53. }
  54. mailBoxComponent.Add(new ActorMessageInfo() { Session = session, Message = iactorMessage });
  55. return;
  56. }
  57. default:
  58. {
  59. Game.Scene.GetComponent<MessageDispatcherComponent>().Handle(session, new MessageInfo(opcode, message));
  60. break;
  61. }
  62. }
  63. }
  64. }
  65. }