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(); }
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(); }