public void ProcessResponse(BMC.Business.NetworkService.EnableDisableThreadDataResponse threadData)
        {
            if (dEnableDisableRequest.Count <= 0)
            {
                return;
            }

            try
            {
                if (mEvent.WaitOne(NetworkServiceSettings.DBHitWaitTime))
                {
                    return;
                }

                lock (_lockRes)
                {
                    if (dEnableDisableRequest.ContainsKey(threadData.MessageID))
                    {
                        EnableDisableThreadData Requestitem = dEnableDisableRequest[threadData.MessageID];

                        //Update DB and remove from both lists
                        if (threadData.Ack == true)
                        {
                            DBBuilder.UpdateAAMSStatus(Requestitem.badID, Requestitem.datapakCurrentState.ToString(), "",
                                                       3, Requestitem.InstallationNo, Requestitem.updateDate);

                            // LogManager.WriteLog("Update Bar Position machine status", LogManager.enumLogLevel.Info);
                            DBBuilder.UpdateBarPosition(Requestitem.InstallationNo, Requestitem.Enable);
                            LogManager.WriteLog("ProcessResponse_EnableDisable  |   ACK Updated for Installation:"
                                                + Requestitem.InstallationNo.ToString()
                                                + ", Command:" + Requestitem.command.ToString()
                                                , LogManager.enumLogLevel.Info);
                        }
                        else
                        {
                            LogManager.WriteLog("ProcessResponse_EnableDisable  |   NACK received for Installation:"
                                                + Requestitem.InstallationNo.ToString()
                                                + ", Command:" + Requestitem.command.ToString()
                                                , LogManager.enumLogLevel.Info);
                        }
                        //LogManager.WriteLog("Requesting command result: " + Responseitem.Value.ToString() + " - Installation Number: " + Requestitem.Value.ToString(), LogManager.enumLogLevel.Info);
                        dEnableDisableRequest.Remove(threadData.MessageID);
                    }
                }
            }
            catch (Exception ex)
            {
                LogManager.WriteLog("ProcessResponse_EnableDisable | Exception Occured." + ex.Message, LogManager.enumLogLevel.Info);
                ExceptionManager.Publish(ex);
            }
        }
        /// <summary>
        /// Entry Method for Enable/Disable Machines
        /// </summary>
        private void EnableDisableMachine()
        {
            if (mEvent.WaitOne(NetworkServiceSettings.RequestWaitTime))
            {
                return;
            }

            DataTable dtInsatllationsToProcess;

            dtInsatllationsToProcess = DBBuilder.GetAAMSDetails(3);

            LogManager.WriteLog("EnableDisableMachine | Number of Installation to Process: " + dtInsatllationsToProcess.Rows.Count.ToString()
                                 , LogManager.enumLogLevel.Info);

            try
            {
                if (dtInsatllationsToProcess.Rows.Count > 0)
                {
                    foreach (DataRow dRow in dtInsatllationsToProcess.Rows)
                    {
                        if (mEvent.WaitOne(NetworkServiceSettings.RequestWaitTime))
                        {
                            break;
                        }

                        EnableDisableThreadData threadData = new EnableDisableThreadData()
                        {
                            InstallationNo = dRow["BAD_Reference_ID"] != DBNull.Value ? Convert.ToInt32(dRow["BAD_Reference_ID"].ToString()) : 0,
                            Enable = false,
                            badID = Convert.ToInt32(dRow["BAD_ID"]),
                            datapakCurrentState = 0,
                            entityType = 3,
                            Installation_Float_Status = dRow["Installation_Float_Status"] != DBNull.Value ? Convert.ToInt32(dRow["Installation_Float_Status"]) : 0,
                            enterprisestatus = dRow["BMC_Enterprise_Status"] != DBNull.Value
                                                       ? Convert.ToBoolean(dRow["BMC_Enterprise_Status"].ToString())
                                                       : true,
                            updateDate = Convert.ToDateTime(dRow["BAD_Updated_Date"])
                        };


#if DEBUG
                        LogManager.WriteLog("EnableDisableMachine | InstallationNo:" + threadData.InstallationNo.ToString() + ", EnterpriseStatus:" + threadData.enterprisestatus.ToString(), LogManager.enumLogLevel.Info);
                        
#endif
                        if (threadData.Installation_Float_Status == 1 && DBBuilder.GetSettingFromDB("DISABLE_MACHINE_ON_DROP", "FALSE").ToUpper() == "TRUE")
                        {
                            int messageID = DisableMachine(threadData.InstallationNo);

                            if (!dEnableDisableRequest.ContainsKey(messageID))
                                dEnableDisableRequest.Add(messageID, threadData);

                            threadData.Enable = false; threadData.datapakCurrentState = 0;
                            threadData.command = eCommand.Disable;

                            LogManager.WriteLog("EnableDisableMachine | Disable Request For Installation: " 
                                                + threadData.InstallationNo.ToString() + ", MessageID:" + messageID.ToString()
                                                + " ,CASE:DISABLE_MACHINE_ON_DROP"
                                                , LogManager.enumLogLevel.Info);
                            //var strComment = "Machine Floated and Setting DISABLE_MACHINE_ON_DROP {True} hence disabling.";
                            //LogManager.WriteLog(strComment, LogManager.enumLogLevel.Info);
                            //DBBuilder.UpdateCommentsForAAMS(dRow["BAD_ID"].ToString(), strComment, 3, 0);
                        }
                        else if (threadData.IsSiteLicensingEnabled && threadData.SiteLicensing_DisableGames)
                        {
                            int messageID = DisableMachine(threadData.InstallationNo);

                            if (!dEnableDisableRequest.ContainsKey(messageID))
                                dEnableDisableRequest.Add(messageID, threadData);

                            threadData.datapakCurrentState = 0;
                            threadData.command = eCommand.Disable;
                            LogManager.WriteLog("EnableDisableMachine | Disable Request For Installation: "
                                                + threadData.InstallationNo.ToString() + ", MessageID:" + messageID.ToString()
                                                + " ,CASE:SITELICENSING_DISABLEGAMES"
                                                , LogManager.enumLogLevel.Info);
                        }
                        else
                        {
                            if (threadData.enterprisestatus)
                            {
                                int messageID = EnableMachine(threadData.InstallationNo);
                                if (!dEnableDisableRequest.ContainsKey(messageID))
                                    dEnableDisableRequest.Add(messageID, threadData);

                                threadData.Enable = true; threadData.datapakCurrentState = 1;
                                threadData.command = eCommand.Enable;
                                LogManager.WriteLog("EnableDisableMachine | Enable Request for Installation: " 
                                                    + threadData.InstallationNo.ToString() + ", MessageID:" + messageID.ToString()
                                                    + " ,CASE:ENTERPRISESTATUS"
                                                    , LogManager.enumLogLevel.Info);
                            }
                            else
                            {

                                int messageID = DisableMachine(threadData.InstallationNo);
                                if (!dEnableDisableRequest.ContainsKey(messageID))
                                    dEnableDisableRequest.Add(messageID, threadData);

                                threadData.Enable = false; threadData.datapakCurrentState = 0;
                                threadData.command = eCommand.Disable;
                                LogManager.WriteLog("EnableDisableMachine | Disable Request for Installation: " 
                                                    + threadData.InstallationNo.ToString() + ", MessageID:" + messageID.ToString()
                                                    + " ,CASE:ENTERPRISESTATUS"
                                                    , LogManager.enumLogLevel.Info);

                                //var strComment = "Disabling the Installation : " + threadData.InstallationNo.ToString();
                                //DBBuilder.UpdateCommentsForAAMS(dRow["BAD_ID"].ToString(), strComment, 2, 0);
                            }
                        }

                        
                       
                    }

                }
                else
                {
                    LogManager.WriteLog("No Machines to be enabled or disabled.", LogManager.enumLogLevel.Info);
                }

            }
            catch (Exception ex)
            {
                LogManager.WriteLog("EnableDisableMachine | Exception Occured.", LogManager.enumLogLevel.Info);
                ExceptionManager.Publish(ex);
            }
        }
        /// <summary>
        /// Entry Method for Enable/Disable Machines
        /// </summary>
        private void EnableDisableMachine()
        {
            if (mEvent.WaitOne(NetworkServiceSettings.RequestWaitTime))
            {
                return;
            }

            DataTable dtInsatllationsToProcess;

            dtInsatllationsToProcess = DBBuilder.GetAAMSDetails(3);

            LogManager.WriteLog("EnableDisableMachine | Number of Installation to Process: " + dtInsatllationsToProcess.Rows.Count.ToString()
                                , LogManager.enumLogLevel.Info);

            try
            {
                if (dtInsatllationsToProcess.Rows.Count > 0)
                {
                    foreach (DataRow dRow in dtInsatllationsToProcess.Rows)
                    {
                        if (mEvent.WaitOne(NetworkServiceSettings.RequestWaitTime))
                        {
                            break;
                        }

                        EnableDisableThreadData threadData = new EnableDisableThreadData()
                        {
                            InstallationNo            = dRow["BAD_Reference_ID"] != DBNull.Value ? Convert.ToInt32(dRow["BAD_Reference_ID"].ToString()) : 0,
                            Enable                    = false,
                            badID                     = Convert.ToInt32(dRow["BAD_ID"]),
                            datapakCurrentState       = 0,
                            entityType                = 3,
                            Installation_Float_Status = dRow["Installation_Float_Status"] != DBNull.Value ? Convert.ToInt32(dRow["Installation_Float_Status"]) : 0,
                            enterprisestatus          = dRow["BMC_Enterprise_Status"] != DBNull.Value
                                                       ? Convert.ToBoolean(dRow["BMC_Enterprise_Status"].ToString())
                                                       : true,
                            updateDate = Convert.ToDateTime(dRow["BAD_Updated_Date"])
                        };


#if DEBUG
                        LogManager.WriteLog("EnableDisableMachine | InstallationNo:" + threadData.InstallationNo.ToString() + ", EnterpriseStatus:" + threadData.enterprisestatus.ToString(), LogManager.enumLogLevel.Info);
#endif
                        if (threadData.Installation_Float_Status == 1 && DBBuilder.GetSettingFromDB("DISABLE_MACHINE_ON_DROP", "FALSE").ToUpper() == "TRUE")
                        {
                            int messageID = DisableMachine(threadData.InstallationNo);

                            if (!dEnableDisableRequest.ContainsKey(messageID))
                            {
                                dEnableDisableRequest.Add(messageID, threadData);
                            }

                            threadData.Enable  = false; threadData.datapakCurrentState = 0;
                            threadData.command = eCommand.Disable;

                            LogManager.WriteLog("EnableDisableMachine | Disable Request For Installation: "
                                                + threadData.InstallationNo.ToString() + ", MessageID:" + messageID.ToString()
                                                + " ,CASE:DISABLE_MACHINE_ON_DROP"
                                                , LogManager.enumLogLevel.Info);
                            //var strComment = "Machine Floated and Setting DISABLE_MACHINE_ON_DROP {True} hence disabling.";
                            //LogManager.WriteLog(strComment, LogManager.enumLogLevel.Info);
                            //DBBuilder.UpdateCommentsForAAMS(dRow["BAD_ID"].ToString(), strComment, 3, 0);
                        }
                        else if (threadData.IsSiteLicensingEnabled && threadData.SiteLicensing_DisableGames)
                        {
                            int messageID = DisableMachine(threadData.InstallationNo);

                            if (!dEnableDisableRequest.ContainsKey(messageID))
                            {
                                dEnableDisableRequest.Add(messageID, threadData);
                            }

                            threadData.datapakCurrentState = 0;
                            threadData.command             = eCommand.Disable;
                            LogManager.WriteLog("EnableDisableMachine | Disable Request For Installation: "
                                                + threadData.InstallationNo.ToString() + ", MessageID:" + messageID.ToString()
                                                + " ,CASE:SITELICENSING_DISABLEGAMES"
                                                , LogManager.enumLogLevel.Info);
                        }
                        else
                        {
                            if (threadData.enterprisestatus)
                            {
                                int messageID = EnableMachine(threadData.InstallationNo);
                                if (!dEnableDisableRequest.ContainsKey(messageID))
                                {
                                    dEnableDisableRequest.Add(messageID, threadData);
                                }

                                threadData.Enable  = true; threadData.datapakCurrentState = 1;
                                threadData.command = eCommand.Enable;
                                LogManager.WriteLog("EnableDisableMachine | Enable Request for Installation: "
                                                    + threadData.InstallationNo.ToString() + ", MessageID:" + messageID.ToString()
                                                    + " ,CASE:ENTERPRISESTATUS"
                                                    , LogManager.enumLogLevel.Info);
                            }
                            else
                            {
                                int messageID = DisableMachine(threadData.InstallationNo);
                                if (!dEnableDisableRequest.ContainsKey(messageID))
                                {
                                    dEnableDisableRequest.Add(messageID, threadData);
                                }

                                threadData.Enable  = false; threadData.datapakCurrentState = 0;
                                threadData.command = eCommand.Disable;
                                LogManager.WriteLog("EnableDisableMachine | Disable Request for Installation: "
                                                    + threadData.InstallationNo.ToString() + ", MessageID:" + messageID.ToString()
                                                    + " ,CASE:ENTERPRISESTATUS"
                                                    , LogManager.enumLogLevel.Info);

                                //var strComment = "Disabling the Installation : " + threadData.InstallationNo.ToString();
                                //DBBuilder.UpdateCommentsForAAMS(dRow["BAD_ID"].ToString(), strComment, 2, 0);
                            }
                        }
                    }
                }
                else
                {
                    LogManager.WriteLog("No Machines to be enabled or disabled.", LogManager.enumLogLevel.Info);
                }
            }
            catch (Exception ex)
            {
                LogManager.WriteLog("EnableDisableMachine | Exception Occured.", LogManager.enumLogLevel.Info);
                ExceptionManager.Publish(ex);
            }
        }