ClientDispatcher.cs 1.0 KB

12345678910111213141516171819202122232425262728293031
  1. using System;
  2. namespace Model
  3. {
  4. public class ClientDispatcher: IMessageDispatcher
  5. {
  6. public void Dispatch(Session session, PacketInfo packetInfo)
  7. {
  8. Type messageType = Game.Scene.GetComponent<OpcodeTypeComponent>().GetType(packetInfo.Header.Opcode);
  9. IMessage message = (IMessage)session.network.MessagePacker.DeserializeFrom(messageType, packetInfo.Bytes, packetInfo.Index, packetInfo.Length);
  10. // 如果是帧同步消息,交给ClientFrameComponent处理
  11. FrameMessage frameMessage = message as FrameMessage;
  12. if (frameMessage != null)
  13. {
  14. Game.Scene.GetComponent<ClientFrameComponent>().Add(session, frameMessage);
  15. return;
  16. }
  17. // 普通消息或者是Rpc请求消息
  18. if (message is IMessage || message is IRequest)
  19. {
  20. MessageInfo messageInfo = new MessageInfo(packetInfo.Header.Opcode, message);
  21. Game.Scene.GetComponent<MessageDispatherComponent>().Handle(session, messageInfo);
  22. return;
  23. }
  24. throw new Exception($"message type error: {message.GetType().FullName}");
  25. }
  26. }
  27. }