protected override void OnStart(string[] args)
        {
            //Refactor: Add debug condition for testing purpose

            EnableLogging();
            EnableTimer();

            //Refactor: Change XML to LiteDB : Location - C:\ProgramData\Spareio\Config
            XmlHelper.Initialize("settings", DateTime.Now.ToString());
            XmlHelper.LoadInMemory();

            //Refactor : Change logging to log4Net
            LogWriter.Info("Spareio winservice started");

            //Adding wcf host urlacl
            new Thread(AddUrlAcl).Start();
            bool isLoggedIn = false;

            //on first start after install, it will get token from installer which needs to be stored
            if (args.Length > 0)
            {
                isLoggedIn = args.Length > 0;
                XmlHelper.UpdateSetting(VariableConstants.xToken, args[0]);
            }
            else
            {
                LogWriter.Info("Service started without token");
            }

            //Monitoring start
            MonitorService.Initialize(isLoggedIn);

            OpenWCFHost();
        }
        private void HourlyTimerOnElapsed(object sender, ElapsedEventArgs elapsedEventArgs)
        {
            LogWriter.Info("Timer elapsed.. time to send event");
            MonitorService.Stop("Interval");
            bool isLoggedIn = true;

            Boolean.TryParse(XmlHelper.ReadSetting(VariableConstants.IsLoggedIn), out isLoggedIn);
            MonitorService.Initialize(isLoggedIn);
        }
        protected override bool OnPowerEvent(PowerBroadcastStatus powerStatus)
        {
            LogWriter.Info("Power Mode change detected");
            PowerStatus status = SystemInformation.PowerStatus;

            if (powerStatus == PowerBroadcastStatus.PowerStatusChange)
            {
                if (status.PowerLineStatus == PowerLineStatus.Online)
                {
                    PowerService.HandlePlugIn();
                }
                if (status.PowerLineStatus == PowerLineStatus.Offline)
                {
                    PowerService.HandlePlugOut();
                }
            }

            else if (powerStatus.HasFlag(PowerBroadcastStatus.ResumeSuspend))
            {
                LogWriter.Info("Resume suspended coming back from sleep");
            }

            else if (powerStatus.HasFlag(PowerBroadcastStatus.ResumeAutomatic))
            {
                LogWriter.Info("Resume suspended coming back from sleep automatic");
                MonitorService.Initialize();
            }

            else if (powerStatus.HasFlag(PowerBroadcastStatus.QuerySuspend))
            {
                MonitorService.Stop("Sleep");

                LogWriter.Info("Going in sleeping mode");
                LogWriter.Info("Query suspended going to sleep");
                //MonitorService.Stop("Sleep");
            }

            return(false);
        }