ClientDispatcher.cs 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. using System;
  2. namespace ETModel
  3. {
  4. public class ClientDispatcher: IMessageDispatcher
  5. {
  6. public void Dispatch(Session session, Packet packet)
  7. {
  8. ushort opcode = packet.Opcode();
  9. if (OpcodeHelper.IsClientHotfixMessage(opcode))
  10. {
  11. session.GetComponent<SessionCallbackComponent>().MessageCallback.Invoke(session, packet);
  12. return;
  13. }
  14. OpcodeTypeComponent opcodeTypeComponent = session.Network.Entity.GetComponent<OpcodeTypeComponent>();
  15. Type responseType = opcodeTypeComponent.GetType(opcode);
  16. object message = session.Network.MessagePacker.DeserializeFrom(responseType, packet.Bytes, Packet.Index, packet.Length - Packet.Index);
  17. // 如果是帧同步消息,交给ClientFrameComponent处理
  18. FrameMessage frameMessage = message as FrameMessage;
  19. if (frameMessage != null)
  20. {
  21. Game.Scene.GetComponent<ClientFrameComponent>().Add(session, frameMessage);
  22. return;
  23. }
  24. // 普通消息或者是Rpc请求消息
  25. MessageInfo messageInfo = new MessageInfo(opcode, message);
  26. Game.Scene.GetComponent<MessageDispatherComponent>().Handle(session, messageInfo);
  27. }
  28. }
  29. }