OuterMessageDispatcher.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using System;
  2. using Model;
  3. namespace Hotfix
  4. {
  5. public class OuterMessageDispatcher: IMessageDispatcher
  6. {
  7. public async void Dispatch(Session session, PacketInfo packetInfo)
  8. {
  9. Type messageType = Game.Scene.GetComponent<OpcodeTypeComponent>().GetType(packetInfo.Opcode);
  10. Log.Debug($"111111111111 {MongoHelper.ToJson(packetInfo)}");
  11. IMessage message = (IMessage)session.Network.MessagePacker.DeserializeFrom(messageType, packetInfo.Bytes, packetInfo.Index, packetInfo.Length);
  12. // gate session收到actor消息直接转发给actor自己去处理
  13. if (message is IActorMessage)
  14. {
  15. long unitId = session.GetComponent<SessionPlayerComponent>().Player.UnitId;
  16. ActorProxy actorProxy = Game.Scene.GetComponent<ActorProxyComponent>().Get(unitId);
  17. actorProxy.Send(message);
  18. return;
  19. }
  20. // gate session收到actor rpc消息,先向actor 发送rpc请求,再将请求结果返回客户端
  21. if (message is IActorRequest aActorRequest)
  22. {
  23. long unitId = session.GetComponent<SessionPlayerComponent>().Player.UnitId;
  24. ActorProxy actorProxy = Game.Scene.GetComponent<ActorProxyComponent>().Get(unitId);
  25. IResponse response = await actorProxy.Call(aActorRequest);
  26. session.Reply(packetInfo.RpcId, response);
  27. return;
  28. }
  29. if (message != null)
  30. {
  31. Game.Scene.GetComponent<MessageDispatherComponent>().Handle(session, packetInfo.RpcId, message);
  32. return;
  33. }
  34. throw new Exception($"message type error: {message.GetType().FullName}");
  35. }
  36. }
  37. }