InnerMessageDispatcher.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using System;
  2. using Model;
  3. namespace Hotfix
  4. {
  5. public class InnerMessageDispatcher: IMessageDispatcher
  6. {
  7. public void Dispatch(Session session, Opcode opcode, int offset, byte[] messageBytes, AMessage message)
  8. {
  9. // 收到actor rpc request
  10. if (message is ActorRpcRequest actorRpcRequest)
  11. {
  12. Entity entity = Game.Scene.GetComponent<ActorManagerComponent>().Get(actorRpcRequest.Id);
  13. if (entity == null)
  14. {
  15. Log.Warning($"not found actor: {actorRpcRequest.Id}");
  16. ActorRpcResponse response = new ActorRpcResponse
  17. {
  18. RpcId = actorRpcRequest.RpcId,
  19. Error = ErrorCode.ERR_NotFoundActor
  20. };
  21. session.Reply(response);
  22. return;
  23. }
  24. entity.GetComponent<ActorComponent>().Add(new ActorMessageInfo() { Session = session, Message = actorRpcRequest });
  25. return;
  26. }
  27. // 收到actor消息分发给actor自己去处理
  28. if (message is ActorRequest actorRequest)
  29. {
  30. Entity entity = Game.Scene.GetComponent<ActorManagerComponent>().Get(actorRequest.Id);
  31. if (entity == null)
  32. {
  33. Log.Warning($"not found actor: {actorRequest.Id}");
  34. ActorResponse response = new ActorResponse
  35. {
  36. RpcId = actorRequest.RpcId,
  37. Error = ErrorCode.ERR_NotFoundActor
  38. };
  39. session.Reply(response);
  40. return;
  41. }
  42. entity.GetComponent<ActorComponent>().Add(new ActorMessageInfo() { Session = session, Message = actorRequest });
  43. return;
  44. }
  45. if (message is AMessage || message is ARequest)
  46. {
  47. Game.Scene.GetComponent<MessageDispatherComponent>().Handle(session, message);
  48. return;
  49. }
  50. throw new Exception($"message type error: {message.GetType().FullName}");
  51. }
  52. }
  53. }