public class RoomTemperatureController
private int _roomTemperature = 25;
private bool _isAirConditionTurnedOn = false;
private bool _isHeatTurnedOn = false;
private bool _tempSimulator = false;
public delegate void OnRoomTemperatureChange(int roomTemperature);
public event OnRoomTemperatureChange WhenRoomTemperatureChange;
public RoomTemperatureController()
WhenRoomTemperatureChange += InternalRoomTemperatuerHandler;
private void InternalRoomTemperatuerHandler(int roomTemp)
System.Console.WriteLine("Internal Room Temperature Handler - Mandatory to handle/ Should not be removed by external consumer of ths class: Note, if it is delegate this can be removed, if event cannot be removed");
public bool TurnRoomTeperatureSimulator
SimulateRoomTemperature();
get { return _tempSimulator; }
public void TurnAirCondition(bool val)
_isAirConditionTurnedOn = val;
System.Console.WriteLine("Aircondition :" + _isAirConditionTurnedOn);
System.Console.WriteLine("Heat :" + _isHeatTurnedOn);
public void TurnHeat(bool val)
_isAirConditionTurnedOn = !val;
System.Console.WriteLine("Aircondition :" + _isAirConditionTurnedOn);
System.Console.WriteLine("Heat :" + _isHeatTurnedOn);
public async void SimulateRoomTemperature()
if (_isAirConditionTurnedOn)
System.Console.WriteLine("Temperature :" + _roomTemperature);
if (WhenRoomTemperatureChange != null)
WhenRoomTemperatureChange(_roomTemperature);
System.Threading.Thread.Sleep(500);
RoomTemperatureController roomController = null;
roomController = new RoomTemperatureController();
roomController.WhenRoomTemperatureChange += TurnHeatOrACBasedOnTemp;
roomController.SimulateRoomTemperature();
System.Threading.Thread.Sleep(5000);
roomController.TurnAirCondition (true);
roomController.TurnRoomTeperatureSimulator = true;
public void TurnHeatOrACBasedOnTemp(int temp)
roomController.TurnAirCondition(true);
roomController.TurnHeat(true);
public static void Main(string []args)
MySweetHome home = new MySweetHome();