コード例 #1
0
        internal void PatrolRemoveLast()
        {
            Trace.WriteLine("CPatrolManagement: patrolRemoveLast() started on thread \"" +
                            Thread.CurrentThread.Name + "\" ( " +
                            System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() +
                            " )");

            try
            {
                database = myInterface.databaseClass.Database;

                if (database.Patrols.Count == 0)
                {
                    return;
                }

                Trace.WriteLine("CPatrolManagement: PatrolRemoveLast() " +
                                " locking \"PatrolRemoveLastLock\" on thread \"" +
                                Thread.CurrentThread.Name + "\" ( " +
                                System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() + " )");

                lock (PatrolRemoveLastLock)
                {
                    Trace.WriteLine("CPatrolManagement: PatrolRemoveLast() " +
                                    " locked \"PatrolRemoveLastLock\" on thread \"" +
                                    Thread.CurrentThread.Name + "\" ( " +
                                    System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() + " )");

                    if (database.Patrols.Count == 0)
                    {
                        return;
                    }

                    int pid = getHighestPatrolId();
                    if (myInterface.GetCompetitorsCountPatrol(myInterface.GetPatrol(pid)) > 0)
                    {
                        throw new ApplicationException("CompetitorsExist");
                    }

                    Structs.Patrol patrol =
                        myInterface.GetPatrol(pid);
                    myInterface.DelPatrol(patrol, false);

                    Trace.WriteLine("CPatrolManagement: PatrolRemoveLast() " +
                                    " locked \"PatrolRemoveLastLock\" on thread \"" +
                                    Thread.CurrentThread.Name + "\" ( " +
                                    System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() + " )");
                }
            }
            catch (System.Data.DeletedRowInaccessibleException)
            {
                Trace.WriteLine("CPatrolManagement: PatrolRemoveLast DeletedRowInaccessibleException. Retrying.");

                PatrolRemoveLast();
            }
            finally
            {
                Trace.WriteLine("CPatrolManagement: PatrolRemoveLast ended.");
            }
        }
コード例 #2
0
        private static void addConstraint(string constraintName, DatabaseDataset database, OleDbConnection conn)
        {
            Trace.WriteLine("CDatabase: Entering createDatabaseConstraints()");

            StringBuilder sqlCreate = new StringBuilder("");

            foreach (System.Data.DataRelation rel in database.Relations)
            {
                if (rel.RelationName == constraintName)
                {
                    sqlCreate = new StringBuilder("");
                    sqlCreate.Append("ALTER TABLE " + rel.ChildTable.TableName + " ADD " +
                                     "CONSTRAINT " + rel.RelationName + " FOREIGN KEY " +
                                     "(" + rel.ChildColumns[0].ColumnName + ")" +
                                     " REFERENCES " + rel.ParentTable +
                                     " (" + rel.ParentColumns[0].ColumnName +
                                     ")");

                    // Execute against database
                    Trace.WriteLine("CDatabase: Running SQL to create relation: " + sqlCreate.ToString());
                    OleDbCommand SQL = new OleDbCommand(sqlCreate.ToString(), conn);

                    SQL.ExecuteNonQuery();
                    SQL.Dispose();
                }
            }
        }
コード例 #3
0
ファイル: CResult.cs プロジェクト: dasca/WinShooter-Legacy
        /*private ResultsReturn[] convertIntoArray(ResultsReturn results)
         * {
         *      ResultsReturn[] returnArray =
         *              new ResultsReturn[results.Count];
         *      int i = 0;
         *      Structs.Competition competition = myInterface.GetCompetitions()[0];
         *      foreach(DSResults.ResultsRow row in results)
         *      {
         *              returnArray[i] = new ResultsReturn(competition.Type, competition.NorwegianCount);
         *              returnArray[i].ClubId = row.ClubId;
         *              returnArray[i].CompetitorId = row.CompetitorId;
         *              returnArray[i].HitsTotal = row.Hits;
         *              returnArray[i].Medal = row.Medal;
         *              returnArray[i].PointsTotal = row.Points;
         *              returnArray[i].ShooterName = row.ShooterName;
         *              returnArray[i].FigureHitsTotal = row.FigureHits;
         *              returnArray[i].HitsPerStnString = row.HitsPerStn;
         *              returnArray[i].FinalShootingPlace = row.FinalShootingPlace;
         *              returnArray[i].PriceMoney = row.PriceMoney;
         *              i++;
         *      }
         *      return returnArray;
         * }*/

        internal Structs.ResultWeaponsClass[] ResultsGetWClasses()
        {
            database = myInterface.databaseClass.Database;

            ArrayList list = new ArrayList();

            for (int i = 1; i <= Structs.ResultWeaponsClassMax; i++)
            {
                Structs.ResultWeaponsClass thisClass =
                    (Structs.ResultWeaponsClass)i;

                try
                {
                    int.Parse(thisClass.ToString());
                }
                catch (Exception)
                {
                    // thisClass is a string, which means it is a valid class
                    if (myInterface.GetCompetitorResultsExist(thisClass))
                    {
                        list.Add(thisClass);
                    }
                }
            }

            return((Structs.ResultWeaponsClass[])list.ToArray(typeof(Structs.ResultWeaponsClass)));
        }
コード例 #4
0
        internal void PatrolAddEmpty(bool notifyGui)
        {
            database = myInterface.databaseClass.Database;

            DateTime compStart = myInterface.GetCompetitions()[0].StartTime;

            int timeBetweenPatrols = database.Competition[0].PatrolTimeBetween;
            int lastStart          = 0 - timeBetweenPatrols;
            int patrolId           = 0;

            foreach (DatabaseDataset.PatrolsRow row in database.Patrols)
            {
                if (row.StartDateTime > lastStart)
                {
                    lastStart = row.StartDateTime;
                }
                if (row.PatrolId > patrolId)
                {
                    patrolId = row.PatrolId;
                }
            }

            Structs.Patrol patrol = new Structs.Patrol();
            patrol.PatrolId      = patrolId + 1;
            patrol.StartDateTime = compStart.AddMinutes((int)(lastStart + timeBetweenPatrols));
            patrol.CompetitionId = database.Competition[0].CompetitionId;

            myInterface.NewPatrol(patrol, notifyGui);
        }
コード例 #5
0
        internal byte[] ExportResults()
        {
            database = myInterface.databaseClass.Database;

            MemoryStream memStream = new MemoryStream();

            database.WriteXml(memStream);
            return(memStream.ToArray());
        }
コード例 #6
0
        internal ResultsReturnTeam[] GetTeamResults(Structs.ResultWeaponsClass wclass,
                                                    Structs.Competition competition)
        {
            Trace.WriteLine("CResults.GetResults(" + wclass.ToString() +
                            ") started on thread \"" +
                            System.Threading.Thread.CurrentThread.Name + "\" ( " +
                            System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() + " )");

            while (resultsAlreadyRunning)
            {
                System.Threading.Thread.Sleep(50);
            }

            Trace.WriteLine("CResults: GetResults() " +
                            " locking \"GetResultsLock\" on thread \"" +
                            Thread.CurrentThread.Name + "\" ( " +
                            System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() + " )");

            lock (GetResultsLock)
            {
                Trace.WriteLine("CResults: GetResults() " +
                                " locked \"GetResultsLock\" on thread \"" +
                                Thread.CurrentThread.Name + "\" ( " +
                                System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() + " )");

                try
                {
                    resultsAlreadyRunning = true;
                    CompetitionType       = myInterface.CompetitionCurrent.Type;
                    database = myInterface.databaseClass.Database;

                    useNorwegianCount = competition.NorwegianCount;

                    // Ok, now lets count the real ones
                    DSResults results = getAllTeams(wclass);
                    results = sortTeams(results);

                    ResultsReturnTeam[] toReturn =
                        convertIntoArray(results);

                    return(toReturn);
                }
                finally
                {
                    Trace.WriteLine("CResultsTeam: GetResults() " +
                                    " unlocking \"GetResultsLock\" on thread \"" +
                                    Thread.CurrentThread.Name + "\" ( " +
                                    System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() + " )");

                    Trace.WriteLine("CResults.GetResults ended.");
                    resultsAlreadyRunning = false;
                }
            }
        }
コード例 #7
0
        internal byte[] ExportResults()
        {
            database = myInterface.databaseClass.Database;

            StringBuilder toReturn = new StringBuilder();

            foreach (DatabaseDataset.CompetitorsRow competitor in
                     database.Competitors)
            {
                toReturn.Append(createCompetitorLine(competitor));
            }

            Encoding encoding = Encoding.GetEncoding(1252);

            byte[] bytes = encoding.GetBytes(toReturn.ToString());

            return(bytes);
        }
コード例 #8
0
        internal void PatrolAddAutomaticCompetitors(bool CleanPatrols, bool preserveCompetitorOrder)
        {
            Trace.WriteLine("CPatrolManagement: PatrolAddAutomaticCompetitors(" +
                            CleanPatrols.ToString() + ") started on thread \"" +
                            Thread.CurrentThread.Name + "\" ( " +
                            System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() +
                            " )");

            database = myInterface.databaseClass.Database;

            // First clean patrols if instructed
            if (CleanPatrols)
            {
                cleanPatrols();
                myInterface.updatedPatrol();
            }

            // Check there is any competitors
            if (this.database.Competitors
                .Select("PatrolId is null").Length == 0)
            {
                return;
            }

            this.myInterface.updatedPatrolAddAutomaticCompetitors(
                0, 3 * database.Shooters.Count);

            // Create list
            DSPatrolManagement dblist = createList();

            // Sort list
            dblist = sortList(dblist);

            // Spread list evenly
            spreadList(dblist, preserveCompetitorOrder);

            // Update interface
            this.myInterface.updatedPatrolAddAutomaticCompetitors(
                3 * database.Shooters.Count,
                3 * database.Shooters.Count);

            Trace.WriteLine("CPatrolManagement: PatrolAddAutomaticCompetitors ended.");
        }
コード例 #9
0
        internal byte[] ExportClubs()
        {
            database = myInterface.databaseClass.Database;

            StringBuilder toReturn = new StringBuilder();

            toReturn.Append("Klubbid;Namn;Land;Epost;Bankgiro;Plusgiro;\r\n");
            foreach (DatabaseDataset.ClubsRow club in
                     database.Clubs)
            {
                toReturn.Append(createClubsLine(club));
            }

            Encoding encoding = Encoding.GetEncoding(1252);

            byte[] bytes = encoding.GetBytes(toReturn.ToString());

            return(bytes);
        }
コード例 #10
0
        internal byte[] ExportWeapons()
        {
            database = myInterface.databaseClass.Database;

            StringBuilder toReturn = new StringBuilder();

            toReturn.Append("WeaponId;Tillverkare;Modell;Kaliber;\r\n");
            foreach (DatabaseDataset.WeaponsRow weapon in
                     database.Weapons)
            {
                toReturn.Append(createWeaponsLine(weapon));
            }

            Encoding encoding = Encoding.GetEncoding(1252);

            byte[] bytes = encoding.GetBytes(toReturn.ToString());

            return(bytes);
        }
コード例 #11
0
        private void UpgradeVersion1_1()
        {
            if (checkTableExist("Teams", dbconn))
            {
                dropTable("Teams", dbconn);
            }
            // Create table Teams
            CDatabase.CreateTable(new DatabaseDataset.TeamsDataTable(), dbconn);

            string       sqlCreate;
            OleDbCommand SQL;

            // Create restrictions for table Teams
            DatabaseDataset dbtemp = new DatabaseDataset();

            foreach (System.Data.DataRelation rel in dbtemp.Relations)
            {
                if (rel.RelationName.IndexOf("Teams") > -1)
                {
                    sqlCreate = "ALTER TABLE " + rel.ChildTable.TableName + " ADD " +
                                "CONSTRAINT " + rel.RelationName + " FOREIGN KEY " +
                                "(" + rel.ChildColumns[0].ColumnName + ")" +
                                " REFERENCES " + rel.ParentTable +
                                " (" + rel.ParentColumns[0].ColumnName +
                                ")";

                    // Execute against database
                    Trace.WriteLine("CDatabase: Running SQL to create relation: " + sqlCreate);
                    SQL = new OleDbCommand(sqlCreate, dbconn);
                    SQL.ExecuteNonQuery();
                    SQL.Dispose();
                }
            }

            // Create table DbInfo
            CDatabase.CreateTable(new DatabaseDataset.DbInfoDataTable(), dbconn);

            // Change shooter table to include "arrived" column
            addColumnToTable("shooters", "Arrived", "bit null", dbconn);
            addColumnToTable("shooters", "EmailResult", "bit null", dbconn);
        }
コード例 #12
0
 public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedDataSetSchema(global::System.Xml.Schema.XmlSchemaSet xs) {
     DatabaseDataset ds = new DatabaseDataset();
     global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType();
     global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence();
     global::System.Xml.Schema.XmlSchemaAny any = new global::System.Xml.Schema.XmlSchemaAny();
     any.Namespace = ds.Namespace;
     sequence.Items.Add(any);
     type.Particle = sequence;
     global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
     if (xs.Contains(dsSchema.TargetNamespace)) {
         global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
         global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
         try {
             global::System.Xml.Schema.XmlSchema schema = null;
             dsSchema.Write(s1);
             for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) {
                 schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
                 s2.SetLength(0);
                 schema.Write(s2);
                 if ((s1.Length == s2.Length)) {
                     s1.Position = 0;
                     s2.Position = 0;
                     for (; ((s1.Position != s1.Length) 
                                 && (s1.ReadByte() == s2.ReadByte())); ) {
                         ;
                     }
                     if ((s1.Position == s1.Length)) {
                         return type;
                     }
                 }
             }
         }
         finally {
             if ((s1 != null)) {
                 s1.Close();
             }
             if ((s2 != null)) {
                 s2.Close();
             }
         }
     }
     xs.Add(dsSchema);
     return type;
 }
コード例 #13
0
 public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) {
     global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType();
     global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence();
     DatabaseDataset ds = new DatabaseDataset();
     global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny();
     any1.Namespace = "http://www.w3.org/2001/XMLSchema";
     any1.MinOccurs = new decimal(0);
     any1.MaxOccurs = decimal.MaxValue;
     any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
     sequence.Items.Add(any1);
     global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny();
     any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1";
     any2.MinOccurs = new decimal(1);
     any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
     sequence.Items.Add(any2);
     global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute();
     attribute1.Name = "namespace";
     attribute1.FixedValue = ds.Namespace;
     type.Attributes.Add(attribute1);
     global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute();
     attribute2.Name = "tableTypeName";
     attribute2.FixedValue = "DbInfoDataTable";
     type.Attributes.Add(attribute2);
     type.Particle = sequence;
     global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
     if (xs.Contains(dsSchema.TargetNamespace)) {
         global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
         global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
         try {
             global::System.Xml.Schema.XmlSchema schema = null;
             dsSchema.Write(s1);
             for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) {
                 schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
                 s2.SetLength(0);
                 schema.Write(s2);
                 if ((s1.Length == s2.Length)) {
                     s1.Position = 0;
                     s2.Position = 0;
                     for (; ((s1.Position != s1.Length) 
                                 && (s1.ReadByte() == s2.ReadByte())); ) {
                         ;
                     }
                     if ((s1.Position == s1.Length)) {
                         return type;
                     }
                 }
             }
         }
         finally {
             if ((s1 != null)) {
                 s1.Close();
             }
             if ((s2 != null)) {
                 s2.Close();
             }
         }
     }
     xs.Add(dsSchema);
     return type;
 }
コード例 #14
0
ファイル: CResult.cs プロジェクト: dasca/WinShooter-Legacy
        internal Structs.ShootersClass[] ResultsGetUClasses(
            Structs.ResultWeaponsClass wclass)
        {
            Trace.WriteLine("CResult.ResultsGetUClasses(\"" +
                            wclass.ToString() + "\") " +
                            "started on thread \"" +
                            System.Threading.Thread.CurrentThread.Name + "\" ( " +
                            System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() + " )");
            DateTime start = DateTime.Now;

            database = myInterface.databaseClass.Database;
            List <int> sClassesIntTable = new List <int>();
            List <Structs.ShootersClass> shooterClasses = new List <Structs.ShootersClass>();

            foreach (DatabaseDataset.CompetitorsRow row in
                     database.Competitors)
            {
                Structs.Weapon weapon = myInterface.GetWeapon(row.WeaponId);
                if (myInterface.ConvertWeaponsClassToResultClass(weapon.WClass) ==
                    wclass)
                {
                    if (row.GetChildRows("CompetitorsCompetitorResults").Length > 0)
                    {
                        if (!sClassesIntTable.Contains(row.ShooterClass))
                        {
                            sClassesIntTable.Add(row.ShooterClass);
                            Structs.ShootersClass uclass =
                                (Structs.ShootersClass)row.ShooterClass;
                            shooterClasses.Add(uclass);
                        }
                    }
                }
            }

            if (myInterface.CompetitionCurrent.OneClass)
            {
                if (shooterClasses.Contains(Structs.ShootersClass.Klass1) ||
                    shooterClasses.Contains(Structs.ShootersClass.Klass2) ||
                    shooterClasses.Contains(Structs.ShootersClass.Klass3))
                {
                    shooterClasses.Add(Structs.ShootersClass.Klass);
                    shooterClasses.Remove(Structs.ShootersClass.Klass1);
                    shooterClasses.Remove(Structs.ShootersClass.Klass2);
                    shooterClasses.Remove(Structs.ShootersClass.Klass3);
                }

                if (shooterClasses.Contains(Structs.ShootersClass.Damklass1) ||
                    shooterClasses.Contains(Structs.ShootersClass.Damklass2) ||
                    shooterClasses.Contains(Structs.ShootersClass.Damklass3))
                {
                    shooterClasses.Add(Structs.ShootersClass.Damklass);
                    shooterClasses.Remove(Structs.ShootersClass.Damklass1);
                    shooterClasses.Remove(Structs.ShootersClass.Damklass2);
                    shooterClasses.Remove(Structs.ShootersClass.Damklass3);
                }
            }

            /*for(int i=0 ; i<=Structs.ShootersClassMax ; i++)
             * {
             *      try
             *      {
             *              if (sClassesIntTable.Contains(i))
             *              {
             *                      int.Parse(((Structs.ShootersClass)i).ToString());
             *              }
             *      }
             *      catch(System.FormatException)
             *      {
             *              // Ok, we got a class
             *              Structs.ShootersClass uclass =
             *                      (Structs.ShootersClass)i;
             *              shooterClasses.Add(uclass);
             *      }
             * }*/

            shooterClasses.Sort();

            Trace.WriteLine("CResult.ResultsGetUClasses(\"" +
                            wclass.ToString() + "\") " +
                            "ending after " +
                            (DateTime.Now - start).TotalMilliseconds.ToString() +
                            " ms.");

            return(shooterClasses.ToArray());
        }
コード例 #15
0
ファイル: CResult.cs プロジェクト: dasca/WinShooter-Legacy
        internal ResultsReturn[] GetResults(
            Structs.ResultWeaponsClass wclass,
            Structs.ShootersClass uclass,
            Structs.Competition competition,
            bool finalResults)
        {
            Trace.WriteLine("CResults.GetResults(" + wclass.ToString()
                            + ", " + uclass.ToString() +
                            ") started on thread \"" +
                            System.Threading.Thread.CurrentThread.Name + "\" ( " +
                            System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() + " )");

            while (resultsAlreadyRunning)
            {
                System.Threading.Thread.Sleep(50);
            }

            Trace.WriteLine("CResults: GetResults() " +
                            " locking \"GetResultsLock\" on thread \"" +
                            Thread.CurrentThread.Name + "\" ( " +
                            System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() + " )");

            lock (GetResultsLock)
            {
                Trace.WriteLine("CResults: GetResults() " +
                                " locked \"GetResultsLock\" on thread \"" +
                                Thread.CurrentThread.Name + "\" ( " +
                                System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() + " )");

                try
                {
                    resultsAlreadyRunning = true;

                    database = myInterface.databaseClass.Database;

                    useNorwegianCount = competition.NorwegianCount;

                    // First find out about the standard medals
                    calculateStandardMedals(wclass, uclass);

                    // Ok, now lets count the real ones
                    if (competition.OneClass)
                    {
                        switch (uclass)
                        {
                        case Structs.ShootersClass.Damklass:
                            uclass = Structs.ShootersClass.Damklass;
                            break;

                        case Structs.ShootersClass.Damklass1:
                            uclass = Structs.ShootersClass.Damklass;
                            break;

                        case Structs.ShootersClass.Damklass2:
                            uclass = Structs.ShootersClass.Damklass;
                            break;

                        case Structs.ShootersClass.Damklass3:
                            uclass = Structs.ShootersClass.Damklass;
                            break;

                        case Structs.ShootersClass.Juniorklass:
                            break;

                        case Structs.ShootersClass.Klass:
                            uclass = Structs.ShootersClass.Klass;
                            break;

                        case Structs.ShootersClass.Klass1:
                            uclass = Structs.ShootersClass.Klass;
                            break;

                        case Structs.ShootersClass.Klass2:
                            uclass = Structs.ShootersClass.Klass;
                            break;

                        case Structs.ShootersClass.Klass3:
                            uclass = Structs.ShootersClass.Klass;
                            break;

                        case Structs.ShootersClass.VeteranklassYngre:
                            break;

                        case Structs.ShootersClass.VeteranklassÄldre:
                            break;

                        case Structs.ShootersClass.Öppen:
                            break;

                        default:
                            throw new NotSupportedException("Structs.ShootersClass." +
                                                            uclass.ToString() + " is not supported");
                        }
                    }
                    List <ResultsReturn> results = getAllCompetitors(wclass, uclass, false);
                    results.Sort();
                    if (myInterface.CompetitionCurrent.Championship !=
                        Structs.CompetitionChampionshipEnum.Club)
                    {
                        results = markMedals(results);
                    }
                    else
                    {
                        // Mark all as not having medals
                        foreach (ResultsReturn row in results)
                        {
                            row.Medal = Structs.Medal.None;
                        }
                    }

                    if (finalResults)
                    {
                        results = markPriceMoney(results);
                    }

                    return(results.ToArray());
                }
                finally
                {
                    Trace.WriteLine("CResults: GetResults() " +
                                    " unlocking \"GetResultsLock\" on thread \"" +
                                    Thread.CurrentThread.Name + "\" ( " +
                                    System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() + " )");

                    Trace.WriteLine("CResults.GetResults ended.");
                    resultsAlreadyRunning = false;
                }
            }
        }