private static bool CheckAgentStatus(Agent agent)
        {
            try
            {
                var uiMode = UiModes.Offline;

                switch (agent.AgentMode)
                {
                case AgentMode.Offline:
                    break;

                case AgentMode.Inbound:
                    uiMode = UiModes.Inbound;
                    break;

                case AgentMode.Outbound:
                    uiMode = UiModes.Outbound;
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                var uiState = UiStatus.Initializing;

                new ComMethods.SwitchOnType <AgentEvent>(agent.AgentCurrentState)
                .Case <AgentInitiate>(initiate =>
                {
                    uiState = UiStatus.Initializing;
                })
                .Case <AgentIdle>(i =>
                {
                    uiState = UiStatus.Idle;
                })
                .Case <AgentBusy>(b =>
                {
                    uiState = UiStatus.Busy;
                })
                .Case <AgentAcw>(b =>
                {
                    uiState = UiStatus.Acw;
                })
                .Case <AgentBreak>(b =>
                {
                    uiState = UiStatus.Break;
                });

                var startTIme = DateTime.Now;
                var client    = new ResourceStatusCheckerClient("BasicHttpBinding_IResourceStatusChecker");
                var sqid      = SequenceNumberGenerator.Instance.GetNextNo;
                var reply     = client.CheckCurrentState(agent.Auth.SecurityToken, uiState, uiMode, sqid);
                Logger.Instance.LogMessage(Logger.LogAppender.DuoLogger5, string.Format("ResourceStatusChecker. Time Take :{0}. Softphone Status : {1} Map>uiState {2}. Reply : {3}, sqid : {4}", DateTime.Now.Subtract(startTIme).TotalMilliseconds, agent.AgentCurrentState, uiState, reply, sqid), Logger.LogLevel.Info);
                return((reply.IsMatching == false) && reply.CurrentMode == UiModes.Offline && reply.CurrentState == UiStatus.Initializing);
            }
            catch (Exception exception)
            {
                Logger.Instance.LogMessage(Logger.LogAppender.DuoLogger5, "CheckAgentStatus", exception, Logger.LogLevel.Error);
                return(true);
            }
        }
        public static bool CheckAgentStatus(string securityToken, DialerState state)
        {
            try
            {
                var uiState = UiStatus.Initializing;
                switch (state)
                {
                case DialerState.Initiate:
                    uiState = UiStatus.Initializing;
                    break;

                case DialerState.NotOnCall:
                    uiState = UiStatus.Idle;
                    break;

                case DialerState.CallRouted:
                case DialerState.CallIncoming:
                case DialerState.CallOutgoing:
                case DialerState.OnHold:
                case DialerState.AgentSupervisorTalking:
                case DialerState.AgentClientTalking:
                case DialerState.Conference:
                case DialerState.etlCall:
                case DialerState.swapCall:
                case DialerState.transferCall:
                case DialerState.transferIvr:
                case DialerState.ACW:
                    uiState = UiStatus.Busy;
                    break;

                default:
                    throw new ArgumentOutOfRangeException("state");
                }
                var startTIme = DateTime.Now;
                var client    = new ResourceStatusCheckerClient("BasicHttpBinding_IResourceStatusChecker");
                var reply     = client.CheckCurrentState(securityToken, uiState, UiModes.Inbound);
                Logger.Instance.LogMessage(Logger.LoggerFiles.DuoLogger1, string.Format("ResourceStatusChecker. Time Take :{0}. Softphone Status : {1} Map>uiState {2}. Reply : {3}", DateTime.Now.Subtract(startTIme).TotalMilliseconds, state, uiState, reply), Logger.LogLevel.Info);
                return((reply.IsMatching == false) && reply.CurrentMode == UiModes.Offline && reply.CurrentState == UiStatus.Initializing);
            }
            catch (Exception exception)
            {
                Logger.Instance.LogMessage(Logger.LoggerFiles.DuoDefault, "CheckAgentStatus", exception, Logger.LogLevel.Error);
                return(true);
            }
        }