コード例 #1
0
        public new void redirectTo(String windowName, USSDSession <Object> session, USSDResponse response)
        {
            base.redirectTo(windowName, session, response);
            GetRequest getRequest = buildGetRequest();

            delegateRequest(getRequest, session, response);
        }
コード例 #2
0
 public BantURequestException(String message, USSDRequest request, USSDResponse response, USSDSession <Object> session, Exception cause)
     : base(message, cause)
 {
     this.request  = request;
     this.response = response;
     this.session  = session;
 }
コード例 #3
0
        public void doFilter(USSDRequest request, USSDSession <Object> session, USSDResponse response, USSDFilteringChain chain)
        {
            String cWName;
            Window currentWindow;

            cWName = session.getCurrentWindow();
            if (String.IsNullOrEmpty(cWName))
            {
                session.setCurrentWindow(request.getApplication().getStartupWindowId());
                cWName = request.getApplication().getStartupWindowId();
            }

            currentWindow = request.getApplication().getWindow(cWName);

            List <USSDFilter> windowFilters = request.getApplication().getWindowFilters(session.getCurrentWindow());

            if (windowFilters.Count > 0)
            {
                foreach (USSDFilter filter in windowFilters)
                {
                    chain.appendFilter(filter);
                }

                BaseUSSDFilter ussdFilter = new BaseUSSDFilter();
                ussdFilter.proceedProcessing = new BaseUSSDFilter.ProceedProcessing(proceedProcessing);

                chain.appendFilter(ussdFilter);

                chain.proceed(request, session, response);

                session.saveSession();
            }
        }
コード例 #4
0
 private void proceedProcessing(USSDRequest request, USSDSession <object> session, USSDResponse response, String currentWindowName, Window currentWindow)
 {
     if (currentWindow == null)
     {
         throw new WindowNotFoundException(currentWindowName, request, response, session);
     }
 }
コード例 #5
0
        public String render(Window window, USSDResponse response)
        {
            StringBuilder builder = new StringBuilder();

            foreach (Message message in window.getMessages())
            {
                builder.Append(message.getContent());
                builder.Append("\n");
            }

            foreach (MenuItem menuItem in window.getMenuItems())
            {
                builder.Append(menuItem.Index + "." + menuItem.Description + "\n");
            }

            String final = builder.ToString();
            USSDSession <Object> session = response.getSession();

            foreach (Object key in session.Keys)
            {
                Object value = session[(String)key];
                final = final.Replace("\\{\\{" + (String)key + "\\}\\}", value.ToString()); //ToDo: Fix this!
            }

            return(final);
        }
コード例 #6
0
 public void proceed(USSDRequest request, USSDSession <Object> session, USSDResponse response)
 {
     if (Filters.Count > 0)
     {
         Filters.ElementAt(0).doFilter(request, session, response, this);
     }
 }
コード例 #7
0
        protected void delegateRequest(USSDRequest request, USSDSession <Object> session, USSDResponse response)
        {
            USSDResponse ussdResponse = BantU.executeRequest(application, request, session);

            response.setWindow(ussdResponse.getWindow());
            response.setResponseType(ussdResponse.getResponseType());
            response.setSession(ussdResponse.getSession());
        }
コード例 #8
0
ファイル: DoubleOptIn.cs プロジェクト: duhowise/UssdService
 public DoubleOptIn(USSDSession session, int subscriptionServiceID)
 {
     this.session               = session;
     this.mobileNumber          = session.MSISDN;
     this.subscriptionServiceID = subscriptionServiceID;
     this.session[State.ConstructerCall.ToString()] = State.ConstructerCall;
     this.ConfirmationMessage = null;
 }
コード例 #9
0
        public List <MenuItem> getMenuItems(String windowName, USSDRequest request, USSDSession <Object> session)
        {
            List <MenuItem> menuItems = new List <MenuItem>();

            menuItems.Add(new MenuItem {
                Description = "3400231", TargetWindow = "amountWindow"
            });
            menuItems.Add(new MenuItem {
                Description = "171021", TargetWindow = "amountWindow"
            });

            return(menuItems);
        }
コード例 #10
0
        public BaseUSSDProcessor(USSDSession session, IUSSDHandler handler)
        {
       

            this.Session = session;
            this.handler = handler;

            if (!ussdcommon.utility.CommonUtility.TryGetAppSettings("CampaignNotStartedMessage", true, out campaignNotStartedMessage))
                campaignNotStartedMessage = "This campaign starts on [date]";

            if (!ussdcommon.utility.CommonUtility.TryGetAppSettings("CampaignEndedMessage", true, out campaignEndedMessage))
                campaignEndedMessage = "This campaign ended on [date]";            
        }
コード例 #11
0
        public void process(USSDRequest request, USSDSession <Object> session, USSDResponse response)
        {
            String pin = session["pin"].ToString();

            if (pin.Equals("1234"))
            {
                request.redirectTo("operations", session, response);
            }
            else
            {
                request.redirectTo("recoverPassword", session, response);
            }
        }
コード例 #12
0
        private void getMenuItemsFromProviders(Window window, USSDRequest request, USSDSession <object> session)
        {
            List <MenuItemsProvider> menuItemsProviders = window.getMenuItemsProvider();

            foreach (MenuItemsProvider provider in menuItemsProviders)
            {
                List <MenuItem> menuItems = provider.getMenuItems(window.getId(), request, session);
                foreach (MenuItem menu in menuItems)
                {
                    window.getMenuItems().Add(menu);
                }
            }
        }
コード例 #13
0
ファイル: Transaction.cs プロジェクト: duhowise/UssdService
        public static void Add(USSDSession session, string ussdString, out long transactionID)
        {
            transactionID = -1;

            USSDTransaction model = new USSDTransaction {
                USSDCampaignId  = session.Campaign.CampaignID,
                MobileNumber    = session.MSISDN,
                Message         = ussdString,
                USSDNumberId    = session.Campaign.USSDNumberID,
                CreatedByUserId = 1,
                CreatedDate     = DateTime.Now,
                SessionGuid     = session.SessionID,
                MobileNetworkId = 1 //Vodacom only for now but this need to be dynamic
            };

            Logic.Instance.USSDTransactions.Insert(model);
            transactionID = model.Id;
        }
コード例 #14
0
        private bool matchInput(Window currentWindow, PostRequest request, USSDSession <Object> session, USSDResponse response)
        {
            String regExp = currentWindow.getInput().RegExp;

            String value = request.getInputValue();

            session[currentWindow.getInput().Name] = value;

            if (currentWindow.getInput().RegExp != null)
            {
                bool matches = regularExpressionMatches(regExp, value, request);

                if (!matches)
                {
                    request.redirectTo(currentWindow.getInput().OnErrorTargetWindow, session, response);
                    return(false);
                }
            }

            return(true);
        }
コード例 #15
0
        private String whereToGo(MenuItem menuItem, USSDRequest request, USSDResponse response, USSDSession <Object> session)
        {
            if (menuItem.TargetWindow.Equals(BACKWARD_TARGET_WINDOW))
            {
                if (session.getPreviousWindow() == null)
                {
                    throw new ImpossibleBackwardRedirectException(menuItem, request, response, session);
                }

                return(session.getPreviousWindow());
            }

            return(menuItem.TargetWindow);
        }
 public ImpossibleBackwardRedirectException(MenuItem menuItem, USSDRequest request, USSDResponse response, USSDSession <Object> session)
     : base(String.Format("Session has no valid previousWindow value. User cant be redirected backward by %s Menu Item.",
                          menuItem.getId()), request, response, session)
 {
 }
コード例 #17
0
 public MutuelSmartUSSDProcessor(USSDSession session, IUSSDHandler handler) : base(session, handler)
 {
 }
コード例 #18
0
 public SubscriptionUSSDProcessor(USSDSession session, IUSSDHandler handler) : base(session, handler)
 {
 }
コード例 #19
0
 public void storeWindow(Window window, USSDRequest request, USSDSession <Object> session)
 {
     items[window.getId()] = window;
 }
コード例 #20
0
 public WindowFetchFailedException(String windowId, USSDRequest request, USSDResponse response, USSDSession <Object> session)
     : base(String.Format("Failed to fetch window with Id {%s} from NavigationCache", windowId), request, response, session)
 {
 }
コード例 #21
0
 public Window fetchWindow(String windowId, USSDRequest request, USSDSession <Object> session)
 {
     return(items[windowId]);
 }
コード例 #22
0
 public void doFilter(USSDRequest request, USSDSession <Object> session, USSDResponse response, USSDFilteringChain chain)
 {
     chain.proceed(request, session, response);
     response.getWindow().getMessages()[0].setContent("Altered by the second filter");
 }
コード例 #23
0
 public void process(USSDRequest request, USSDSession <Object> session, USSDResponse response)
 {
     request.redirectTo("requestSubmited", session, response);
 }
コード例 #24
0
 public void redirectTo(String windowName, USSDSession <Object> session, USSDResponse response)
 {
     session.setPreviousWindow(session.getCurrentWindow());
     session.setCurrentWindow(windowName);
     session.saveSession();
 }
コード例 #25
0
        public static USSDResponse executeRequest(USSDApplication application, USSDRequest request, USSDSession <Object> session)
        {
            USSDResponse         ussdResponse = new BaseUSSDResponse();
            USSDSession <object> ussdSession  = session;

            if (ussdSession == null)
            {
                SessionProvider sessionProvider = application.getSessionProvider();
                if (sessionProvider == null)
                {
                    throw new BantUException(String.Format("The instance must not be null")); // ToDo: Implement as is in Java
                }
                ussdSession = sessionProvider.getSession(request);
                if (ussdSession == null)
                {
                    throw new NullReferenceException(String.Format("The %s instance returned by %s must not be null"));
                }
            }

            request.setApplication(application);
            ussdResponse.setSession(session);

            if (!application.getFilters().Contains(CoreFilter))
            {
                application.getFilters().Add(CoreFilter);
            }

            USSDFilteringChain chain = createFilteringChain(application);

            chain.proceed(request, ussdSession, ussdResponse);

            if (request is GetRequest || request is PostRequest)
            {
                if (ussdResponse.getWindow().isForm())
                {
                    ussdResponse.setResponseType(ResponseType.FORM);
                }
                else
                {
                    ussdResponse.setResponseType(ResponseType.MESSAGE);
                }
            }
            else
            {
                ussdResponse.setResponseType(ResponseType.MESSAGE);
            }

            if (ussdResponse.getResponseType() == ResponseType.FORM)
            {
                BaseNavigationCache navigationCache = (BaseNavigationCache)application.getNavigationCache();

                if (navigationCache != null)
                {
                    try
                    {
                        navigationCache.storeWindow(ussdResponse.getWindow(), request, session);
                    }
                    catch (Exception ex)
                    {
                        throw new WindowStoreFailedException(ussdResponse.getWindow().getId(), request, ussdResponse, session);
                    }
                }
                else
                {
                    ussdSession.close();
                }
            }

            return(ussdResponse);
        }
コード例 #26
0
        protected virtual void DoAfterInitialize(String requestData, USSDHandlerRequestType.RequestTypes inputRequestType, Dictionary <string, object> values, out Boolean isTimeout, out Boolean isInvalid)
        {
            bool addTransaction = false;

            isTimeout = false;
            isInvalid = false;
            if (String.IsNullOrEmpty(MSISDN))
            {
                throw new Exception("Invalid request. No MSISDN Specified");
            }

            if (String.IsNullOrEmpty(USSDString))
            {
                throw new Exception("notify# le shortcode est vide! ");
            }

            if (USSDString.ToUpper() == "USER+TIMEOUT" || requestData.ToUpper().Contains("PDU=\"ABORT\""))
            {
                isTimeout = true;
                USSDSessionManager.Instance.EndSession(MSISDN);
                return;
            }

            Session = USSDSessionManager.Instance.GetSession(MSISDN);
            if (Session == null)
            {
                Session        = USSDSessionManager.Instance.CreateSession(MSISDN);
                addTransaction = true;
            }

            if (USSDString.ToLower().Contains("continue") || string.IsNullOrEmpty(USSDString))
            {
                throw new Exception("notify# votre choix n'est pas correcte! ");
            }
            if (Session.USSDNumber == null) // || (!String.IsNullOrEmpty(USSDString.Trim()) && USSDString.Contains("*120*")))
            {
                String ussdNumberString = string.Empty;

                try
                {
                    ussdNumberString = System.Net.WebUtility.UrlDecode(USSDString.Trim());
                }
                catch { ussdNumberString = USSDString.Replace("%2A4006%2A", "*4006*").Replace("%23", "#"); }

                //exactmobile.components.logging.LogManager.LogStatus("Message string: {0}", USSDString);
                ussdNumberString = ussdNumberString.Trim().Replace("*4006*", String.Empty);
                int lastStar = ussdNumberString.IndexOf("*");
                if (lastStar >= 0)
                {
                    ussdNumberString = ussdNumberString.Substring(0, lastStar);
                }
                int lastHash = ussdNumberString.IndexOf("#");
                if (lastStar < 0 && lastHash >= 0)
                {
                    ussdNumberString = ussdNumberString.Substring(0, lastHash);
                }
                lastHash = ussdNumberString.IndexOf("%23");
                if (lastStar < 0 && lastHash >= 0)
                {
                    try
                    {
                        ussdNumberString = ussdNumberString.Substring(0, lastHash);
                    }
                    catch { }
                }
                int.TryParse(ussdNumberString, out USSDNumber);
                USSDSessionManager.Instance.EndSession(Session.MSISDN);
                Session            = USSDSessionManager.Instance.CreateSession(MSISDN);
                Session.USSDNumber = USSDNumber;
            }
            else
            {
                USSDNumber = Session.USSDNumber.Value;
            }
            if (Session.Campaign == null)
            {
                Session.Campaign = USSDCampaignManager.GetCampaignID(USSDNumber);
            }

            //if (Session.LastMenuId == 0)
            //  Session.LastMenuId = MenuManager.GetRootMenuId(Session.Campaign.CampaignID);

            //if (menuManager == null)
            //    menuManager = new MenuManager(Session.Campaign.CampaignID, USSDNumber);

            if (Session.Campaign == null)
            {
                isInvalid = true;
                USSDSessionManager.Instance.EndSession(MSISDN);
                return;
            }
            else
            {
                if (addTransaction)
                {
                    long transactionID;
                    ussdcommon.Transaction.Add(Session, USSDString, out transactionID);
                    Session.USSDTransactionID = transactionID;
                }
            }
        }
コード例 #27
0
        private bool matchMenuItemsAndRedirect(Window currentWindow, PostRequest request, USSDSession <Object> session, USSDResponse response)
        {
            foreach (MenuItem menuItem in currentWindow.getMenuItems())
            {
                if (menuItem.Index.Equals(request.getInputValue()))
                {
                    if (currentWindow.getMenuValueName() != null)
                    {
                        session[currentWindow.getMenuValueName()] = menuItem.Value;
                    }

                    if (menuItem.TargetWindow != null)
                    {
                        String windowId = whereToGo(menuItem, request, response, session);
                        request.redirectTo(windowId, session, response);

                        return(true);
                    }

                    break;
                }
            }

            return(false);
        }
コード例 #28
0
 public void setSession(USSDSession <Object> session)
 {
     this.session = session;
 }
コード例 #29
0
 public void doFilter(USSDRequest request, USSDSession <Object> session, USSDResponse response, USSDFilteringChain chain)
 {
     proceedProcessing(request, session, response, currentWindowName, currentWindow);
 }
コード例 #30
0
 public WindowNotFoundException(String name, USSDRequest request, USSDResponse response, USSDSession <object> session)
     : base(String.Format("A window with name \"%s\" could not be found.", name), request, response, session)
 {
     this.windowName = name;
 }