public CResultAErreur SendMessage ( CMessageSMSPourEnvoi message ) { CResultAErreur result = CResultAErreur.True; string[] strMessages = message.GetSMSStrings(); if (strMessages.Length == 0) { return(result); } SerialPort port = new SerialPort(); port.PortName = m_parametre.PortName; port.BaudRate = m_parametre.BaudRate; port.Parity = m_parametre.Parity; port.DataBits = m_parametre.DataBits; port.StopBits = m_parametre.StopBits; port.Handshake = m_parametre.Handshake; port.DtrEnable = m_parametre.DtrEnable; port.RtsEnable = m_parametre.RtsEnable; port.NewLine = m_parametre.NewLine; port.WriteTimeout = m_parametre.WriteTimeout; try { port.Open(); } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); return(result); } try { //Vide le buffer string[] strLines = ReadLines(port, m_parametre.TimeOut); if (m_parametre.Debug) { Console.WriteLine("Init-------"); foreach (string strLine in strLines) { Console.Write(strLine); } } for (int n = 0; n < 10; n++) { port.WriteLine("\u001A"); } if (m_parametre.Debug) { Console.Write("Ecrit ATZ0..."); } port.WriteLine("ATZ0"); if (m_parametre.Debug) { Console.WriteLine("OK"); } //Pas d'écho strLines = WriteAndReadReponse(port, "ATE1", m_parametre.TimeOut); if (GetErrorLine(strLines) != null) { result.EmpileErreur(GetErrorLine(strLines)); return(result); } //Format SMS texte strLines = WriteAndReadReponse(port, "AT+CMGF=1", m_parametre.TimeOut); if (GetErrorLine(strLines) != null) { result.EmpileErreur(GetErrorLine(strLines)); return(result); } //NUMERO du centre d'appel strLines = WriteAndReadReponse(port, "AT+CSCA=\"" + m_parametre.SmsServiceNumber + "\"", m_parametre.TimeOut); if (GetErrorLine(strLines) != null) { result.EmpileErreur(GetErrorLine(strLines)); return(result); } foreach (string strMessage in strMessages) { List <string> lstDestinataires = new List <string>(); if (m_parametre.LoopOnRecipients) { foreach (string strDestinataire in message.NumerosDestinataires) { if (strDestinataire.Trim().Length > 0) { lstDestinataires.Add(strDestinataire); } } } else { StringBuilder bl = new StringBuilder(); foreach (string strDestinataire in message.NumerosDestinataires) { if (strDestinataire.Trim().Length > 0) { bl.Append(strDestinataire); bl.Append(';'); } } if (bl.Length > 0) { bl.Remove(bl.Length - 1, 1); lstDestinataires.Add(bl.ToString()); } } foreach (string strDestinataire in lstDestinataires) { if (strDestinataire.Trim() != "") { port.WriteLine("AT+CMGS=\"" + strDestinataire + "\""); System.Threading.Thread.Sleep(m_parametre.WaitBeforeRead); //Attend le prompt string strPrompt = ReadLineIfExists(port, 500); DateTime dtWaitPrompt = DateTime.Now; while ((strPrompt == null || !strPrompt.Contains("CMGS")) && ((TimeSpan)(DateTime.Now - dtWaitPrompt)).TotalMilliseconds < m_parametre.TimeOut * 3) { strPrompt = ReadLineIfExists(port, 500); System.Threading.Thread.Sleep(500); } if (strPrompt == null || !strPrompt.Contains("CMGS")) { port.WriteLine("\u001A"); result.EmpileErreur("Wait prompt timeout"); return(result); } strLines = strMessage.Split('\r'); for (int nLigne = 0; nLigne < strLines.Length; nLigne++) { port.Write(strLines[nLigne]); if (nLigne < strLines.Length - 1) { port.Write(System.Environment.NewLine); } System.Threading.Thread.Sleep(m_parametre.WaitBeforeRead); } port.WriteLine("\u001A"); System.Threading.Thread.Sleep(m_parametre.WaitBeforeRead); if (m_parametre.Debug) { Console.WriteLine("APRES AT CMGS-------"); } strLines = ReadLines(port, 10000); if (GetErrorLine(strLines) != null) { result.EmpileErreur(GetErrorLine(strLines)); return(result); } if (m_parametre.Debug) { foreach (string strLine in strLines) { Console.Write(strLine); } } } } } } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); } finally { port.Close(); port.Dispose(); } return(result); }
private static void OnSendSMS(object state) { if (m_bTraitementEnCours) { return; } m_bTraitementEnCours = true; try { System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Lowest; CResultAErreur result; if (m_sessionRecherche == null || !m_sessionRecherche.IsConnected) { m_sessionRecherche = CSessionClient.CreateInstance(); result = m_sessionRecherche.OpenSession(new CAuthentificationSessionServer(), I.T("SMS SERVICE|20159"), ETypeApplicationCliente.Service); if (!result) { C2iEventLog.WriteErreur(I.T("Session Opening error for SMS Service|20160")); return; } } try { CFiltreData filtre = new CFiltreData(CMessageSMS.c_champNextSendDate + " < @1 and " + CMessageSMS.c_champDateEnvoi + " is null and " + CMessageSMS.c_champNbEssais + " < 10", DateTime.Now ); if (new CMessageSMSServeur(m_sessionRecherche.IdSession).CountRecords( CMessageSMS.c_nomTable, filtre) > 0) { CSessionClient sessionTravail = new CSessionProcessServeurSuivi(); result = sessionTravail.OpenSession(new CAuthentificationSessionProcess(), I.T("Send SMS|20161"), ETypeApplicationCliente.Service); if (!result) { C2iEventLog.WriteErreur(I.T("Working session openning error for SMS send|20162")); return; } try { using (CContexteDonnee contexteTravail = new CContexteDonnee(sessionTravail.IdSession, true, false)) { CMessageSMSServeur serveur = new CMessageSMSServeur(sessionTravail.IdSession); CListeObjetsDonnees liste = new CListeObjetsDonnees(contexteTravail, typeof(CMessageSMS)); liste.Filtre = filtre; ArrayList lstLock = liste.ToArrayList(); foreach (CMessageSMS message in lstLock) { CMessageSMSPourEnvoi toSend = new CMessageSMSPourEnvoi(message.Destinataires, message.Texte); result = toSend.Send(sessionTravail.IdSession); message.BeginEdit(); if (!result) { message.NextSendDate = DateTime.Now.AddMinutes(3); message.NbEssais++; message.LastErreur = result.Erreur.ToString(); } else { message.DateEnvoi = DateTime.Now; message.LastErreur = ""; } message.CommitEdit(); result.SetTrue(); } } } catch (Exception e) { C2iEventLog.WriteErreur(I.T("Error while sendind SMS : @1|20163", e.ToString())); } finally { try { sessionTravail.CloseSession(); } catch { } } } } catch (Exception e) { C2iEventLog.WriteErreur(I.T("Error while sendind SMS : @1|20163", e.ToString())); } } catch (Exception e) { { C2iEventLog.WriteErreur(I.T("Error while sendind SMS : @1|20163", e.ToString())); } } finally { m_bTraitementEnCours = false; } }