コード例 #1
0
ファイル: DataManager.cs プロジェクト: crawfis/RaceManager
        private DataManager()
        {
            events = new BindingList<Event>();
            //competitors = new BindingList<Competitor>();
            competitors = new BindingListWithSort<Competitor>();
            classes = new BindingList<Class>();
            eventEntries = new BindingList<EventEntry>();
            validTags = new Dictionary<String, object>();

            //LoadTestData();

            DeserializeData();
        }
コード例 #2
0
ファイル: DataManager.cs プロジェクト: crawfis/RaceManager
        public void DeserializeData()
        {
            //check number of entries and set the UniqueNumberGenerator that exceeds that (so we don't use
            //same ids)
            string appPath = Path.GetDirectoryName(Config.Instance.DataDirectory);
            Directory.SetCurrentDirectory(appPath);
            try
            {
                using (Stream stream = File.Open("classes_data.bin", FileMode.Open))
                {
                    BinaryFormatter bin = new BinaryFormatter();

                    var deserializedClasses = (BindingList<Class>)bin.Deserialize(stream);
                    this.classes = deserializedClasses;
                    stream.Close();
                }
                using (Stream stream = File.Open("competitors_data.bin", FileMode.Open))
                {
                    BinaryFormatter bin = new BinaryFormatter();

                    //var deserializedCompetitors = (BindingList<Competitor>)bin.Deserialize(stream);
                    var deserializedCompetitors = (BindingListWithSort<Competitor>)bin.Deserialize(stream);
                    this.competitors = deserializedCompetitors;
                    stream.Close();
                }
                using (Stream stream = File.Open("event_entries_data.bin", FileMode.Open))
                {
                    BinaryFormatter bin = new BinaryFormatter();

                    var deserializedEventEntries = (BindingList<EventEntry>)bin.Deserialize(stream);
                    this.eventEntries = deserializedEventEntries;

                    //have to manually reset correct competitors - doesn't work otherwise for some reason
                    foreach (EventEntry eve in eventEntries)
                    {
                        int cID = eve.competitorID;
                        Competitor c = GetCompetitorByID(cID);
                        if (c != null)
                        {
                            eve.competitor = c;
                            //make sure event entries and events and competitors properly connected;
                            //need to set up proper relationships, not only the above one

                            //probably go through each race, check corresponding races/event entries etc.
                        }
                    }
                    stream.Close();
                }
                using (Stream stream = File.Open("other_data.bin", FileMode.Open))
                {
                    BinaryFormatter bin = new BinaryFormatter();

                    var deserializedEvents = (List<int>)bin.Deserialize(stream);
                    List<int> indexes = deserializedEvents;
                    EventSelectedIndex = indexes[0];
                    SessionSelectedIndex = indexes[1];
                    MinimumLapTime = indexes[2];
                    stream.Close();
                }
                using (Stream stream = File.Open("events_data.bin", FileMode.Open))
                {
                    BinaryFormatter bin = new BinaryFormatter();

                    var deserializedEvents = (BindingList<Event>)bin.Deserialize(stream);
                    this.events = deserializedEvents;
                    stream.Close();
                }

                //as with event entries, have to reset competitors for competitor races
                foreach (Event ev in events)
                {
                    foreach (Race race in ev.races)
                    {
                        foreach (CompetitorRace cr in race.competitorRaceList)
                        {
                            int cID = cr.competitorID;
                            Competitor c = GetCompetitorByID(cID);
                            if (c != null)
                                cr.competitor = c;

                            //do reset for the EventEntries as well
                            //deserialized evententry in the CR is not the correct one;
                            //find and set the correct one (even if it's null)
                            if (cr.EventEntry != null)
                            {
                                EventEntry relatedEventEntry = GetEventEntryByID(cr.EventEntry.ID);
                                cr.EventEntry = relatedEventEntry;
                            }
                        }
                    }
                }

                LoadEncrypedTags();
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception caught!" + e.StackTrace);
                DataManager.Log("Exception caught!" + e.StackTrace);
            }

            uniqueIDGenerator = GetCurrentMaxID();
        }