void ExchangeClientAck(MessageAck messageAck)
        {
            try
            {
                LogManager.WriteLog("MessageID " + messageAck.MessageID + "  MessageAckResult = " + messageAck.ACK, LogManager.enumLogLevel.Info);
                lock (HoldingObject)
                {
                    var memoryList = MessageStore.Where(message => message.messageId == messageAck.MessageID);
                    LogManager.WriteLog("Memory List" + MessageStore.Count, LogManager.enumLogLevel.Info);
                    //below is for AFT
                    var aftMemoryList = AFTMessages.Where(aftmessage => aftmessage.MessageID == messageAck.MessageID);
                    LogManager.WriteLog("AFT Memory List" + AFTMessages.Count, LogManager.enumLogLevel.Info);

                    if (memoryList != null)
                    {
                        foreach (var store in memoryList)
                        {
                            if (store != null)
                            {
                                LogManager.WriteLog("store.GamePosition = " + store.GamePosition.ToString(),
                                                    LogManager.enumLogLevel.Info);
                                if (Int32.Parse(store.GamePosition) == 0)
                                {
                                    if (messageAck.ACK)
                                    {
                                        if (store.Reason == NetworkService.MessageStore.ReasonType.AAMS)
                                        {
                                            //if (store.ExportHistoryID != 0)
                                            //{
                                            //    var _proxy = GetWebService();
                                            //    _proxy.UpdateBarPositionCentralStatusBySiteID(store.ExportHistoryID);
                                            //}

                                            DBBuilder.UpdateAAMSStatus(store.badId, store.datapakCurrentState.ToString(), "",
                                                                       store.entityType, store.installationNo,
                                                                       store.updateDate);
                                            LogManager.WriteLog(
                                                "Message ID: " + messageAck.MessageID + " --- ACK Status was True",
                                                LogManager.enumLogLevel.Info);
                                        }
                                        else
                                        {
                                            LogManager.WriteLog(
                                                "This enable/disable was called due to enterprise connectivity.",
                                                LogManager.enumLogLevel.Info);
                                            dBarPositions = new Dictionary <string, string>
                                            {
                                                { "BarPosName", store.barpositionName },
                                                { "isMachine", "true" }
                                            };

                                            LogManager.WriteLog(
                                                "datapack number and Message ID : " + store.installationNo + " " +
                                                store.messageId, LogManager.enumLogLevel.Info);
                                            LogManager.WriteLog("Current machine Status " + store.datapakCurrentState,
                                                                LogManager.enumLogLevel.Info);


                                            if (store.datapakCurrentState == 1)
                                            {
                                                dBarPositions.Add("Status", "1");
                                            }
                                            else
                                            {
                                                dBarPositions.Add("Status", "0");
                                            }

                                            LogManager.WriteLog("Enabled Machine " + dBarPositions["isMachine"],
                                                                LogManager.enumLogLevel.Info);
                                            LogManager.WriteLog("Enabled Position " + dBarPositions["BarPosName"],
                                                                LogManager.enumLogLevel.Info);
                                            LogManager.WriteLog("Set Status " + dBarPositions["Status"],
                                                                LogManager.enumLogLevel.Info);

                                            var bUpdatedResult = DBBuilder.UpdateBarPosition(dBarPositions);

                                            if (bUpdatedResult)
                                            {
                                                LogManager.WriteLog("Updated Bar Position status",
                                                                    LogManager.enumLogLevel.Info);
                                                lFaults = new List <string> {
                                                    store.installationNo.ToString(), "300"
                                                };

                                                if (store.datapakCurrentState == 1)
                                                {
                                                    lFaults.Add("Machine Auto Enabled");
                                                }
                                                else
                                                {
                                                    lFaults.Add("Machine Auto Disabled");
                                                }
                                                lFaults.Add("true");
                                                if (store.datapakCurrentState == 1)
                                                {
                                                    lFaults.Add("101");
                                                }
                                                else
                                                {
                                                    lFaults.Add("100");
                                                }

                                                dFaultEvents = GetFaults(lFaults);

                                                DBBuilder.CreateFaultEvents(dFaultEvents);
                                                if (store.datapakCurrentState == 1)
                                                {
                                                    LogManager.WriteLog("Machine Auto Enabled -  fault event created",
                                                                        LogManager.enumLogLevel.Info);
                                                }
                                                else
                                                {
                                                    LogManager.WriteLog("Machine Auto Disabled -  fault event created",
                                                                        LogManager.enumLogLevel.Info);
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        LogManager.WriteLog(
                                            "Message ID: " + messageAck.MessageID + " --- ACK Status was Failure",
                                            LogManager.enumLogLevel.Info);
                                    }
                                }
                                else
                                {
                                    LogManager.WriteLog(" Before Updating Store Nack or ack. store ",
                                                        LogManager.enumLogLevel.Info);
                                    store.GameACKorNACK = messageAck.ACK;

                                    LogManager.WriteLog(
                                        " Update GameAcK or Nack to Message ID: " + messageAck.MessageID +
                                        "Game Position = " + store.GamePosition + " Installation No=" + store.installationNo,
                                        LogManager.enumLogLevel.Info);
                                }
                            }
                            else
                            {
                                LogManager.WriteLog("Store value is null", LogManager.enumLogLevel.Info);
                            }
                        }
                    }
                    if (aftMemoryList != null)
                    {
                        LogManager.WriteLog("Inside aftmemory list check", LogManager.enumLogLevel.Info);
                        foreach (var store in aftMemoryList)
                        {
                            LogManager.WriteLog("Ack status " + messageAck.ACK, LogManager.enumLogLevel.Info);
                            if (messageAck.ACK)
                            {
                                DBBuilder.UpdateAFTPolling(store.Installation_No);
                                LogManager.WriteLog("AFT enabled/disabled for the installation no :- " + store.Installation_No.ToString(), LogManager.enumLogLevel.Info);
                            }
                            else
                            {
                                LogManager.WriteLog("Message ID: " + messageAck.MessageID + " --- ACK Status was Failure for AFT Enable/Disable", LogManager.enumLogLevel.Info);
                            }
                        }
                    }
                    else
                    {
                        LogManager.WriteLog(" MessageId " + messageAck.MessageID + "Could not be found",
                                            LogManager.enumLogLevel.Info);
                    }

                    LogManager.WriteLog("Removing Messages. MessageAck = " + messageAck.MessageID,
                                        LogManager.enumLogLevel.Info);

                    MessageStore.RemoveAll(x => x.messageId == messageAck.MessageID);
                    AFTMessages.RemoveAll(x => x.MessageID == messageAck.MessageID);

                    LogManager.WriteLog("Removed Sucessfully. MessageAck = " + messageAck.MessageID,
                                        LogManager.enumLogLevel.Info);
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Publish(ex);
            }
        }