Beispiel #1
0
        private async Task loadRegisterFromDiskAsync()
        {
            _trace.TraceEvent(TraceEventType.Verbose, 0, "EveLibFileCache:Loading cache register: {0}",
                              CacheRegister);
            if (!Directory.Exists(CachePath))
            {
                _trace.TraceEvent(TraceEventType.Warning, 0, "EveLibFileCache:Cache directory not found: {0}",
                                  CachePath);
                return;
            }
            if (!File.Exists(CacheRegister))
            {
                _trace.TraceEvent(TraceEventType.Warning, 0, "EveLibFileCache:Cache register not found: {0}",
                                  CacheRegister);
                return;
            }
            try {
                // read all lines
                string[] data = await
                                AsyncFileUtilities.ReadAllLinesAsync(CacheRegister).ConfigureAwait(false);

                foreach (string entry in data)
                {
                    string[] split           = entry.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    DateTime cacheValidUntil = DateTime.Parse(split[1], CultureInfo.InvariantCulture);
                    string   fileName        = split[0];
                    // if cache is still valid we register it
                    if (cacheValidUntil > DateTime.UtcNow)
                    {
                        _register[fileName] = cacheValidUntil;
                    }
                    else
                    {
                        // if cache is out of date we delete the data
                        if (File.Exists(CachePath + Config.Separator + fileName))
                        {
                            File.Delete(CachePath + Config.Separator + fileName);
                        }
                    }
                }
                // delete all files that aren't listed in the register file
                IEnumerable <string> files = Directory.EnumerateFiles(CachePath);
                foreach (
                    string file in
                    files.Where(
                        file =>
                        !_register.ContainsKey(file.Replace(CachePath + Config.Separator, "")) &&
                        !file.Equals(CacheRegister)))
                {
                    File.Delete(file);
                }
                _trace.TraceEvent(TraceEventType.Verbose, 0, "EveLibFileCache:CacheRegisterLoaded");
            }
            catch (Exception) {
                _trace.TraceEvent(TraceEventType.Error, 0, "EveLibFileCache:Could not load cache register");
            }
        }
Beispiel #2
0
        private async Task writeRegisterToDiskAsync()
        {
            _trace.TraceEvent(TraceEventType.Verbose, 0, "EveLibFileCache:Writing cache register to disk");
            var lockTask = await _registerLock.WriterLockAsync();

            try {
                await AsyncFileUtilities.WriteAllLinesAsync(CacheRegister,
                                                            _register.Select(x => x.Key + "," + x.Value.ToString(CultureInfo.InvariantCulture)))
                .ConfigureAwait(false);
            }
            finally {
                lockTask.Dispose();
            }
        }
Beispiel #3
0
        /// <summary>
        ///     Loads data from cache
        /// </summary>
        /// <param name="uri">The uri to load cache for</param>
        /// <returns>The cached data</returns>
        public async Task <string> LoadAsync(Uri uri)
        {
            _trace.TraceEvent(TraceEventType.Verbose, 0, "EveLibFileCache.LoadAsync:Start");
            await initAsync().ConfigureAwait(false);

            string data = null;

            _trace.TraceEvent(TraceEventType.Verbose, 0, "EveLibFileCache:CacheRegisterLookupUri: {0}", uri);
            string hash = getHash(uri);

            _trace.TraceEvent(TraceEventType.Verbose, 0, "EveLibFileCache:CacheRegisterLookupHash: {0}", hash);
            DateTime cacheExpirationTime;
            bool     found = _register.TryGetValue(hash, out cacheExpirationTime);

            _trace.TraceEvent(TraceEventType.Verbose, 0, "EveLibFileCache:CacheRegisterHit: {0}", found);
            if (found)
            {
                bool validCache = DateTime.UtcNow < cacheExpirationTime;
                _trace.TraceEvent(TraceEventType.Verbose, 0, "EveLibFileCache:CacheIsValid: {0} ({1})", validCache,
                                  cacheExpirationTime);
                if (validCache)
                {
                    string filePath  = CachePath + Config.Separator + hash;
                    bool   fileExist = File.Exists(filePath);
                    _trace.TraceEvent(TraceEventType.Verbose, 0, "EveLibFileCache:CacheDataFound: {0}", fileExist);
                    if (File.Exists(filePath))
                    {
                        try {
                            data =
                                await
                                AsyncFileUtilities.ReadAllTextAsync(CachePath + Config.Separator +
                                                                    getHash(uri))
                                .ConfigureAwait(false);

                            _trace.TraceEvent(TraceEventType.Verbose, 0,
                                              "EveLibFileCache:Data successfully loaded from cache: {0}",
                                              filePath);
                        }
                        catch (Exception) {
                            _trace.TraceEvent(TraceEventType.Error, 0,
                                              "EveLibFileCache:Cache data could not be loaded: {0}", filePath);
                        }
                    }
                }
            }
            _trace.TraceEvent(TraceEventType.Verbose, 0, "EveLibFileCache.LoadAsync:Complete");
            return(data);
        }
Beispiel #4
0
 private Task writeCacheDataToDiskAsync(Uri uri, string data)
 {
     _trace.TraceEvent(TraceEventType.Verbose, 0, "EveLibFileCache:Writing cache data to disk: {0}", uri);
     return(AsyncFileUtilities.WriteAllTextAsync(Path.Combine(CachePath, getHash(uri)),
                                                 data));
 }
Beispiel #5
0
 private Task writeRegisterToDiskAsync()
 {
     _trace.TraceEvent(TraceEventType.Verbose, 0, "EveLibFileCache:Writing cache register to disk");
     return(AsyncFileUtilities.WriteAllLinesAsync(CacheRegister,
                                                  _register.Select(x => x.Key + "," + x.Value.ToString(CultureInfo.InvariantCulture))));
 }