/// <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;
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
 /// <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));
 }
Beispiel #7
0
 /// <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)
 {
 }
Beispiel #8
0
        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();
        }
Beispiel #9
0
 public static Runner[] ParseFile(string filename, LogMessageDelegate logit, GetIdDelegate getIdFunc)
 {
     return ParseFile(filename, logit, true, getIdFunc);
 }
Beispiel #10
0
        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);
        }
Beispiel #11
0
 public static Runner[] ParseFile(string filename, LogMessageDelegate logit, GetIdDelegate getIdFunc, bool readRadioControls, out RadioControl[] radioControls)
 {
     return(ParseFile(filename, logit, true, getIdFunc, readRadioControls, out radioControls));
 }