Exemple #1
0
        public override NomadObject Deserialize(Stream stream)
        {
            if (Context.State == ContextStateType.End)
            {
                Context.Reset();
            }

            var _stream = (stream as BinaryStream)
                          ?? new BinaryStream(stream);

            var magic = _stream.ReadInt32();

            if (magic == MGX_CONTAINER)
            {
                var dataSize = _stream.ReadInt32();
                var compSize = _stream.ReadInt32();
                var checksum = _stream.ReadInt32();

                var buffer = new byte[dataSize];

                if (compSize != 0)
                {
                    var lz  = new LZ4Decompressor64();
                    var tmp = new byte[compSize];

                    _stream.Read(tmp, 0, compSize);

                    lz.DecompressKnownSize(tmp, buffer, dataSize);
                }
                else
                {
                    _stream.Read(buffer, 0, dataSize);
                }

                using (var bs = new BinaryStream(buffer))
                {
                    return(ReadMapData(bs));
                }
            }
            else
            {
                // move back and read normally
                _stream.Position -= 4;

                return(ReadMapData(_stream));
            }
        }
Exemple #2
0
            public void Deserialize(BinaryStream input)
            {
                Name        = input.ReadInt32();
                StringCount = input.ReadInt32();

                for (int i = 0; i < StringCount; i++)
                {
                    var locStr = new OasisLocalizedString();
                    locStr.Deserialize(input, Name);

                    LocalizedStrings.Add(locStr);
                }

                CompressedValuesSectionsCount = input.ReadInt32();

                for (int i = 0; i < CompressedValuesSectionsCount; i++)
                {
                    var cpr = new CompressedValues();
                    cpr.Deserialize(input);

                    var lz  = new LZ4Decompressor64();
                    var buf = new byte[cpr.DecompressedSize];

                    lz.DecompressKnownSize(cpr.CompressedBytes, buf, cpr.DecompressedSize);

                    var dCpr = new DecompressedValues();

                    using (var bs = new BinaryStream(buf))
                        dCpr.Deserialize(bs);

                    foreach (var kv in dCpr.IdValuePairs)
                    {
                        var id    = kv.Key;
                        var value = kv.Value;

                        OasisStringLookup.SetString(id, value);
                    }
                }
            }