public static bool Load() { Logger.Init(); Logger.Log(Logger.LOGLEVEL_INFO, "###############################################################################################"); Logger.Log(Logger.LOGLEVEL_INFO, "About to load init data"); try { using (TextReader reader = new StreamReader(CONTROLFILE)) { heatingData = JsonConvert.DeserializeObject <HeatingData>(reader.ReadToEnd()); reader.Close(); } } catch { try { Logger.Log(Logger.LOGLEVEL_ERROR, "Failed to load data file - trying alt file"); using (TextReader reader = new StreamReader(CONTROLFILEALT)) { heatingData = JsonConvert.DeserializeObject <HeatingData>(reader.ReadToEnd()); reader.Close(); } } catch { Logger.Log(Logger.LOGLEVEL_ERROR, "Failed to load alt data file - trying fallback"); using (TextReader reader = new StreamReader(CONTROLFILEFALLBACK)) { heatingData = JsonConvert.DeserializeObject <HeatingData>(reader.ReadToEnd()); reader.Close(); } } } Logger.Log(Logger.LOGLEVEL_INFO, "Init data loaded"); if (heatingData == null) { return(false); } heatingData.rooms.ForEach(r => { var roomHeaters = heatingData.heaters.FindAll(h => h.roomId == r.id); var roomSensors = heatingData.sensors.FindAll(s => s.roomId == r.id); r.sensors = roomSensors; roomHeaters.ForEach(rh => rh.sensors = roomSensors); r.heaters = roomHeaters; }); // Clear and then populate relay set heatingData.relays.Clear(); heatingData.heaters.ForEach(h => { var heaterRelay = new Relay(h.name, h.relayAddress); heatingData.relays.Add(heaterRelay); }); heatingData.relays.Sort(); Logger.Log(Logger.LOGLEVEL_INFO, "Init data processed"); Save(); return(true); }
public static bool Load() { XmlSerializer deserializer = new XmlSerializer(typeof(HeatingData)); TextReader reader = new StreamReader(@"C:\Temp\HeatingData.xml"); Logger.Log(Logger.LOGLEVEL_INFO, "About to load init data"); object obj = deserializer.Deserialize(reader); theData = (HeatingData)obj; reader.Close(); Logger.Log(Logger.LOGLEVEL_INFO, "Init data loaded"); // Deserializer looses references - creates new objects so clear down and rebuild for (int i = 0; i < Rooms.Count; i++) { Rooms[i].Heaters.Clear(); Rooms[i].Sensors.Clear(); } for (int i = 0; i < FloorHeats.Count; i++) { FloorHeats[i].Sensors.Clear(); } for (int i = 0; i < TowelRads.Count; i++) { TowelRads[i].Sensors.Clear(); } // Add heaters to rooms for (int i = 0; i < FloorHeats.Count; i++) { for (int j = 0; j < Rooms.Count; j++) { if (Rooms[j].Id == FloorHeats[i].RoomId) { Rooms[j].Heaters.Add(FloorHeats[i]); break; } } } for (int i = 0; i < TowelRads.Count; i++) { for (int j = 0; j < Rooms.Count; j++) { if (Rooms[j].Id == TowelRads[i].RoomId) { Rooms[j].Heaters.Add(TowelRads[i]); break; } } } // Add sensors to rooms and heaters for (int i = 0; i < RoomSensors.Count; i++) { for (int j = 0; j < Rooms.Count; j++) { if (Rooms[j].Id == RoomSensors[i].RoomId) { Rooms[j].Sensors.Add(RoomSensors[i]); for (int k = 0; k < Rooms[j].Heaters.Count; k++) { Rooms[j].Heaters[k].Sensors.Add(RoomSensors[i]); } break; } } } for (int i = 0; i < FloorSensors.Count; i++) { for (int j = 0; j < Rooms.Count; j++) { if (Rooms[j].Id == FloorSensors[i].RoomId) { Rooms[j].Sensors.Add(FloorSensors[i]); for (int k = 0; k < Rooms[j].Heaters.Count; k++) { Rooms[j].Heaters[k].Sensors.Add(FloorSensors[i]); } break; } } } // Clear and then populate relay set Relay oRelay; theData.theRelays.Clear(); for (int i = 0; i < FloorHeats.Count; i++) { oRelay = new Relay(FloorHeats[i].Name, FloorHeats[i].RelayAddress); theData.theRelays.Add(oRelay); } for (int i = 0; i < TowelRads.Count; i++) { oRelay = new Relay(TowelRads[i].Name, TowelRads[i].RelayAddress); theData.theRelays.Add(oRelay); } theData.theRelays.Sort(); Logger.Log(Logger.LOGLEVEL_INFO, "Init data processed"); return true; }