public void AddRegCheck(string featureId, DateTime expirationDate) { var key = GetKey(featureId); var value = new FeatureRegInfo { ExpirationDate = expirationDate, LastChecked = DateTime.UtcNow }; SetUpdateRecord(key, value); Save(); }
public FeatureRegInfo GetRegInfo(string featureId) { var key = GetKey(featureId); FeatureRegInfo info = null; _updateRecords.TryGetValue(key, out info); if (info == null) { return(null); } // guard agains people just putting a large number in the file return(info.LastChecked < DateTime.UtcNow ? info : null); }
private void SetUpdateRecord(Guid key, FeatureRegInfo value) { _updateRecords.AddOrUpdate(key, value, (k, v) => value); }
private void Load() { string[] contents = null; var licenseFile = Filename; lock (_fileLock) { try { contents = _fileSystem.ReadAllLines(licenseFile); } catch (FileNotFoundException) { lock (_fileLock) { _fileSystem.WriteAllBytes(licenseFile, new byte[] { }); } } catch (IOException) { lock (_fileLock) { _fileSystem.WriteAllBytes(licenseFile, new byte[] { }); } } } if (contents != null && contents.Length > 0) { //first line is reg key RegKey = contents[0]; //next is legacy key if (contents.Length > 1) { // Don't need this anymore } //the rest of the lines should be pairs of features and timestamps for (var i = 2; i < contents.Length; i = i + 2) { var line = contents[i]; if (string.IsNullOrWhiteSpace(line)) { continue; } Guid feat; if (Guid.TryParse(line, out feat)) { var lineParts = contents[i + 1].Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries); long ticks; if (long.TryParse(lineParts[0], out ticks)) { var info = new FeatureRegInfo { LastChecked = new DateTime(ticks) }; if (lineParts.Length > 1 && long.TryParse(lineParts[1], out ticks)) { info.ExpirationDate = new DateTime(ticks); } SetUpdateRecord(feat, info); } } } } }