public UssdRequestMessage GenerateMessageObject() { UssdRequestMessage message = new UssdRequestMessage(); ; XmlDocument document = new XmlDocument(); var xmlFormed = _xmlDocument.Replace("<", "<").Replace(""", "\"").Replace(">", ">"); //throw new Exception(xmlFormed); document.LoadXml(xmlFormed); XmlNodeList nodes; try { nodes = document.SelectNodes("//methodCall/params/param/value/struct/member"); if (nodes.Count > 0) { message = new UssdRequestMessage(); foreach (XmlNode node in nodes) { XmlDocument nodedoc = new XmlDocument(); string modif = "<modified>" + node.InnerXml + "</modified>"; nodedoc.LoadXml(modif); var resultName = nodedoc.SelectSingleNode("modified/name").InnerText; var resultValue = nodedoc.SelectSingleNode("modified/value").InnerText; PropertyInfo prop = message.GetType().GetProperty(resultName); if (prop != null) { var val = Convert.ChangeType(resultValue, prop.PropertyType); prop.SetValue(message, val, null); } } } } catch (Exception ex) { } return message; }
public override object ReadFromStream(Type type, System.IO.Stream readStream, System.Net.Http.HttpContent content, IFormatterLogger formatterLogger) { using (var reader = new StreamReader(readStream)) { var ussdRequest = new UssdRequestMessage(); if (content != null) { var values = content.ReadAsStringAsync().Result.Split(new char[] {','}); ussdRequest = new UssdRequestMessage() {TransactionId = values[0],TransactionTime = values[1],MSISDN = values[2],USSDServiceCode = values[3],USSDRequestString = values[4],response = Convert.ToBoolean(values[5]),ChargeCode = Convert.ToDecimal(values[6]),ChargingFlag = Convert.ToBoolean(values[7])}; return ussdRequest; } else { throw new InvalidOperationException("Cannot DeSerialize Type"); } } readStream.Close(); }
public UssdResponseMessage ProcessRequest(UssdRequestMessage request) { string assembName = "ServiceTwo.dll";//assembly string clasName = "Geez.ServiceTwo.Handler"; string methName = "ReqstHandler"; Assembly assembly = Assembly.LoadFile(@"D:\Projects\Geez\"+assembName); Type type = assembly.GetType(clasName); var serviceInstance = Activator.CreateInstance(type); var methodInfo = type.GetMethod(methName); string result = methodInfo.Invoke(serviceInstance, new object[]{""}).ToString(); //string result = type.InvokeMember(methName, BindingFlags.InvokeMethod|BindingFlags.Instance|BindingFlags.Public,null, serviceInstance, null).ToString(); return new UssdResponseMessage() {TransactionId = "0",action = "end",TransactionTime = DateTime.Now.ToString(),USSDResponseString =result }; }
// // GET: /Test/ public ActionResult Index() { var client = new HttpClient(); string url = ConfigurationManager.AppSettings["ServiceUrl"].ToString(CultureInfo.InvariantCulture); client.BaseAddress = new Uri(url); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); //var request = new UssdRequestMessage() { TransactionId = "53635424", MSISDN = "911734365", TransactionTime = DateTime.UtcNow.ToString("o"), USSDServiceCode = "809", USSDRequestString = "*809#" }; var request = new UssdRequestMessage() { TransactionId = "53635424", MSISDN = "911734365", TransactionTime = DateTime.UtcNow.ToString("o"),response = false,USSDServiceCode = "809", USSDRequestString = "*809#" }; //HttpResponseMessage response = client.GetAsync("api/Communication/GetResponse?request=" + message).Result; HttpResponseMessage response = client.PostAsJsonAsync("api/communication/GetResponse", request).Result; var cont = response.Content.ReadAsAsync<UssdResponseMessage>(); return View(cont.Result); }
public UssdRequestMessage GenerateMessageObject() { UssdRequestMessage message = new UssdRequestMessage();; XmlDocument document = new XmlDocument(); var xmlFormed = _xmlDocument.Replace("<", "<").Replace(""", "\"").Replace(">", ">"); //throw new Exception(xmlFormed); document.LoadXml(xmlFormed); XmlNodeList nodes; try { nodes = document.SelectNodes("//methodCall/params/param/value/struct/member"); if (nodes.Count > 0) { message = new UssdRequestMessage(); foreach (XmlNode node in nodes) { XmlDocument nodedoc = new XmlDocument(); string modif = "<modified>" + node.InnerXml + "</modified>"; nodedoc.LoadXml(modif); var resultName = nodedoc.SelectSingleNode("modified/name").InnerText; var resultValue = nodedoc.SelectSingleNode("modified/value").InnerText; PropertyInfo prop = message.GetType().GetProperty(resultName); if (prop != null) { var val = Convert.ChangeType(resultValue, prop.PropertyType); prop.SetValue(message, val, null); } } } } catch (Exception ex) { } return(message); }
public bool SaveRequest(UssdRequestMessage _request) { try { var request=new Request() { TransactionId = _request.TransactionId, MSISDN = _request.MSISDN, TransactionTime = DateTime.Now, USSDRequestString = _request.USSDRequestString, USSDServiceCode = _request.USSDServiceCode, Response = _request.response, ChargingFlag = _request.ChargingFlag, ChargeCode = _request.ChargeCode }; _context.Request.Add(request); _context.SaveChanges(); return true; } catch { return false; } }
public string WriteObjectToCsv(UssdRequestMessage request) { return(request.TransactionId + "," + request.TransactionTime.ToString() + "," + request.MSISDN + "," + request.USSDServiceCode + "," + request.USSDRequestString + "," + request.response + "," + request.ChargeCode + "," + request.ChargingFlag); }
public string WriteObjectToCsv(UssdRequestMessage request) { return request.TransactionId+","+request.TransactionTime.ToString()+","+request.MSISDN+","+request.USSDServiceCode+","+request.USSDRequestString+","+request.response+","+request.ChargeCode+","+request.ChargingFlag; }
public UssdResponseMessage GetResponse(UssdRequestMessage request) { new Helper().SaveRequest(request);//Make it async string message = request.USSDRequestString.Trim(); string menuItems = ""; var response = new UssdResponseMessage(); if (!request.response && "*" + request.USSDServiceCode + "#" == message) { menuItems = new Review().SelectService(); new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.ROOT.ToString(), MenuId = 0, LoggedMenu = 0 }); response = new UssdResponseMessage { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "request", USSDResponseString = menuItems }; } else if (request.response) { //The user was on some other state, check state, check menu and process response var lastStateObj = new Logger().LastState(request.TransactionId); var lastState = lastStateObj.State.TrimEnd(' '); var respon = request.USSDRequestString; try { if (lastState == State.ROOT.ToString()) { menuItems = new Review().MainMenu(Convert.ToInt32(respon)); new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.TRUNK.ToString(), MenuId = 0, LoggedMenu = 0 }); response = new UssdResponseMessage { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "request", USSDResponseString = menuItems }; } else if (lastState == State.TRUNK.ToString()) { var review = new Review(); int id = Convert.ToInt32(respon); var method = review.GetMethodForMenu(id); var methodInfo = typeof(Review).GetMethod(method); menuItems = methodInfo.Invoke(review, new object[] { }).ToString(); new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.BRANCH.ToString(), MenuId = id, LoggedMenu = 0 }); response = new UssdResponseMessage { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "request", USSDResponseString = menuItems }; } else if (lastState == State.BRANCH.ToString()) { #region Branch int selected = Convert.ToInt32(respon); var review = new Review(); switch (lastStateObj.MenuId) { case 1://the response is a place from top ten var serviceProvider = review.TopPlaces(10)[selected - 1]; new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.STEM.ToString(), MenuId = serviceProvider.Id, LoggedMenu = 1 }); menuItems = review.ProceedWithOption() + serviceProvider.OrganizationName; response = new UssdResponseMessage { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "request", USSDResponseString = menuItems }; break; case 2://the response is an event var eventt = review.IqTodaysEvents()[selected - 1]; new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.LEAF.ToString(), MenuId = eventt.Id, LoggedMenu = 2 }); menuItems = "Today at " + eventt.ServiceProvider.OrganizationName + ":\n Located: " + eventt.ServiceProvider.Address.Details + "\n Details: " + eventt.Details + ", " + eventt.ServiceProvider.Details; response = new UssdResponseMessage { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "end", USSDResponseString = menuItems }; break; case 3://the response is a category var category = new Helper().GetCategories()[selected - 1]; new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.STEM.ToString(), MenuId = category.Id, LoggedMenu = 3 }); menuItems = review.ServiceProvidersInCategory(category.Id); response = new UssdResponseMessage { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "request", USSDResponseString = menuItems }; break; case 4://the response is a service var service = new Helper().GetServices()[selected - 1]; new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.STEM.ToString(), MenuId = service.Id, LoggedMenu = 4 }); menuItems = review.ServiceProviderByService(service.Id); response = new UssdResponseMessage { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "request", USSDResponseString = menuItems }; break; case 5://the response is a region/from address var region = new Helper().GetRegions()[selected - 1]; var address = new Helper().GetAddressByRegion(region); new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.STEM.ToString(), MenuId = address.Id, LoggedMenu = 5 }); menuItems = review.GetServiceProviderByRegion(region); response = new UssdResponseMessage { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "request", USSDResponseString = menuItems }; break; default://invalid selection menuItems = "Invalid choice. Please select only from the menu."; response = new UssdResponseMessage() { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "end", USSDResponseString = menuItems }; break; } #endregion } else if (lastState == State.STEM.ToString()) { int selected = Convert.ToInt32(respon); var review = new Review(); var serviceProvider = new ServiceProvider(); switch (lastStateObj.LoggedMenu) { case 1://I have service provider #region first line switch (selected) { case 1://Receive rating for the service provider new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.LEAF.ToString(), MenuId = lastStateObj.MenuId, LoggedMenu = 10 }); menuItems = review.GetRatings(); response = new UssdResponseMessage() { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "request", USSDResponseString = menuItems }; break; case 2://Receive phone number of a friend--specify format only to 0911734365 new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.LEAF.ToString(), MenuId = lastStateObj.MenuId, LoggedMenu = 11 }); menuItems = "Please put the phone number of your friend in the format '09########'"; response = new UssdResponseMessage() { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "request", USSDResponseString = menuItems }; break; case 3://Show events and end new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.LEAF.ToString(), MenuId = 0, LoggedMenu = 0 }); menuItems = review.TodaysEventsAt((int)lastStateObj.MenuId); response = new UssdResponseMessage() { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "end", USSDResponseString = menuItems }; break; case 4://display location and end new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.LEAF.ToString(), MenuId = 0, LoggedMenu = 0 }); menuItems = review.DetailServiceProvider((int)lastStateObj.MenuId); response = new UssdResponseMessage() { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "end", USSDResponseString = menuItems }; break; default://Show error menuItems = "Invalid choice. Please select only from the menu."; response = new UssdResponseMessage() { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "end", USSDResponseString = menuItems }; break; } #endregion break; //case 2://I have event but this can't happen //break; case 3://I have category, log service provider to follow NO1 serviceProvider = review.ServiceProvidersByCategory((int)lastStateObj.MenuId)[selected - 1]; new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.STEM.ToString(), MenuId = serviceProvider.Id, LoggedMenu = 30 }); menuItems = review.ProceedWithOption() + serviceProvider.OrganizationName; response = new UssdResponseMessage() { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "end", USSDResponseString = menuItems }; break; case 4://I have service, log service provider to follow NO1 serviceProvider = new Helper().ServiceProviderWithService((int)lastStateObj.MenuId)[selected - 1]; new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.STEM.ToString(), MenuId = serviceProvider.Id, LoggedMenu = 30 }); menuItems = review.ProceedWithOption() + serviceProvider.OrganizationName; response = new UssdResponseMessage() { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "end", USSDResponseString = menuItems }; break; case 5://I have address, log service provider to follow NO1 serviceProvider = review.ServiceProvidersIn(lastStateObj.MenuId)[selected - 1]; new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.STEM.ToString(), MenuId = serviceProvider.Id, LoggedMenu = 30 }); menuItems = review.ProceedWithOption() + serviceProvider.OrganizationName; response = new UssdResponseMessage() { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "end", USSDResponseString = menuItems }; break; case 30://coming back from 3,4 and 5 #region final line switch (selected) { case 1://Receive rating for the service provider new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.LEAF.ToString(), MenuId = lastStateObj.MenuId, LoggedMenu = 10 }); menuItems = review.GetRatings(); response = new UssdResponseMessage() { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "request", USSDResponseString = menuItems }; break; case 2://Receive phone number of a friend--specify format only to 0911734365 new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.LEAF.ToString(), MenuId = lastStateObj.MenuId, LoggedMenu = 11 }); menuItems = "Please put the phone number of your friend in the format '09########'"; response = new UssdResponseMessage() { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "request", USSDResponseString = menuItems }; break; case 3://Show events and end new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.LEAF.ToString(), MenuId = 0, LoggedMenu = 0 }); menuItems = review.TodaysEventsAt((int)lastStateObj.MenuId); response = new UssdResponseMessage() { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "end", USSDResponseString = menuItems }; break; case 4://display location and end new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.LEAF.ToString(), MenuId = 0, LoggedMenu = 0 }); menuItems = review.DetailServiceProvider((int)lastStateObj.MenuId); response = new UssdResponseMessage() { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "end", USSDResponseString = menuItems }; break; default://Show error menuItems = "Invalid choice. Please select only from the menu."; response = new UssdResponseMessage() { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "end", USSDResponseString = menuItems }; break; } #endregion break; default: menuItems = "Invalid choice. Please select only from the menu."; response = new UssdResponseMessage() { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "end", USSDResponseString = menuItems }; break; } } else if (lastState == State.LEAF.ToString()) { var review = new Review(); var serviceProvider = new ServiceProvider(); switch (lastStateObj.LoggedMenu) { case 10://rating is coming int selected = Convert.ToInt32(respon); new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.LEAF.ToString(), MenuId = 0, LoggedMenu = 0 }); menuItems = review.SaveRating(selected, (int)lastStateObj.MenuId); response = new UssdResponseMessage() { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "end", USSDResponseString = menuItems }; break; case 11://phone number is coming new Logger().Log(new TransactionLog() { TransactionId = request.TransactionId, State = State.LEAF.ToString(), MenuId = 0, LoggedMenu = 0 }); menuItems = review.RecommendToFriend(request.MSISDN, respon, (int)lastStateObj.MenuId); response = new UssdResponseMessage() { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "end", USSDResponseString = menuItems }; break; default: menuItems = "Invalid choice. Please select only from the menu."; response = new UssdResponseMessage() { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "end", USSDResponseString = menuItems }; break; } } } catch { menuItems = "Invalid choice. Please select only from the menu."; response = new UssdResponseMessage() { TransactionId = request.TransactionId, TransactionTime = DateTime.UtcNow.ToString("o"), action = "end", USSDResponseString = menuItems }; } } new Helper().SaveResponse(response);//Make it async return response; }
public UssdRequestMessage RequestFromJson(string requestJson) { var request = new UssdRequestMessage(); var values = requestJson.Replace("{", "").Replace("}", ""); var valueArr = values.Split(new char[] { ',' }); var serializer = new JavaScriptSerializer(); requestJson = requestJson.Replace("\\", "").Trim(new char[]{'"','\\'}); request = serializer.Deserialize<UssdRequestMessage>(requestJson); //var request1 = new UssdRequestMessage() { TransactionId = PrepareValue(valueArr[1]), MSISDN = PrepareValue(valueArr[2]), TransactionTime = PrepareValue(valueArr[3]), response = Convert.ToBoolean(PrepareValue(valueArr[4])), USSDServiceCode = PrepareValue(valueArr[5]), USSDRequestString = PrepareValue(valueArr[6]) }; return request; }