예제 #1
0
 public void EndAgentBreak()
 {
     try
     {
         var reply = ArdsHandler.SendStatusChangeRequestIdel(UserAuth, string.Empty);
         if (OnAgentBreakEnd != null)
         {
             OnAgentBreakEnd(AgentCurrentState, reply.Command == WorkflowResultCode.ACDS403);
         }
         IsAgentBreakGranted = false;
     }
     catch (Exception exception)
     {
         Logger.Instance.LogMessage(Logger.LoggerFiles.DuoDefault, "EndAgentBreak", exception, Logger.LogLevel.Error);
     }
 }
예제 #2
0
 public void CancelAgentBreakRequest()
 {
     try
     {
         IsAgentBreakGranted  = false;
         IsAgentBreakeRequest = !ArdsHandler.CancelBreakRequest(UserAuth);
         if (OnAgentBreakRequestCancel != null)
         {
             OnAgentBreakRequestCancel(AgentCurrentState, !IsAgentBreakeRequest);
         }
     }
     catch (Exception exception)
     {
         Logger.Instance.LogMessage(Logger.LoggerFiles.DuoDefault, "BreakRequsetHandle", exception, Logger.LogLevel.Error);
     }
 }
예제 #3
0
        private void UpdateAgentStatus(AgentState status)
        {
            try
            {
                Logger.Instance.LogMessage(Logger.LoggerFiles.DuoLogger5, string.Format("UpdateAgentStatus. {0} To {1}", _agentPreviouState, _agentCurrentState), Logger.LogLevel.Info);

                new SwitchOnType <AgentState>(status)
                .Case <AgentAcw>(ac =>
                {
                    OnAgentStatusUpdating();
                    ArdsHandler.ResourceStatusChangeACW(UserAuth, CallSessionId);
                    OnAgentStatusUpdated();
                })
                .Case <AgentBreak>(asc =>
                {
                    OnAgentStatusUpdating();
                    ArdsHandler.ResourceStatusChangeBreak(UserAuth, CallSessionId);
                    OnAgentStatusUpdated();
                })
                .Case <AgentBusy>(conf =>
                {
                    OnAgentStatusUpdating();
                    ArdsHandler.ResourceStatusChangeBusy(UserAuth, CallSessionId);
                    OnAgentStatusUpdated();
                })
                .Case <AgentIdle>(cont =>
                {
                    OnAgentStatusUpdating();
                    var reply = ArdsHandler.SendStatusChangeRequestIdel(UserAuth, CallSessionId);
                    BreakRequsetHandle(reply.Command);
                    OnAgentStatusUpdated();
                });
                //.Case<AgentInitiate>(disc => SetDisconnectDialPad())
                //.Case<AgentOffline>(spotTrade => SetHoldDialPad())
                //.Default<AgentState>(t => DisableRingtone());
            }
            catch (Exception exception)
            {
                Logger.Instance.LogMessage(Logger.LoggerFiles.DuoDefault, "UpdateAgentStatus", exception, Logger.LogLevel.Error);
                OnAgentStatusUpdated();
            }
        }
예제 #4
0
 public override void OnLoggedOn(ref Agent agent, string callSessionId)
 {
     ArdsHandler.ResourceModeChange(agent.UserAuth);
     ArdsHandler.SendStatusChangeRequestIdel(agent.UserAuth, callSessionId);
     agent.AgentCurrentState = new AgentIdle();
 }
예제 #5
0
 public override void OnLogOn(ref Agent agent, string callSessionId)
 {
     ArdsHandler.SendStatusChangeRequestIdel(agent.UserAuth, callSessionId);
 }
예제 #6
0
        private void UserLogin()
        {
            try
            {
                var settingObject = System.Configuration.ConfigurationSettings.AppSettings;
                var company       = settingObject["Company"];
                var auth          = DuoAuth.DuoAuthorizationService.Login(txtUserName.Text.Trim(), txtPassword.Text.Trim(),
                                                                          int.Parse(company), "DuoSoftPhone");

                if (auth == null)
                {
                    throw new Exception("Fail to Login to Auth.");
                }

                var result = ArdsHandler.ResourceRegistration(auth, GetLocalIPAddress());

                if (result.Command == WorkflowResultCode.ACDS101)
                {
                    result = ArdsHandler.SendStatusChangeRequestIdel(auth, result.SessionID);
                    if (result.Command == WorkflowResultCode.ACDS403 || result.Command == WorkflowResultCode.ACDS405)
                    {
                        result = ArdsHandler.SendModeChangeRequestInbound(auth);
                        if (result.Command == WorkflowResultCode.ACDS601 || result.Command == WorkflowResultCode.ACDS501)
                        {
                            var sip = ProfileManagementHandler.GetSipProfile(auth.SecurityToken, auth.guUserId);
                            if (string.IsNullOrEmpty(sip.userName))
                            {
                                Logger.Instance.LogMessage(Logger.LoggerFiles.DuoDefault, "Fail to get SIP Profile info", Logger.LogLevel.Error);
                                throw new Exception("Fail to get SIP Profile info.");
                            }

                            // set agent status
                            _agent = new Agent
                            {
                                AgentCurrentState = new AgentInitiate(),
                                AgentCurrentMode  = AgentMode.Inbound,
                                SipProfile        = sip,
                                AgentSessionId    = SessionId.UniqueId(txtUserName.Text.Trim()),
                                UserAuth          = auth,
                            };
                            var frm = new FormDialPad(auth, _agent.AgentSessionId, sip, _agent);
                            _agent.AgentCurrentState.OnLogOn(ref _agent, string.Empty);
                            Hide();
                            frm.ShowDialog(this);
                            this.Close();
                            Environment.Exit(0);
                            return;
                        }
                        else
                        {
                            Logger.Instance.LogMessage(Logger.LoggerFiles.DuoDefault, "Fail to set Agent Mode",
                                                       Logger.LogLevel.Error);
                            MessageBox.Show("Fail to set Agent Mode", "Duo Dialer", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                    else
                    {
                        Logger.Instance.LogMessage(Logger.LoggerFiles.DuoDefault, "Fail to set Agent Status",
                                                   Logger.LogLevel.Error);
                        MessageBox.Show("Fail to set Agent Status", "Duo Dialer", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    Logger.Instance.LogMessage(Logger.LoggerFiles.DuoDefault, "Fail to ResourceRegistration",
                                               Logger.LogLevel.Error);
                    MessageBox.Show("Resource Registration Fail", "Duo Dialer", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                ArdsHandler.ResourceUnregistration(auth);
            }
            catch (Exception exception)
            {
                Logger.Instance.LogMessage(Logger.LoggerFiles.DuoDefault, "Login fail", exception, Logger.LogLevel.Error);
                MessageBox.Show("Login Fail", "Duo Dialer", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            txtPassword.Text = string.Empty;
        }
예제 #7
0
        public override void OnRequestAgentBreak(ref Agent agent, AgentMode agentMode, string callSessionId)
        {
            var result = ArdsHandler.SendStatusChangeRequestBreak(agent.UserAuth, callSessionId);

            agent.BreakRequsetHandle(result);
        }
예제 #8
0
 public override void OnEndCallLog(ref Agent agent, string callSessionId)
 {
     agent.AgentCurrentState = new AgentIdle();
     ArdsHandler.SendStatusChangeRequestIdel(agent.UserAuth, callSessionId);
 }