private void Run(MemoryStream memoryStream) { memoryStream.Seek(Packet.MessageIndex, SeekOrigin.Begin); ushort opcode = BitConverter.ToUInt16(memoryStream.GetBuffer(), Packet.OpcodeIndex); #if !SERVER if (OpcodeHelper.IsClientHotfixMessage(opcode)) { this.GetComponent <SessionCallbackComponent>().MessageCallback.Invoke(this, opcode, memoryStream); return; } #endif object message; try { object instance = OpcodeTypeComponent.Instance.GetInstance(opcode); message = this.Network.MessagePacker.DeserializeFrom(instance, memoryStream); if (OpcodeHelper.IsNeedDebugLogMessage(opcode)) { Log.Msg(message); } } catch (Exception e) { // 出现任何消息解析异常都要断开Session,防止客户端伪造消息 Log.Error($"opcode: {opcode} {this.Network.Count} {e}, ip: {this.RemoteAddress}"); this.Error = ErrorCode.ERR_PacketParserError; this.Network.Remove(this.Id); return; } RunMessage(opcode, message); }