ClientDispatcher.cs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. using System;
  2. namespace Model
  3. {
  4. public class ClientDispatcher: IMessageDispatcher
  5. {
  6. public void Dispatch(Session session, PacketInfo packetInfo)
  7. {
  8. #if ILRuntime
  9. // 热更消息抛到hotfix层
  10. if (OpcodeHelper.IsClientHotfixMessage(packetInfo.Header.Opcode))
  11. {
  12. Game.EventSystem.Run(EventIdType.RecvHotfixMessage, packetInfo);
  13. return;
  14. }
  15. #endif
  16. Type messageType = Game.Scene.GetComponent<OpcodeTypeComponent>().GetType(packetInfo.Opcode);
  17. IMessage message = (IMessage)session.Network.MessagePacker.DeserializeFrom(messageType, packetInfo.Bytes, packetInfo.Index, packetInfo.Length);
  18. // 如果是帧同步消息,交给ClientFrameComponent处理
  19. FrameMessage frameMessage = message as FrameMessage;
  20. if (frameMessage != null)
  21. {
  22. Game.Scene.GetComponent<ClientFrameComponent>().Add(session, frameMessage);
  23. return;
  24. }
  25. // 普通消息或者是Rpc请求消息
  26. MessageInfo messageInfo = new MessageInfo(packetInfo.Opcode, message);
  27. Game.Scene.GetComponent<MessageDispatherComponent>().Handle(session, messageInfo);
  28. }
  29. }
  30. }