/// <summary> /// Constructor for TModel that does not implement <see cref="IUniquelyIdentifiable{TId}"/>, or when you want to specify your own GetKey() method. /// </summary> /// <param name="getIdDelegate"></param> /// <param name="cache"></param> /// <param name="flushCacheDelegateAsync"></param> /// <param name="options"></param> public AutoCacheBase(GetIdDelegate <TModel, TId> getIdDelegate, IDistributedCache cache, FlushCacheDelegateAsync flushCacheDelegateAsync = null, AutoCacheOptions options = null) { InternalContract.RequireNotNull(getIdDelegate, nameof(getIdDelegate)); InternalContract.RequireNotNull(cache, nameof(cache)); if (options == null) { options = new AutoCacheOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(1) }; } CacheIdentity = Guid.NewGuid().ToString(); Cache = cache; Options = options; GetIdDelegate = getIdDelegate; CacheOptions = new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = Options.AbsoluteExpirationRelativeToNow, SlidingExpiration = Options.SlidingExpiration }; if (flushCacheDelegateAsync == null) { if (cache is IFlushableCache flushableCache) { flushCacheDelegateAsync = flushableCache.FlushAsync; } } _flushCacheDelegateAsync = flushCacheDelegateAsync; }
public static Runner[] ParseFile(string filename, LogMessageDelegate logit, bool deleteFile, GetIdDelegate getIdFunc) { byte[] fileContents; if (!File.Exists(filename)) { return null; } fileContents = File.ReadAllBytes(filename); if (deleteFile) File.Delete(filename); return ParseXmlData(fileContents, logit, deleteFile, getIdFunc); }
/// <summary> /// Constructor for TModel that does not implement <see cref="IUniquelyIdentifiable{TId}"/>, or when you want to specify your own GetKey() method. /// </summary> /// <param name="service"></param> /// <param name="cache"></param> /// <param name="getIdDelegate"></param> /// <param name="flushCacheDelegateAsync"></param> /// <param name="options"></param> public CrudAutoCache(ICrudable service, GetIdDelegate <TModel, TId> getIdDelegate, IDistributedCache cache, FlushCacheDelegateAsync flushCacheDelegateAsync = null, AutoCacheOptions options = null) : base(service, getIdDelegate, cache, flushCacheDelegateAsync, options) { }
public static Runner[] ParseXmlData(byte[] xml, LogMessageDelegate logit, bool deleteFile, GetIdDelegate getIdFunc) { var runners = new List <Runner>(); var xmlDoc = new XmlDocument(); using (var ms = new MemoryStream(xml)) { var setts = new XmlReaderSettings(); setts.XmlResolver = null; setts.ProhibitDtd = false; using (XmlReader xr = XmlReader.Create(ms, setts)) { xmlDoc.Load(xr); } } foreach (XmlNode classNode in xmlDoc.GetElementsByTagName("ClassStart")) { XmlNode classNameNode = classNode.SelectSingleNode("ClassShortName"); if (classNameNode == null) { continue; } string className = classNameNode.InnerText; var personNodes = classNode.SelectNodes("PersonStart"); if (personNodes != null) { foreach (XmlNode personNode in personNodes) { string familyname; string givenname; string club; string sourceId; if (!ParseNameClubAndId(personNode, out familyname, out givenname, out club, out sourceId)) { continue; } var startTimeNode = personNode.SelectSingleNode("Start/StartTime/Clock"); var ccCardNode = personNode.SelectSingleNode("Start/CCard/CCardId"); if (startTimeNode == null || ccCardNode == null) { continue; } string starttime = startTimeNode.InnerText; string si = ccCardNode.InnerText; string storeAlias; if (string.IsNullOrEmpty(sourceId) && string.IsNullOrEmpty(si)) { string name = givenname + " " + familyname + ", " + club; if (!m_suppressedIDCalculationErrors.ContainsKey(name)) { logit("Cannot calculculate ID for runner: " + name + ", skipping [supressing further output for this name]"); m_suppressedIDCalculationErrors.Add(name, name); } continue; } int dbId = getIdFunc(sourceId, si, out storeAlias); var runner = new Runner(dbId, givenname + " " + familyname, club, className, storeAlias); if (!string.IsNullOrEmpty(starttime)) { int istarttime = ParseTime(starttime); runner.SetStartTime(istarttime); } runners.Add(runner); } } } foreach (XmlNode classNode in xmlDoc.GetElementsByTagName("ClassResult")) { XmlNode classNameNode = classNode.SelectSingleNode("ClassShortName"); if (classNameNode == null) { continue; } string className = classNameNode.InnerText; var personNodes = classNode.SelectNodes("PersonResult"); if (personNodes != null) { foreach (XmlNode personNode in personNodes) { string familyname; string givenname; string club; string sourceId; if (!ParseNameClubAndId(personNode, out familyname, out givenname, out club, out sourceId)) { continue; } var competitorStatusNode = personNode.SelectSingleNode("Result/CompetitorStatus"); var resultTimeNode = personNode.SelectSingleNode("Result/Time"); var startTimeNode = personNode.SelectSingleNode("Result/StartTime/Clock"); var ccCardNode = personNode.SelectSingleNode("Result/CCard/CCardId"); if (competitorStatusNode == null || competitorStatusNode.Attributes == null || competitorStatusNode.Attributes["value"] == null || resultTimeNode == null || ccCardNode == null) { continue; } string status = competitorStatusNode.Attributes["value"].Value; string time = resultTimeNode.InnerText; string starttime = ""; if (startTimeNode != null) { starttime = startTimeNode.InnerText; } string si = ccCardNode.InnerText; string storeAlias; if (string.IsNullOrEmpty(sourceId) && string.IsNullOrEmpty(si)) { string name = givenname + " " + familyname + ", " + club; if (!m_suppressedIDCalculationErrors.ContainsKey(name)) { logit("Cannot calculculate ID for runner: " + name + ", skipping [supressing further output for this name]"); m_suppressedIDCalculationErrors.Add(name, name); } continue; } int dbId = getIdFunc(sourceId, si, out storeAlias); var runner = new Runner(dbId, givenname + " " + familyname, club, className, storeAlias); if (!string.IsNullOrEmpty(starttime)) { int istarttime = ParseTime(starttime); runner.SetStartTime(istarttime); } int itime = ParseTime(time); int istatus = 10; if (status.ToLower() == "notcompeting") { //Does not compete, exclude continue; } //runners without starttimenode have not started yet if (startTimeNode != null) { switch (status.ToLower()) { case "mispunch": istatus = 3; break; case "disqualified": istatus = 4; break; case "didnotfinish": istatus = 3; itime = -3; break; case "didnotstart": istatus = 1; itime = -3; break; case "overtime": istatus = 5; break; case "ok": istatus = 0; break; } } runner.SetResult(itime, istatus); var lsplitCodes = new List <int>(); var lsplitTimes = new List <int>(); XmlNodeList splittimes = personNode.SelectNodes("Result/SplitTime"); if (splittimes != null) { foreach (XmlNode splitNode in splittimes) { XmlNode splitcode = splitNode.SelectSingleNode("ControlCode"); XmlNode splittime = splitNode.SelectSingleNode("Time"); if (splittime == null || splitcode == null) { continue; } int iSplitcode; string sSplittime = splittime.InnerText; bool parseOK = int.TryParse(splitcode.InnerText, out iSplitcode); bool isFinishPunch = splitcode.InnerText.StartsWith("F", StringComparison.InvariantCultureIgnoreCase) || iSplitcode == 999; if ((parseOK || isFinishPunch) && sSplittime.Length > 0) { if (isFinishPunch) { if ((istatus == 0 && itime == -1) || (istatus == 10 && itime == -9)) { //Målstämpling itime = ParseTime(sSplittime); runner.SetResult(itime, 0); } } else { iSplitcode += 1000; while (lsplitCodes.Contains(iSplitcode)) { iSplitcode += 1000; } int iSplittime = ParseTime(sSplittime); lsplitCodes.Add(iSplitcode); lsplitTimes.Add(iSplittime); runner.SetSplitTime(iSplitcode, iSplittime); } } } } runners.Add(runner); } } } return(runners.ToArray()); }
public static Runner[] ParseFile(string filename, LogMessageDelegate logit, bool deleteFile, GetIdDelegate getIdFunc) { byte[] fileContents; if (!File.Exists(filename)) { return(null); } fileContents = File.ReadAllBytes(filename); if (deleteFile) { File.Delete(filename); } return(ParseXmlData(fileContents, logit, deleteFile, getIdFunc)); }
public static Runner[] ParseFile(string filename, LogMessageDelegate logit, GetIdDelegate getIdFunc) { return(ParseFile(filename, logit, true, getIdFunc)); }
/// <summary> /// Constructor for TOneModel that does not implement <see cref="IUniquelyIdentifiable{TId}"/>, or when you want to specify your own GetKey() method. /// </summary> /// <param name="service"></param> /// <param name="cache"></param> /// <param name="getIdDelegate"></param> /// <param name="flushCacheDelegateAsync"></param> /// <param name="options"></param> public SlaveToMasterAutoCache(ICrudable service, GetIdDelegate <TManyModel, SlaveToMasterId <TId> > getIdDelegate, IDistributedCache cache, FlushCacheDelegateAsync flushCacheDelegateAsync = null, AutoCacheOptions options = null) : base(service, getIdDelegate, cache, flushCacheDelegateAsync, options) { }
public static Runner[] ParseXmlData(byte[] xml, LogMessageDelegate logit, bool deleteFile, GetIdDelegate getIdFunc) { var runners = new List<Runner>(); var xmlDoc = new XmlDocument(); using (var ms = new MemoryStream(xml)) { var setts = new XmlReaderSettings(); setts.XmlResolver = null; setts.ProhibitDtd = false; using (XmlReader xr = XmlReader.Create(ms, setts)) { xmlDoc.Load(xr); } } foreach (XmlNode classNode in xmlDoc.GetElementsByTagName("ClassStart")) { XmlNode classNameNode = classNode.SelectSingleNode("ClassShortName"); if (classNameNode == null) continue; string className = classNameNode.InnerText; var personNodes = classNode.SelectNodes("PersonStart"); if (personNodes != null) { foreach (XmlNode personNode in personNodes) { string familyname; string givenname; string club; string sourceId; if (!ParseNameClubAndId(personNode, out familyname, out givenname, out club, out sourceId)) continue; var startTimeNode = personNode.SelectSingleNode("Start/StartTime/Clock"); var ccCardNode = personNode.SelectSingleNode("Start/CCard/CCardId"); if (startTimeNode == null || ccCardNode == null) continue; string starttime = startTimeNode.InnerText; string si = ccCardNode.InnerText; string storeAlias; if (string.IsNullOrEmpty(sourceId) && string.IsNullOrEmpty(si)) { string name = givenname + " " + familyname + ", " + club; if (!m_suppressedIDCalculationErrors.ContainsKey(name)) { logit("Cannot calculculate ID for runner: " + name + ", skipping [supressing further output for this name]"); m_suppressedIDCalculationErrors.Add(name, name); } continue; } int dbId = getIdFunc(sourceId, si, out storeAlias); var runner = new Runner(dbId, givenname + " " + familyname, club, className, storeAlias); if (!string.IsNullOrEmpty(starttime)) { int istarttime = ParseTime(starttime); runner.SetStartTime(istarttime); } runners.Add(runner); } } } foreach (XmlNode classNode in xmlDoc.GetElementsByTagName("ClassResult")) { XmlNode classNameNode = classNode.SelectSingleNode("ClassShortName"); if (classNameNode == null) continue; string className = classNameNode.InnerText; var personNodes = classNode.SelectNodes("PersonResult"); if (personNodes != null) { foreach (XmlNode personNode in personNodes) { string familyname; string givenname; string club; string sourceId; if (!ParseNameClubAndId(personNode, out familyname, out givenname, out club, out sourceId)) continue; var competitorStatusNode = personNode.SelectSingleNode("Result/CompetitorStatus"); var resultTimeNode = personNode.SelectSingleNode("Result/Time"); var startTimeNode = personNode.SelectSingleNode("Result/StartTime/Clock"); var ccCardNode = personNode.SelectSingleNode("Result/CCard/CCardId"); if (competitorStatusNode == null || competitorStatusNode.Attributes == null || competitorStatusNode.Attributes["value"] == null || resultTimeNode == null || ccCardNode == null) continue; string status = competitorStatusNode.Attributes["value"].Value; string time = resultTimeNode.InnerText; string starttime = ""; if (startTimeNode != null) starttime = startTimeNode.InnerText; string si = ccCardNode.InnerText; string storeAlias; if (string.IsNullOrEmpty(sourceId) && string.IsNullOrEmpty(si)) { string name = givenname + " " + familyname + ", " + club; if (!m_suppressedIDCalculationErrors.ContainsKey(name)) { logit("Cannot calculculate ID for runner: " + name + ", skipping [supressing further output for this name]"); m_suppressedIDCalculationErrors.Add(name, name); } continue; } int dbId = getIdFunc(sourceId, si, out storeAlias); var runner = new Runner(dbId, givenname + " " + familyname, club, className, storeAlias); if (!string.IsNullOrEmpty(starttime)) { int istarttime = ParseTime(starttime); runner.SetStartTime(istarttime); } int itime = ParseTime(time); int istatus = 10; if (status.ToLower() == "notcompeting") { //Does not compete, exclude continue; } //runners without starttimenode have not started yet if (startTimeNode != null) { switch (status.ToLower()) { case "mispunch": istatus = 3; break; case "disqualified": istatus = 4; break; case "didnotfinish": istatus = 3; itime = -3; break; case "didnotstart": istatus = 1; itime = -3; break; case "overtime": istatus = 5; break; case "ok": istatus = 0; break; } } runner.SetResult(itime, istatus); var lsplitCodes = new List<int>(); var lsplitTimes = new List<int>(); XmlNodeList splittimes = personNode.SelectNodes("Result/SplitTime"); if (splittimes != null) { foreach (XmlNode splitNode in splittimes) { XmlNode splitcode = splitNode.SelectSingleNode("ControlCode"); XmlNode splittime = splitNode.SelectSingleNode("Time"); if (splittime == null || splitcode == null) continue; int iSplitcode; string sSplittime = splittime.InnerText; bool parseOK = int.TryParse(splitcode.InnerText, out iSplitcode); bool isFinishPunch = splitcode.InnerText.StartsWith("F", StringComparison.InvariantCultureIgnoreCase) || iSplitcode == 999; if ((parseOK || isFinishPunch) && sSplittime.Length > 0) { if (isFinishPunch) { if ((istatus == 0 && itime == -1) || (istatus == 10 && itime == -9)) { //Målstämpling itime = ParseTime(sSplittime); runner.SetResult(itime, 0); } } else { iSplitcode += 1000; while (lsplitCodes.Contains(iSplitcode)) { iSplitcode += 1000; } int iSplittime = ParseTime(sSplittime); lsplitCodes.Add(iSplitcode); lsplitTimes.Add(iSplittime); runner.SetSplitTime(iSplitcode, iSplittime); } } } } runners.Add(runner); } } } return runners.ToArray(); }
public static Runner[] ParseFile(string filename, LogMessageDelegate logit, GetIdDelegate getIdFunc) { return ParseFile(filename, logit, true, getIdFunc); }
public static Runner[] ParseXmlData(byte[] xml, LogMessageDelegate logit, bool deleteFile, GetIdDelegate getIdFunc, bool readRadioControls, out RadioControl[] radioControls) { Runner[] runners; var xmlDoc = new XmlDocument(); using (var ms = new MemoryStream(xml)) { var setts = new XmlReaderSettings(); setts.XmlResolver = null; setts.ProhibitDtd = false; using (XmlReader xr = XmlReader.Create(ms, setts)) { xmlDoc.Load(xr); } } //Detect IOF-XML version.. if (xmlDoc.DocumentElement.Attributes["iofVersion"] != null && xmlDoc.DocumentElement.Attributes["iofVersion"].Value != null && xmlDoc.DocumentElement.Attributes["iofVersion"].Value.StartsWith("3.")) { runners = IofXmlV3Parser.ParseXmlData(xmlDoc, logit, deleteFile, getIdFunc, readRadioControls, out radioControls); } else { radioControls = null; //Fallback to 2.0 runners = IOFXmlV2Parser.ParseXmlData(xmlDoc, logit, deleteFile, getIdFunc); } return(runners); }
public static Runner[] ParseFile(string filename, LogMessageDelegate logit, GetIdDelegate getIdFunc, bool readRadioControls, out RadioControl[] radioControls) { return(ParseFile(filename, logit, true, getIdFunc, readRadioControls, out radioControls)); }