Exemple #1
0
        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);
        }
Exemple #2
0
        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);
                        }
                    }
                }
            }
        }