예제 #1
0
        /// <summary>
        /// Recupera as entradas carregadas para o cache.
        /// </summary>
        /// <param name="typeNames">Nomes do tipos da entradas que serão carregadas.</param>
        /// <returns></returns>
        public IEnumerable <DataEntry> GetEntries(Colosoft.Reflection.TypeName[] typeNames)
        {
            typeNames.Require("typeNames").NotNull();
            if (typeNames.Length == 0)
            {
                yield break;
            }
            var hashNames = typeNames.Select(f => MakeEntryFileName(f)).ToArray();
            var directory = GetLocalPath();

            if (System.IO.Directory.Exists(directory))
            {
                foreach (var i in hashNames.Where(f => System.IO.File.Exists(f)))
                {
                    DataEntry        entry  = null;
                    System.IO.Stream stream = null;
                    try
                    {
                        using (stream = System.IO.File.OpenRead(i))
                        {
                            var reader = new Colosoft.Serialization.IO.CompactBinaryReader(stream, Colosoft.Text.Encoding.Default);
                            entry = new DataEntry();
                            ((Colosoft.Serialization.ICompactSerializable)entry).Deserialize(reader);
                        }
                    }
                    catch
                    {
                        continue;
                    }
                    yield return(entry);
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Recupera as versões das entradas carregadas no cache.
        /// </summary>
        /// <returns></returns>
        public IEnumerable <DataEntryVersion> GetEntryVersions()
        {
            var directory = GetLocalPath();

            if (System.IO.Directory.Exists(directory))
            {
                foreach (var i in System.IO.Directory.GetFiles(directory, "*.cache"))
                {
                    DataEntryVersion version = null;
                    try
                    {
                        using (var stream = System.IO.File.OpenRead(i))
                        {
                            var reader = new Colosoft.Serialization.IO.CompactBinaryReader(stream, Colosoft.Text.Encoding.Default);
                            version = new DataEntryVersion();
                            ((Colosoft.Serialization.ICompactSerializable)version).Deserialize(reader);
                        }
                    }
                    catch
                    {
                        continue;
                    }
                    yield return(version);
                }
            }
        }
예제 #3
0
        /// <summary>
        /// Recupera as entradas carregadas para o cache.
        /// </summary>
        /// <returns></returns>
        public IEnumerable <DataEntry> GetEntries()
        {
            var directory = GetLocalPath();

            if (System.IO.Directory.Exists(directory))
            {
                foreach (var i in System.IO.Directory.GetFiles(directory, "*.cache"))
                {
                    DataEntry        entry  = null;
                    System.IO.Stream stream = null;
                    try
                    {
                        stream = System.IO.File.OpenRead(i);
                        var reader = new Colosoft.Serialization.IO.CompactBinaryReader(stream, Colosoft.Text.Encoding.Default);
                        entry = new DataEntry();
                        ((Colosoft.Serialization.ICompactSerializable)entry).Deserialize(reader);
                    }
                    catch
                    {
                        if (stream != null)
                        {
                            stream.Dispose();
                        }
                        continue;
                    }
                    yield return(entry);
                }
            }
        }
예제 #4
0
                public bool MoveNext()
                {
                    _currentPosition++;
                    if (_currentPosition >= _package._zipFile.Count)
                    {
                        return(false);
                    }
                    var zipEntry = _package._zipFile[_currentPosition];

                    using (var stream = _package._zipFile.GetInputStream(zipEntry))
                    {
                        var outStream = new System.IO.MemoryStream((int)zipEntry.Size);
                        var read      = 0;
                        while ((read = stream.Read(_buffer, 0, _buffer.Length)) > 0)
                        {
                            outStream.Write(_buffer, 0, read);
                        }
                        outStream.Position = 0;
                        try
                        {
                            var reader         = new Colosoft.Serialization.IO.CompactBinaryReader(outStream);
                            var isNullTypeName = reader.ReadByte() == 0;
                            Colosoft.Reflection.TypeName typeName = null;
                            if (!isNullTypeName)
                            {
                                typeName = new Reflection.TypeName();
                                typeName.Deserialize(reader);
                            }
                            var version    = reader.ReadDateTime();
                            var hasRecords = reader.ReadByte() == 1;
                            outStream.Position = 0;
                            _currrentStream    = outStream;
                            _current           = new Tuple <DataEntryVersion, System.IO.Stream>(new DataEntryVersion {
                                TypeName = typeName,
                                Version  = version
                            }, outStream);
                        }
                        catch
                        {
                            outStream.Dispose();
                            throw;
                        }
                    }
                    return(true);
                }