public Variant parseXML(byte[] bytes, string path) { Variant variant = null; bool flag = bytes[0] == 78 && bytes[1] == 105 && bytes[2] == 99; Variant result; if (flag) { byte[] array = new byte[bytes.Length - 14]; for (int i = 14; i < bytes.Length; i++) { array[i - 14] = bytes[i]; } ByteArray byteArray = new ByteArray(array); byteArray.uncompress(); variant = this._UnpackFullTypePackage(byteArray); } else { MemoryStream memoryStream = new MemoryStream(bytes); XmlReader xmlReader = XmlReader.Create(memoryStream, new XmlReaderSettings { IgnoreComments = true, IgnoreProcessingInstructions = true, IgnoreWhitespace = true, ValidationType = ValidationType.None, ValidationFlags = XmlSchemaValidationFlags.None, ProhibitDtd = true, ConformanceLevel = ConformanceLevel.Document }); Stack <Variant> stack = new Stack <Variant>(); try { while (xmlReader.Read()) { bool flag2 = xmlReader.NodeType == XmlNodeType.Element; if (flag2) { Variant variant2 = Variant.alloc(); bool flag3 = stack.Count > 0; if (flag3) { Variant variant3 = stack.Peek(); bool flag4 = !variant3.ContainsKey(xmlReader.Name); if (flag4) { variant3[xmlReader.Name] = Variant.alloc(); } variant3[xmlReader.Name].pushBack(variant2); } else { variant = variant2; } bool flag5 = !xmlReader.IsEmptyElement; if (flag5) { stack.Push(variant2); } while (xmlReader.MoveToNextAttribute()) { variant2[xmlReader.Name] = new Variant(xmlReader.Value); } } else { bool flag6 = xmlReader.NodeType == XmlNodeType.EndElement; if (flag6) { stack.Pop(); } } } } catch (Exception var_19_1CC) { DebugTrace.add(Define.DebugTrace.DTT_ERR, string.Concat(new object[] { "[Parse XML error] File: ", path, " Line: ", xmlReader.Settings.LineNumberOffset, " Col: ", xmlReader.Settings.LinePositionOffset })); result = null; return(result); } xmlReader.Close(); memoryStream.Close(); } result = variant; return(result); }
protected void _tryUnpackPackage() { int num = 0; while (this._recvBuffer.bytesAvailable > 0) { ByteArray byteArray = new ByteArray(); num++; uint num2 = (uint)this._recvBuffer.readUnsignedByte(); uint num3 = num2 & 192u; bool flag = num3 == 0u; if (flag) { bool flag2 = num2 == 0u; if (flag2) { bool flag3 = this._recvBuffer.bytesAvailable < 4; if (flag3) { this._recvBuffer.position--; break; } this._last_server_tm_ms = (ulong)this._recvBuffer.readUnsignedInt(); this._last_hbr_time_ms = CCTime.getTickMillisec(); this._latency_ms = this._last_hbr_time_ms - this._last_hbs_time_ms; bool flag4 = this._min_last_server_tm_ms == 0uL; if (flag4) { this._min_last_server_tm_ms = this._last_server_tm_ms; this._min_last_hbr_time_ms = this._last_hbr_time_ms; this._min_latency_ms = this._latency_ms; } bool flag5 = this._latency_ms < this._min_latency_ms; if (flag5) { this._min_last_server_tm_ms = this._last_server_tm_ms; this._min_last_hbr_time_ms = this._last_hbr_time_ms; this._min_latency_ms = this._latency_ms; } this._cb.onHBRecv(); } } else { bool flag6 = num3 == 64u; if (flag6) { bool flag7 = this._recvBuffer.bytesAvailable < 1; if (flag7) { this._recvBuffer.position--; break; } uint num4 = (num2 & 31u) << 8; num4 |= (uint)this._recvBuffer.readUnsignedByte(); bool flag8 = (long)this._recvBuffer.bytesAvailable < (long)((ulong)(num4 - 2u)); if (flag8) { this._recvBuffer.position -= 2; break; } this._recvBuffer.readBytes(byteArray, 0, (int)(num4 - 2u)); bool flag9 = this._is_pkg_compressed(num2); if (flag9) { byteArray.uncompress(); } Variant pkg_data = this._pack.UnpackRPCPackage(byteArray.data, byteArray.length); this._rpc_package_cb_fn(pkg_data, byteArray); } else { bool flag10 = num3 == 128u; if (flag10) { bool flag11 = this._recvBuffer.bytesAvailable < 3; if (flag11) { this._recvBuffer.position--; break; } uint num4 = (num2 & 31u) << 24; num4 |= (uint)this._recvBuffer.readUnsignedByte(); num4 |= (uint)((uint)this._recvBuffer.readUnsignedShort() << 8); bool flag12 = (long)this._recvBuffer.bytesAvailable < (long)((ulong)(num4 - 4u)); if (flag12) { this._recvBuffer.position -= 4; break; } this._recvBuffer.readBytes(byteArray, 0, (int)(num4 - 4u)); bool flag13 = this._is_pkg_compressed(num2); if (flag13) { byteArray.uncompress(); } Variant pkg_data = this._pack.UnpackTypePackage(byteArray.data, byteArray.length); this._type_package_cb_fn(pkg_data, byteArray); } else { bool flag14 = num3 == 192u; if (!flag14) { break; } bool flag15 = this._recvBuffer.bytesAvailable < 3; if (flag15) { this._recvBuffer.position--; break; } uint num4 = (num2 & 31u) << 24; num4 |= (uint)this._recvBuffer.readUnsignedByte(); num4 |= (uint)((uint)this._recvBuffer.readUnsignedShort() << 8); bool flag16 = (long)this._recvBuffer.bytesAvailable < (long)((ulong)(num4 - 4u)); if (flag16) { this._recvBuffer.position -= 4; break; } this._recvBuffer.readBytes(byteArray, 0, (int)(num4 - 4u)); bool flag17 = this._is_pkg_compressed(num2); if (flag17) { byteArray.uncompress(); } Variant pkg_data = this._pack.UnpackFullTypePackage(byteArray.data, byteArray.length); this._full_type_pacakge_cb_fn(pkg_data, byteArray); } } } } }