Beispiel #1
0
        /// <summary>
        /// Loaded file from a cache to event arguments.
        /// </summary>
        /// <param name="fileName">File name.</param>
        /// <param name="callback">Callback which should be called to return tile if it is available or null.</param>
        public override void LoadAsync(string fileName, Action <byte[]> callback)
        {
            CacheRecord record = this.GetCacheRecord(fileName);

            byte[] tile = null;
            if (record == null)
            {
                ICacheRecordMetadata metaData = this.LoadFileMetadata(fileName);
                if (metaData != null && metaData.Expires >= DateTime.Now)
                {
                    Stream stream = this.OpenCacheStream(fileName);
                    if (stream.Length == 0)
                    {
                        stream.Dispose();
                    }
                    else
                    {
                        AsyncStreamOperations.LoadAsync(stream, callback);
                        return;
                    }
                }
            }
            else
            {
                tile = record.TileBody;
            }

            callback(tile);
        }
Beispiel #2
0
 private void CheckCacheSize()
 {
     while (this.maxSize > 0 &&
            this.cacheSize >= this.maxSize &&
            this.cacheMetadata.Count > 0)
     {
         ICacheRecordMetadata metadata = this.cacheMetadata[0];
         this.RemoveFile(metadata.FileName);
         this.cacheMetadataDictionary.Remove(metadata.FileName);
         this.cacheMetadata.Remove(metadata);
         this.cacheSize -= metadata.FileStorageLength;
     }
 }
Beispiel #3
0
        private Stream GetStorageStream(string fileName)
        {
            ICacheRecordMetadata metaData = this.LoadFileMetadata(fileName);

            if (metaData != null && metaData.Expires >= DateTime.Now)
            {
                Stream stream = this.OpenCacheStream(fileName);
                if (stream.Length == 0)
                {
                    stream.Dispose();
                    return(null);
                }

                this.SaveFileMetadata(metaData);

                return(stream);
            }

            return(null);
        }
Beispiel #4
0
        private int CompareMetadata(ICacheRecordMetadata a, ICacheRecordMetadata b)
        {
            DateTime now = DateTime.Now;

            if (a == null && b == null)
            {
                return(0);
            }

            if (a == null)
            {
                return(-1);
            }

            if (a == b)
            {
                return(0);
            }

            if (a.Expires < now && b.Expires < now)
            {
                return(0);
            }

            if (a.Expires < now)
            {
                return(-1);
            }

            if (b.Expires < now)
            {
                return(1);
            }

            if (a.LastAccess < b.LastAccess)
            {
                return(-1);
            }

            return(1);
        }
Beispiel #5
0
        private void GetMetadata()
        {
            string[] files = this.GetFiles(this.threadSafetyCachePath, "*");

            Regex fileNameRegex = new Regex(@"\\([^\\]+)$");

            foreach (string file in files)
            {
                Match match = fileNameRegex.Match(file);
                if (match.Success)
                {
                    ICacheRecordMetadata metadata = this.GetFileMetadataSafety(match.Groups[0].Value);
                    if (metadata != null)
                    {
                        this.AddMetadata(metadata);
                    }
                }
            }

            this.cacheMetadata.Sort(this.CompareMetadata);
        }
Beispiel #6
0
 private void AddMetadata(ICacheRecordMetadata metadata)
 {
     this.cacheMetadataDictionary.Add(metadata.FileName, metadata);
     this.cacheMetadata.Add(metadata);
     this.cacheSize += metadata.FileStorageLength;
 }
Beispiel #7
0
 /// <summary>
 /// Saves file metadata.
 /// </summary>
 /// <param name="cacheRecord">Cache record metadata.</param>
 protected abstract void SaveFileMetadata(ICacheRecordMetadata cacheRecord);