Beispiel #1
0
        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);
        }
Beispiel #2
0
        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;
            }
        }