OuterMessageDispatcher.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. 
  2. namespace ET
  3. {
  4. public class OuterMessageDispatcher: IMessageDispatcher
  5. {
  6. public void Dispatch(Session session, ushort opcode, object message)
  7. {
  8. DispatchAsync(session, opcode, message).Coroutine();
  9. }
  10. public async ETVoid DispatchAsync(Session session, ushort opcode, object message)
  11. {
  12. // 根据消息接口判断是不是Actor消息,不同的接口做不同的处理
  13. switch (message)
  14. {
  15. case IActorLocationRequest actorLocationRequest: // gate session收到actor rpc消息,先向actor 发送rpc请求,再将请求结果返回客户端
  16. {
  17. long unitId = session.GetComponent<SessionPlayerComponent>().Player.UnitId;
  18. int rpcId = actorLocationRequest.RpcId; // 这里要保存客户端的rpcId
  19. long instanceId = session.InstanceId;
  20. IResponse response = await ActorLocationSenderComponent.Instance.Call(unitId, actorLocationRequest);
  21. response.RpcId = rpcId;
  22. // session可能已经断开了,所以这里需要判断
  23. if (session.InstanceId == instanceId)
  24. {
  25. session.Reply(response);
  26. }
  27. break;
  28. }
  29. case IActorLocationMessage actorLocationMessage:
  30. {
  31. long unitId = session.GetComponent<SessionPlayerComponent>().Player.UnitId;
  32. ActorLocationSenderComponent.Instance.Send(unitId, actorLocationMessage);
  33. break;
  34. }
  35. case IActorRequest actorRequest: // 分发IActorRequest消息,目前没有用到,需要的自己添加
  36. {
  37. break;
  38. }
  39. case IActorMessage actorMessage: // 分发IActorMessage消息,目前没有用到,需要的自己添加
  40. {
  41. break;
  42. }
  43. default:
  44. {
  45. // 非Actor消息
  46. MessageDispatcherComponent.Instace.Handle(session, new MessageInfo(opcode, message));
  47. break;
  48. }
  49. }
  50. }
  51. }
  52. }