InnerMessageDispatcher.cs 1.6 KB

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