public List <object> BuyOrderRequest(SmsPdu pdu) { List <object> ResultList = new List <object>(); try { if (pdu is SmsDeliverPdu) { SmsDeliverPdu bpdu = (SmsDeliverPdu)pdu; string Text = bpdu.UserDataText.ToUpper(); string SMSCode = string.Empty; string Output_CompanyShortCode = string.Empty; long Output_ShareQuantity = 0; string Output_BuyorSellOrder = string.Empty; string Output_MarketPrice = string.Empty; long Output_RegCustCode = 0; string OutPut_OrderRange = string.Empty; long OutPut_OrderID = 0; string Output_Message = bpdu.UserDataText; string Output_PhoneNumber = bpdu.OriginatingAddress; char[] delimiterChars = { ' ', ',', '.', ':', '\t', '/', ';', '.', }; string[] Word = Text.Split(delimiterChars); string[] Message = Word.Where(t => !string.IsNullOrEmpty(Convert.ToString(t))).ToArray(); Output_RegCustCode = Convert.ToInt64(objData.GetCustCodeFromPhoneNo(bpdu.OriginatingAddress)); if (Output_RegCustCode != 0) { SMSCode = SMSCode + SMSCommadCode.RegCust_Code + "-"; } else { SMSCode = SMSCode + SMSCommadCode.DefaultCode + "-"; } string CompanyShortCode = Message[0].ToUpper(); string ComShortCode = objData.GetCompanyShortCodeFromCompanyShortCode(CompanyShortCode); if (ComShortCode != "") { Output_CompanyShortCode = ComShortCode; SMSCode = SMSCode + SMSCommadCode.CompanyShortCode + "-"; } else if (ComShortCode == "") { SMSCode = SMSCode + SMSCommadCode.DefaultCode + "-"; } if (Message.Length > 2) { if (IsTextValidated(Message[1].ToString()) == true) { long Quentaty = Convert.ToInt64(Message[1]); if (Quentaty != 0) { Output_ShareQuantity = Convert.ToInt64(Quentaty); SMSCode = SMSCode + SMSCommadCode.ShareQuentity + "-"; } else if (Quentaty == 0) { SMSCode = SMSCode + SMSCommadCode.DefaultCode + "-"; } } } if (Output_ShareQuantity == 0) { SMSCode = SMSCode + SMSCommadCode.DefaultCode + "-"; } string BuyandSellOrder = "B,S"; string Order = ""; string[] BuyorSellOrder = BuyandSellOrder.Split(','); foreach (string OrderType in BuyorSellOrder) { if (Message.Contains(OrderType)) { Order = OrderType; if (Order == "B") { Output_BuyorSellOrder = "Buy"; SMSCode = SMSCode + SMSCommadCode.BuyOrder + "-"; } else if (Order == "S") { Output_BuyorSellOrder = "Sell"; SMSCode = SMSCode + SMSCommadCode.BuyOrder + "-"; } else { SMSCode = SMSCode + SMSCommadCode.DefaultCode + "-"; } } } if (Output_BuyorSellOrder == "") { SMSCode = SMSCode + SMSCommadCode.DefaultCode + "-"; } string MarketPrise = "MP"; string PriceRange = ""; if (Message.Length == 4) { PriceRange = Message[3].ToString(); if (Message.Length > 4) { string[] Input_PriceRange = null; var listtmp = new List <string>(Regex.Split(Text, @"\D+")); Input_PriceRange = listtmp.Where(t => !string.IsNullOrEmpty(Convert.ToString(t))).ToArray(); PriceRange = Input_PriceRange[1].ToString() + "-" + Input_PriceRange[2].ToString(); } if (Message.Contains(MarketPrise)) { Output_MarketPrice = "Market Price"; SMSCode = SMSCode + SMSCommadCode.MarketPrice; } else if (PriceRange != "") { Output_MarketPrice = PriceRange; SMSCode = SMSCode + SMSCommadCode.MarketPrice; } else { SMSCode = SMSCode + SMSCommadCode.DefaultCode; } } else { SMSCode = SMSCode + SMSCommadCode.DefaultCode; } OutPut_OrderID = objData.GenerateOrderID("tbl_order_place", "Order_ID"); ResultList.Add(Output_RegCustCode); ResultList.Add(Output_CompanyShortCode); ResultList.Add(Output_ShareQuantity); ResultList.Add(Output_BuyorSellOrder); ResultList.Add(Output_MarketPrice); ResultList.Add(Output_PhoneNumber); ResultList.Add(OutPut_OrderID); ResultList.Add(SMSCode); } } catch (Exception ex) { throw new Exception(ex.Message); } return(ResultList); }
private void GetAllMessagesFromAllStorage() { try { if (Gsm.IsConnected() && Gsm.IsOpen()) { DecodedShortMessage[] SimMessages = Gsm.ReadMessages(PhoneMessageStatus.All, GetMessageStorage(MessageLocation.Sim)); Gsm.DeleteMessages(DeleteScope.All, GetMessageStorage(MessageLocation.Sim)); foreach (DecodedShortMessage message in SimMessages) { SmsPdu pdu = (SmsPdu)message.Data; if (pdu is SmsDeliverPdu) { // Received message SmsDeliverPdu data = (SmsDeliverPdu)pdu; string sim_msg = data.UserDataText; DateTime sim_receive_date = data.SCTimestamp.ToDateTime(); string sim_num = data.OriginatingAddress; //BSOB.SMS sms = new BSOB.SMS(); //sms.MESSAGE = sim_msg; //sms.PHONENO = sim_num; //sms.RECEIVEDDATE = sim_receive_date; //Order(sms); bsob.SMSQueuing(sim_msg, sim_num, sim_receive_date); //insert statement here } } DecodedShortMessage[] PhoneMessages = Gsm.ReadMessages(PhoneMessageStatus.All, GetMessageStorage(MessageLocation.Phone)); Gsm.DeleteMessages(DeleteScope.All, GetMessageStorage(MessageLocation.Phone)); foreach (DecodedShortMessage message in PhoneMessages) { SmsPdu pdu = (SmsPdu)message.Data; if (pdu is SmsDeliverPdu) { // Received message SmsDeliverPdu data = (SmsDeliverPdu)pdu; string phone_msg = data.UserDataText; DateTime phone_received_date = data.SCTimestamp.ToDateTime(); string phone_num = data.OriginatingAddress; //BSOB.SMS sms = new BSOB.SMS(); //sms.MESSAGE = phone_msg; //sms.PHONENO = phone_num; //sms.RECEIVEDDATE = phone_received_date; //Order(sms); bsob.SMSQueuing(phone_msg, phone_num, phone_received_date); //insert statement here } } } } catch (Exception ex) { LogError("GetAllMessagesFromAllStorage " + ex.Source + " " + ex.Message); if (Gsm.IsConnected() && Gsm.IsOpen()) { Gsm.Close(); } } }
/// <summary> /// /// </summary> /// <returns>datatable:phone,message,date</returns> public DataTable f_getReceivedSMS() { if (!cls_Modem.p_getInstance.f_openPort()) { return(null); } string str_report = ""; try { m_semaphoreWriteSMS.WaitOne(); string strCmd = "at+cmgf=0\r"; cls_Modem.p_getInstance.f_write(strCmd); cls_Modem.p_getInstance.f_readFeedback(); strCmd = "at+cnmi=1,0,0,1,0\r"; cls_Modem.p_getInstance.f_write(strCmd); cls_Modem.p_getInstance.f_readFeedback(); strCmd = "at+cpms=\"SM\"\r"; cls_Modem.p_getInstance.f_write(strCmd); cls_Modem.p_getInstance.f_readFeedback(); strCmd = "at+cmgl=4\r"; cls_Modem.p_getInstance.f_write(strCmd); str_report = cls_Modem.p_getInstance.f_readFeedback(); m_semaphoreWriteSMS.Release(); } catch (Exception exp) { f_logReport(Enum_logState.Error, exp.Message + exp.StackTrace); m_semaphoreWriteSMS.Release(); return(null); } if (Regex.IsMatch(str_report, cls_base.PATTERN_ERROR) || str_report == cls_base.ERROR_FEEDBACK) { f_logReport(Enum_logState.Error, str_report.Replace(cls_base.NEW_LINE, "")); return(null); } str_report = str_report.Replace(cls_base.OK_FEEDBACK, ""); if (str_report == "") { return(null); } DataTable obj_receivedSMS = new DataTable(); obj_receivedSMS.Columns.Add("phone"); obj_receivedSMS.Columns.Add("message"); obj_receivedSMS.Columns.Add("date"); ///get respnces in parts /// string[] str_data = str_report.Split(new string[] { "+CMGL: ", cls_base.NEW_LINE }, StringSplitOptions.RemoveEmptyEntries); List <cls_CMGLResponse> obj_responses = new List <cls_CMGLResponse>(); for (int i = 0; i < str_data.Length; i = i + 2) { string[] obj_strResp = str_data[i].Split(new string[] { "," }, StringSplitOptions.None); obj_responses.Add(new cls_CMGLResponse { p_pdu = str_data[i + 1] , p_idx = int.Parse(obj_strResp[0]) , p_state = int.Parse(obj_strResp[1]) , p_alpha = 0 , p_lenght = int.Parse(obj_strResp[3]) }); } ///this list , contain complete smses to delete from a SIM /// List <cls_CMGLResponse> obj_deleteResponses = new List <cls_CMGLResponse>(); ///this list , catch the same smses to find that sms is complete receive or not /// List <cls_CMGLResponse> obj_tempResponses = new List <cls_CMGLResponse>(); List <SmsPdu> obj_lstPDUs = new List <SmsPdu>(); try { string str_smsText = ""; for (int i = 0; i < obj_responses.Count; i++) { str_smsText = ""; IncomingSmsPdu obj_pdu = (IncomingSmsPdu)SmsDeliverPdu.Decode(obj_responses[0].p_pdu, true); bool isComplete = false; obj_tempResponses.Add(obj_responses[i]); obj_lstPDUs.Add(obj_pdu); ///To know sms has other parts or not /// if (!SmartMessageDecoder.AreAllConcatPartsPresent(obj_lstPDUs)) { for (int j = i + 1; (j < obj_responses.Count) && !SmartMessageDecoder.AreAllConcatPartsPresent(obj_lstPDUs); j++) { obj_pdu = (SmsDeliverPdu)SmsDeliverPdu.Decode(obj_responses[j].p_pdu, true); if (SmartMessageDecoder.ArePartOfSameMessage(obj_lstPDUs[0], obj_pdu)) { obj_tempResponses.Add(obj_responses[j]); obj_lstPDUs.Add(obj_pdu); } } if (SmartMessageDecoder.AreAllConcatPartsPresent(obj_lstPDUs)) { str_smsText = SmartMessageDecoder.CombineConcatMessageText(obj_lstPDUs); isComplete = true; } } else { str_smsText = SmartMessageDecoder.CombineConcatMessageText(obj_lstPDUs); isComplete = true; } for (int k = 0; k < obj_tempResponses.Count; k++) { obj_responses.Remove(obj_tempResponses[k]); i--; } ///update DB and datagrid if (isComplete) { obj_deleteResponses.AddRange(obj_tempResponses); DataRow obj_dtRow = obj_receivedSMS.NewRow(); obj_dtRow["phone"] = ((SmsDeliverPdu)obj_lstPDUs[0]).OriginatingAddress; obj_dtRow["message"] = str_smsText; obj_dtRow["date"] = ((SmsDeliverPdu)obj_lstPDUs[0]).GetTimestamp().ToDateTime().ToString(); obj_receivedSMS.Rows.Add(obj_dtRow); f_logReport(Enum_logState.None, "Message received from \"" + ((SmsDeliverPdu)obj_lstPDUs[0]).OriginatingAddress + "\" " + DateTime.Now.ToLongTimeString()); } else { long y = DateTime.Now.Ticks - ((SmsDeliverPdu)obj_lstPDUs[0]).GetTimestamp().ToDateTime().Ticks; if (y > 1800000) { obj_deleteResponses.AddRange(obj_tempResponses); } } obj_tempResponses.Clear(); obj_lstPDUs.Clear(); } } catch (Exception exp) { f_logReport(Enum_logState.Error, exp.Message + exp.StackTrace); } ///delete sms from memory /// try { m_semaphoreWriteSMS.WaitOne(); for (int i = 0; i < obj_deleteResponses.Count; i++) { string strCmd = "at+cmgd=" + obj_deleteResponses[i].p_idx.ToString() + ",0\r"; cls_Modem.p_getInstance.f_write(strCmd); strCmd = cls_Modem.p_getInstance.f_readFeedback(); } m_semaphoreWriteSMS.Release(); } catch (Exception exp) { f_logReport(Enum_logState.Error, exp.Message + exp.StackTrace); } return(obj_receivedSMS); }
void ReceiveMessages() { Log.Add(LogLevel.Verbose, "SMS", "Reading SMS messages from device..."); Stopwatch sw = new Stopwatch(); sw.Start(); DecodedShortMessage[] msgs = _gsm.ReadMessages(PhoneMessageStatus.All, "MT"); Log.Add(LogLevel.Verbose, "SMS", String.Format("{0} messages in storage", msgs.Length)); foreach (DecodedShortMessage msg in msgs) { string from = string.Empty; string text = string.Empty; DateTime received = DateTime.Now; bool _fullMessageReceived = false; SmsDeliverPdu pdu = (SmsDeliverPdu)msg.Data; if (SmartMessageDecoder.IsPartOfConcatMessage(pdu)) { IConcatenationInfo info = SmartMessageDecoder.GetConcatenationInfo(pdu); Log.Add(LogLevel.Debug, "SMS", string.Format("Received multi-part message {0}: {1}/{2}", info.ReferenceNumber, info.CurrentNumber, info.TotalMessages)); if (_concatPdus.ContainsKey(info.ReferenceNumber)) { _concatPdus[info.ReferenceNumber].Add(pdu); } else { _concatPdus.Add(info.ReferenceNumber, new List <SmsPdu>() { pdu }); } if (SmartMessageDecoder.AreAllConcatPartsPresent(_concatPdus[info.ReferenceNumber])) { _fullMessageReceived = true; from = pdu.OriginatingAddress; received = pdu.SCTimestamp.ToDateTime(); text = SmartMessageDecoder.CombineConcatMessageText(_concatPdus[info.ReferenceNumber]); } } else { Log.Add(LogLevel.Debug, "SMS", "Received single-part SMS."); _fullMessageReceived = true; from = String.Format("{0}", pdu.OriginatingAddress); received = pdu.SCTimestamp.ToDateTime(); text = pdu.UserDataText; } if (_fullMessageReceived) { Log.Add(LogLevel.Info, "SMS", String.Format("Incoming SMS from {0}", from)); if (NormalizeNumbers) { from = NormalizeNumber(from); } if (_resolveNumbers) { from = ResolveNameByNumber(from); } Log.Add(LogLevel.Debug, "SMS", String.Format("Message from {0} at {1}: {2}", from, received, text)); if (OnMessageReceived != null) { OnMessageReceived(this, new Message(from, received, text)); } } _gsm.DeleteMessage(msg.Index, msg.Storage); } sw.Stop(); Log.Add(LogLevel.Verbose, "SMS", String.Format("Reading took {0}ms", sw.Elapsed.TotalMilliseconds)); }