/// <summary>
        /// OnStart(): Put startup code here
        ///  - Start threads, get inital data, etc.
        /// </summary>
        /// <param name="args"></param>
        protected override void OnStart(string[] args)
        {
            base.OnStart(args);
            string userName = (string)Registry.GetValue("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\WakeYourPC\\",
                                                        "UserName", "saimanoj");

            this.EventLog.WriteEntry(string.Format("User name is {0}", userName), EventLogEntryType.Information, 100, 1);
            // Checking whether the username is valid
            UserEntity agentUser = ExternalConnector.GetUser(userName);

            if (agentUser == null)
            {
                this.EventLog.WriteEntry("Invalid User name Or the user is not registered yet" +
                                         string.Format("Please register the {0} first and then try passing as a command line argument.", userName) +
                                         "Exiting Now :-(");
                return;
            }
            UserEntitySingletonFactory.CreateUserEntity(userName);

            _wolPollTimer = new Timer(WolTimerCallback, null, 0, WakeOnLanConstants.WolPollInterval);

            //WOLTimerCallback(null);

            /*string macAddress = MacAddress.GetMac("10.171.41.67");
             *
             * this.EventLog.WriteEntry("MacAddress=" + macAddress);
             * byte[] macBytes = MacAddress.GetMacBytes(macAddress, '-');
             *
             * MagicPacket mp = new MagicPacket(macBytes, "10.171.41.67");
             * mp.WakeUp();
             * bool result = mp.Verify();
             * this.EventLog.WriteEntry(result);*/
        }
        public void WolTimerCallback(Object state)
        {
            this.EventLog.WriteEntry("Entered WOL Timer Callback");
            if (_wolStarted)
            {
                this.EventLog.WriteEntry("Previous work is in progress");
                return;
            }

            try
            {
                _wolStarted = true;
                List <MachineEntity> model = ExternalConnector.GetMachinesToAwake();

                foreach (var MachineObj in model)
                {
                    if (MachineObj.ShouldWakeup && MachineObj.MacAddress != null)
                    {
                        byte[] macBytes = MacAddress.GetMacBytes(MachineObj.MacAddress, '-');

                        // MagicPacket mp = new MagicPacket(macBytes, "10.171.41.67");
                        MagicPacket mp = new MagicPacket(macBytes, MachineObj.HostName); // TODO verify
                        mp.WakeUp();

                        bool result = mp.Verify();
                        MachineObj.ShouldWakeup = false;
                        MachineObj.State        = (result) ? MachineState.Available.ToString() : MachineState.Unreachable.ToString();

                        // PUT this machine object to azure service
                        ExternalConnector.UpdateMachineInfo(MachineObj);
                    }
                }
            }
            catch (Exception e)
            {
                this.EventLog.WriteEntry("Exception in WOLTImer call back " + e);
            }

            _wolStarted = false;
        }