void HandleDataEvent(IConnection conn, int channelId, byte[] buffer, int length) { var lastIndex = length - 1; m_NetworkReader.SeekZero(); MessageHandlerDelegate handler; while (m_NetworkReader.Position < lastIndex) { m_NetworkReader.Lock(HEADER_BYTE_COUNT); // the reader passed to user code has a copy of bytes from the real stream. user code never touches the real stream. // this ensures it can never get out of sync if user code reads less or more than the real amount. ushort msgSize = m_NetworkReader.ReadUInt16(); ushort msgType = m_NetworkReader.ReadUInt16(); #if NETWORK_DEBUGGER_ENABLED var logMessage = new System.Text.StringBuilder("ServerNetworkManager"); logMessage.Append(" Incoming"); logMessage.Append(" ConnectionId:").Append(conn.ConnectionId); logMessage.Append(" MsgType:").Append(msgType); logMessage.Append(" ChannelId:").Append(channelId); logMessage.Append(" Size:").Append(m_NetworkWriter.FilledLength); UnityEngine.Debug.Log(logMessage); #endif #if NETWORK_PROFILER_ENABLED && UNITY_EDITOR var profilerName = new System.Text.StringBuilder("ServerNetworkManager"); profilerName.Append(msgType); Profiler.NetworkProfiler.RecordMessageIncoming(profilerName.ToString(), msgSize); #endif m_NetworkReader.Lock((ushort)(msgSize - HEADER_BYTE_COUNT)); if (m_Handlers.TryGetValue(msgType, out handler)) { handler.Invoke(conn, m_NetworkReader); } else { var warningMessage = new System.Text.StringBuilder("ClinetNetworkManager"); warningMessage.Append(" Incoming"); warningMessage.Append(" Unknown Incoming Message"); warningMessage.Append(" ConnectionId:").Append(conn.ConnectionId); warningMessage.Append(" MsgType:").Append(msgType); warningMessage.Append(" ChannelId:").Append(channelId); warningMessage.Append(" Size:").Append(m_NetworkWriter.FilledLength); UnityEngine.Debug.LogWarning(warningMessage); } m_NetworkReader.CheckReading(); } }
void HandleDataEvent(int channelId, byte[] buffer, int length) { var lastIndex = length - 1; m_NetworkReader.SeekZero(); MessageHandlerDelegate handler; while (m_NetworkReader.Position < lastIndex) { m_NetworkReader.Lock(HEADER_BYTE_COUNT); // the reader passed to user code has a copy of bytes from the real stream. user code never touches the real stream. // this ensures it can never get out of sync if user code reads less or more than the real amount. ushort msgSize = m_NetworkReader.ReadUInt16(); ushort msgType = m_NetworkReader.ReadUInt16(); #if NETWORK_DEBUGGER_ENABLED UnityEngine.Debug.Log($"{DEBUGGING_NAME} Incoming : MsgType:{msgType}, ChannelId:{channelId} Size:{msgSize}"); #endif #if NETWORK_PROFILER_ENABLED && UNITY_EDITOR var profilerName = new StringBuilder(DEBUGGING_NAME); profilerName.Append(msgType); NetworkProfiler.RecordMessageIncoming(profilerName.ToString(), msgSize); #endif m_NetworkReader.Lock((ushort)(msgSize - HEADER_BYTE_COUNT)); if (m_Handlers.TryGetValue(msgType, out handler)) { handler.Invoke(m_ClientPeer.Connection, m_NetworkReader); } else { UnityEngine.Debug.LogWarning($"Unknown message ID {msgType} from channel:{channelId}"); } m_NetworkReader.CheckReading(); } }