public new void redirectTo(String windowName, USSDSession <Object> session, USSDResponse response) { base.redirectTo(windowName, session, response); GetRequest getRequest = buildGetRequest(); delegateRequest(getRequest, session, response); }
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; }
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(); } }
private void proceedProcessing(USSDRequest request, USSDSession <object> session, USSDResponse response, String currentWindowName, Window currentWindow) { if (currentWindow == null) { throw new WindowNotFoundException(currentWindowName, request, response, session); } }
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); }
public void proceed(USSDRequest request, USSDSession <Object> session, USSDResponse response) { if (Filters.Count > 0) { Filters.ElementAt(0).doFilter(request, session, response, this); } }
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()); }
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; }
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); }
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]"; }
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); } }
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); } } }
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; }
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); }
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) { }
public MutuelSmartUSSDProcessor(USSDSession session, IUSSDHandler handler) : base(session, handler) { }
public SubscriptionUSSDProcessor(USSDSession session, IUSSDHandler handler) : base(session, handler) { }
public void storeWindow(Window window, USSDRequest request, USSDSession <Object> session) { items[window.getId()] = window; }
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) { }
public Window fetchWindow(String windowId, USSDRequest request, USSDSession <Object> session) { return(items[windowId]); }
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"); }
public void process(USSDRequest request, USSDSession <Object> session, USSDResponse response) { request.redirectTo("requestSubmited", session, response); }
public void redirectTo(String windowName, USSDSession <Object> session, USSDResponse response) { session.setPreviousWindow(session.getCurrentWindow()); session.setCurrentWindow(windowName); session.saveSession(); }
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); }
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; } } }
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); }
public void setSession(USSDSession <Object> session) { this.session = session; }
public void doFilter(USSDRequest request, USSDSession <Object> session, USSDResponse response, USSDFilteringChain chain) { proceedProcessing(request, session, response, currentWindowName, currentWindow); }
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; }