protected override void OnDataReceived(Byte[] receiveData) { MtnUSSDTCPPDU pdu = null; try { pdu = MtnUSSDTCPPDU.FromXML(Encoding.ASCII.GetString(receiveData)); } catch (Exception ex) { LogManager.LogError("XML Invalid: " + ex.Message); return; } lastActivity = DateTime.Now; try { if (pdu != null) { if (pdu.Pdu == MtnUSSDTCPPDU.PDUTypes.CTRL.ToString()) { LogManager.LogStatus(" ** <-- ping returned ** "); //Console.WriteLine("--> ping sent"); } else { LogManager.LogStatus("Received " + Encoding.ASCII.GetString(receiveData)); String requestData = Encoding.ASCII.GetString(receiveData); USSDHandlerRequestType.RequestTypes requestType = USSDHandlerRequestType.RequestTypes.TCP; IUSSDHandler ussdHandler = USSDHandlerFactory.GetHandler(mobileNetwork, requestData, requestType); Boolean isTimeout = false; Boolean isInvalid = false; ussdHandler.Initialize(requestData, requestType, out isTimeout, out isInvalid); if (!isTimeout) { LogManager.LogStatus("Handler {0} found for request", ussdHandler.HandlerID); String responseData = ussdHandler.ProcessRequest(requestData); SendResponse(pdu, responseData); } else { LogManager.LogStatus("Timout request for handler {0} received", ussdHandler.HandlerID); } } } else { SendResponse(pdu, "Invalid/Empty Request"); } } catch (Exception ex) { LogManager.LogError(ex); SendResponse(pdu, "Invalid request. Please retry."); } }
protected void SendResponse(MtnUSSDTCPPDU pdu, String responseText) { MtnUSSDTCPPDU.PDUTypes pduReturnType = pdu.FindResponseType((MtnUSSDTCPPDU.PDUTypes)Enum.Parse(typeof(MtnUSSDTCPPDU.PDUTypes), pdu.Pdu, true), false); MtnUSSDTCPPDU responsePDU = new MtnUSSDTCPPDU(); responsePDU.Pdu = pduReturnType.ToString(); responsePDU.Cookie = cookie; responsePDU.Data = responseText; responsePDU.MSISDN = pdu.MSISDN; responsePDU.RequestID = pdu.RequestID; responsePDU.SessionID = pdu.SessionID; responsePDU.Status = "0"; responsePDU.Tariff = pdu.Tariff; responsePDU.Encoding = pdu.Encoding; LogManager.LogStatus("Response: " + responsePDU.ToXML()); Send(responsePDU.ToXML()); }
protected void DoPing(object sender, EventArgs e) { if (DateTime.Now.Subtract(lastActivity).TotalMilliseconds < this.ussdTcpListenerConfigurationSection.PingInterval) { return; } MtnUSSDTCPPDU pdu = new MtnUSSDTCPPDU(); pdu.Pdu = MtnUSSDTCPPDU.PDUTypes.CTRL.ToString(); pdu.Data = DateTime.Now.ToString(); try { //Console.Write("."); LogManager.LogStatus(" ** --> ping ** "); //LogManager.LogStatus("PDU: " + pdu.ToXML()); Send(pdu.ToXML()); } catch (USSDTcpSendTimeoutException te) { LogManager.LogError(te); } }