Пример #1
0
        //------------------------------------------------ Private --------------------------------------------------
        ISessionScript create(ISessionChannel pChannel, string pOrigIPAddress, string pAccessNumber, string pANI)
        {
            ISessionScript _sessionScript;

            try {
                ISession _session = new Session(pChannel, pOrigIPAddress, pAccessNumber, pANI);
                Thread.SetData(Thread.GetNamedDataSlot(Thread.CurrentThread.Name), _session.Id);

                ScriptInfo _scriptInfo;
                RbrResult  _rc = rbr.InitRetailSession(_session, out _scriptInfo);
                if (_scriptInfo == null)
                {
                    return(null);
                }

                switch (_scriptInfo.ScriptType)
                {
                case ScriptType.PhoneCard: {
                    _scriptInfo.PinLength += 1;                                         //NOTE: this is so that we pickup '#' terminator too, since standard prompt directs user to pres '#' after the PinNumber
                    _sessionScript         = new PhoneCardCallScript(_rc, _session, _scriptInfo);
                    break;
                }

                case ScriptType.Residential: {
                    _sessionScript = new ResidentialCallScript(_rc, _session, _scriptInfo);
                    break;
                }

                case ScriptType.LD: {
                    _sessionScript = new LDCallScript(_rc, _session, _scriptInfo);
                    break;
                }

                case ScriptType.LadyGuadalupe: {
                    _scriptInfo.PinLength += 1;                                         //NOTE: this is so that we pickup '#' terminator too, since standard prompt directs user to pres '#' after the PinNumber
                    _sessionScript         = new LadyGuadalupeCallScript(_rc, _session, _scriptInfo);
                    break;
                }

                default: {
                    T.LogRbr(LogSeverity.Critical, "SessionScript.create", string.Format("Error: Unknown RetailType {0}", _scriptInfo));
                    return(null);
                }
                }
            }
            catch (Exception _ex) {
                T.LogRbr(LogSeverity.Critical, "SessionScriptFactory.create", string.Format("CallFlowFactory.Create, Exception:\r\n{0}", _ex));
                return(null);
            }

            return(_sessionScript);
        }
Пример #2
0
        public void Run(bool pIsFinal)
        {
            RbrResult _rbrResult = RbrResult.Success;

            try {
                run();
            }
            catch (Exception _ex) {
                _rbrResult = handleException(_ex);
            }
            finally {
                SetCallEnd(_rbrResult, pIsFinal);
            }
        }
Пример #3
0
 protected void SetCallEnd(RbrResult pRbrResult, bool pIsFinal)
 {
     if (pIsFinal)
     {
         if (session.State == SessionState.Leg1)
         {
             session.Channel.DisconnectLeg1();
         }
         else if (session.State == SessionState.Leg2)
         {
             session.Channel.DisconnectAll();
         }
     }
 }
Пример #4
0
        public SessionScriptBase(RbrResult pInitResult, ISession pSession, ScriptInfo pScriptInfo)
        {
            session    = pSession;
            scriptInfo = pScriptInfo;

            promptManager = new PromptManager(scriptInfo);
            leg1Length    = 0;
            cardLength    = scriptInfo.PinLength;
            neverUsed     = false;

            startingBalance     = currentBalance = decimal.Zero;
            currentBonusBalance = 0;
            serialNumber        = string.Empty;
            callState           = CallState.Initializing;
        }
Пример #5
0
        bool setCallEnd(RbrResult pRbrResult)
        {
            try {
                cdr.End();

                var _cause  = IVRDisconnectCause.LC_NORMAL;
                var _source = IVRDisconnectSource.IVR;
                if (session.Channel.DisconnectCause != (int)IVRDisconnectCause.LC_UNKNOWN)
                {
                    _cause  = (IVRDisconnectCause)session.Channel.DisconnectCause;
                    _source = (IVRDisconnectSource)session.Channel.DisconnectSource;
                }
                cdr.SetCause(_cause, _source, pRbrResult);

                sessionHandler.CallComplete(session.Id, cdr.CallId, cdr.ToString());
                sessionHandler.OnCompleted(callState, safeCarrierAcctId(), LegIn.CustomerAcctId);

                //TODO: just do DisconnectAll here?
                if (session.State == SessionState.Leg1)
                {
                    session.Channel.DisconnectLeg1();
                    return(false);
                }
                if (lastAttempt())
                {
                    session.Channel.DisconnectAll();
                    return(false);
                }
                session.Channel.DisconnectLeg2();
                return(true);
            }
            finally {
                if (lastAttempt() && account.Obtained)
                {
                    sessionHandler.SetRetailAcctNotInUse(session);
                }
            }
        }
Пример #6
0
        public void SetCause(IVRDisconnectCause pDisconnectCause, IVRDisconnectSource pDisconnectSource, RbrResult pRbrResult)
        {
            switch (pDisconnectCause)
            {
            case IVRDisconnectCause.LC_NORMAL:
                disconnectCause = (int)GkDisconnectCause.NormalCallClearing;
                break;

            case IVRDisconnectCause.LC_NUMBER_BUSY:
                disconnectCause = (int)GkDisconnectCause.UserBusy;
                break;

            case IVRDisconnectCause.LC_NO_ANSWER:
                disconnectCause = (int)GkDisconnectCause.NoAnswer;
                break;

            case IVRDisconnectCause.LC_NUMBER_UNOBTAINABLE:
                disconnectCause = (int)GkDisconnectCause.UnallocatedNumber;
                break;

            case IVRDisconnectCause.LC_NUMBER_CHANGED:
                disconnectCause = (int)GkDisconnectCause.NumberChanged;
                break;

            case IVRDisconnectCause.LC_OUT_OF_ORDER:
                disconnectCause = (int)GkDisconnectCause.DestinationOutOfOrder;
                break;

            case IVRDisconnectCause.LC_INCOMING_CALLS_BARRED:
                disconnectCause = (int)GkDisconnectCause.InvalidNumberFormat;
                break;

            case IVRDisconnectCause.LC_CALL_REJECTED:
                disconnectCause = (int)GkDisconnectCause.CallRejected;
                break;

            case IVRDisconnectCause.LC_CALL_FAILED:
                disconnectCause = (int)GkDisconnectCause.ResourceUnavailable;
                break;

            case IVRDisconnectCause.LC_CHANNEL_BUSY:
                disconnectCause = (int)GkDisconnectCause.ChannelUnacceptable;
                break;

            case IVRDisconnectCause.LC_NO_CHANNELS:
                disconnectCause = (int)GkDisconnectCause.NoCircuitChannelAvailable;
                break;

            case IVRDisconnectCause.LC_CONGESTION:
                disconnectCause = (int)GkDisconnectCause.Congestion;
                break;

            default:
                break;
            }

            disconnectSource = (byte)pDisconnectSource;
            rbrResult        = (int)pRbrResult;

            mappedDisconnectCause = (int)pDisconnectCause;
        }
Пример #7
0
 public RbrException(RbrResult pRbrResult, string pSource, string pMessage) : base(pMessage)
 {
     RbrResult   = pRbrResult;
     base.Source = pSource;
 }
Пример #8
0
 public RbrException(RbrResult pRbrResult, string pMessage) : base(pMessage)
 {
     RbrResult = pRbrResult;
 }
Пример #9
0
 public TestCallScript(RbrResult pInitResult, ISession pSession, ScriptInfo pScriptInfo) : base(pInitResult, pSession, pScriptInfo)
 {
 }