/// <summary>
        /// This method Notifies Desktop about call ringing
        /// </summary>
        /// <param name="message"></param>
        public void NotifyCallRinging(IMessage message)
        {
            Settings setting = Settings.GetInstance();

            try
            {
                if (message != null)
                {
                    if (message != null && message.Name == EventRinging.MessageName && DesktopMessenger.communicateUI != null)
                    {
                        DesktopMessenger.midHandler = null;
                        DesktopMessenger.communicateUI.NotifyMIDState(false, null);
                    }


                    callData.EventMessage = message;
                    callData.MediaType    = MediaType.Voice;
                    newCallDataProvider.NewCallData(callData);
                }
            }
            catch (Exception generalException)
            {
                _logger.Error("NotifyCallRinging" + generalException.ToString());
            }
        }
        public void InitializeIntegration(ConfService confProtocol, string applicationName, System.Collections.Generic.Dictionary <string, bool> integrationMediaList = null)
        {
            Thread newThread = new Thread(() =>
            {
                _logger.Info("**********************************************************************************************************************");
                _logger.Info("Pointel.Integration.Core :" + Assembly.GetExecutingAssembly().GetName().Version);
                _logger.Info("***********************************************************************************************************************");
                _logger.Info("Retrieving Values from Application third party integration start.");
                ReadApplication readApplication = new ReadApplication();
                Settings settings = Settings.GetInstance();

                try
                {
                    readApplication.ReadIntegrationDecisionKeyCollections();
                    callData = readApplication.ReadFileIntegrationKeyCollections(confProtocol, applicationName);
                    readApplication.ReadApplicationValue(confProtocol, applicationName);
                    newCallDataProvider = new CallDataProviders();

                    if (settings.EnableFileCommunication)
                    {
                        InitFileIntegration();
                    }
                    else
                    {
                        _logger.Warn("File Communication Disabled");
                    }

                    if (settings.EnablePortCommunication)
                    {
                        try
                        {
                            portSubscriber = new PortSubscriber();
                            portSubscriber.Subscribe(newCallDataProvider);
                            callData.PortData.Decision = IntegrationAction.Open;
                            newCallDataProvider.NewCallData(callData);
                        }
                        catch (Exception ex)
                        {
                            _logger.Error("Error occurred while subcribe Port as " + ex.Message);
                        }
                    }
                    else
                    {
                        _logger.Info("Port integration disabled.");
                    }

                    if (settings.EnablePipeCommunication)
                    {
                        InitPipeIntegration();
                    }
                    else
                    {
                        _logger.Info("Pipe integration disabled.");
                    }

                    if (settings.EnableURLCommunication)
                    {
                        InitWebUrlIntegration(integrationMediaList);
                    }
                    else
                    {
                        _logger.Info("URL integration disabled.");
                    }

                    if (settings.EnableCrmDbCommunication)
                    {
                        try
                        {
                            crmDbSubscriber = new CrmDbSubscriber();
                            crmDbSubscriber.Subscribe(newCallDataProvider);
                        }
                        catch (Exception ex)
                        {
                            _logger.Error("Error occurred while subcribe DB Communication as " + ex.Message);
                        }
                    }
                    else
                    {
                        _logger.Info("Database integration disabled");
                    }

                    if (ConfigContainer.Instance().AllKeys.Contains("voice.enable.agent-activity-db-integration") && ConfigContainer.Instance().GetAsBoolean("voice.enable.agent-activity-db-integration"))
                    {
                        try
                        {
                            var agentActivitySubscriber = new AgentActivitySubscriber();
                            agentActivitySubscriber.Subscribe(newCallDataProvider);
                        }
                        catch (Exception ex)
                        {
                            _logger.Error("Error occurred while subcribe DB Communication as " + ex.Message);
                        }
                    }
                    else
                    {
                        _logger.Info("Agent interaction activity disabled");
                    }


                    ISoftphoneListener softSubscriber = new DesktopMessenger();
                    SoftPhone softPhone = new SoftPhone();
                    softPhone.Subscribe(softSubscriber, Softphone.Voice.SoftPhoneSubscriber.Integration);

                    StartHIMMSIntegration();
                }
                catch (Exception generalException)
                {
                    _logger.Error("Error occurred while reading integration part from the application " + generalException.ToString());
                }
            }); newThread.Start();
        }