예제 #1
0
파일: Program.cs 프로젝트: gyagapen/Synox
        /// <summary>
        /// Point d'entrée principal de l'application.
        /// </summary>
        static void Main(string[] args)
        {
            //si mode debug on passe un argument a l'application
#if DEBUG
            args = new string[1] {
                "/cons"
            };
#endif
            if (args.Length > 0) //si un argument est passé à l'application
            {
                //on lance l'application en mode console
                ServiceManager serverSync = new ServiceManager();
                serverSync.Start();


                //boucle qui permet de passer des commandes a l'application pendant l'execution
                #region Attend une saisie de la commande 'quit' pour sortir
                string quit = string.Empty;
                Console.Title = "Service SMS";

                while (string.IsNullOrEmpty(quit) || !quit.Equals("quit"))
                {
                    Console.WriteLine("///////////////////////////////");
                    Console.WriteLine("taper la commande 'quit' pour quitter l'application\r\n");
                    quit = Console.ReadLine();
                    switch (quit.ToLower())
                    {
                    case "clr":
                    case "clear":
                        Console.Clear();
                        break;

                    case "test":

                        modemSMS modSMS = new modemSMS("COM11");
                        modSMS.connectToModem();
                        //modSMS.sendTramePDU("0001000b913376650111F800f6002930000000000066010b000001001b04343731314e85b65950683b590831323334353637380000126701");
                        modSMS.sendTramePDU("0021000A816057161081000015F4F29C0E0A8FC7F57919242F8FCB707AFAED06");
                        modSMS.readDeliveryReport();
                        modSMS.disconnectToModem();
                        break;

                    case "read":
                        modemSMS modSMSRead = new modemSMS("COM11");
                        modSMSRead.connectToModem();
                        modSMSRead.readPDUMessage();
                        modSMSRead.disconnectToModem();
                        break;


                    case "test vp":
                        modemSMS modSMSVP = new modemSMS("COM11");

                        TimeSpan tim = new TimeSpan(1, 0, 0, 0);

                        int intValue = modSMSVP.calculValidityPeriod(tim);
                        Console.WriteLine("INT VALUE : " + intValue);

                        TimeSpan tim2 = modSMSVP.decoderValidityPeriod(intValue);

                        Console.WriteLine("Redecodage : " + tim2.Days + ", " + tim2.Hours + ", " + tim2.Minutes);

                        break;
                    }
                    Console.WriteLine(string.Empty);
                }
                #endregion

                serverSync.Stop();
                serverSync.Dispose();
            }
            else //on lance l'application en tant que service windows
            {
                //on instancie le service
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[]
                {
                    new ServiceSMS()
                };

                //on lance le service
                ServiceBase.Run(ServicesToRun);
            }
        }
예제 #2
0
        /// <summary>
        /// methode qui communique avec le modem pour une demande d'envoi de SMS avec un message texte
        /// </summary>
        /// <param name="sms"></param>
        private void envoyerSMS(MessageEnvoi sms)
        {
            try
            {
                //on recupere le statut "ENVOYE"
                Statut statutEnvoye = (from stat in dbContext.Statut where stat.libelleStatut == "Envoye" select stat).First();

                //on recupere le booleen concernant la demande d'accuse reception
                Boolean demandeAccuse = true;         //par defaut a vrai

                if (sms.Message.accuseReception == 0) //si specifier le contraire en BD, on change la valeur
                {
                    demandeAccuse = false;
                }

                //on determine le message a envoyer
                String messageAEnvoyer = null;

                //pour sauvegarder la reference du SMS envoye
                String reference = null;

                //si message Texte est nul alors c'est une trame PDU (si non nul aussi)
                if (sms.Message.messageTexte == null && sms.Message.messagePDU != null)  //TRAME PDU
                {
                    messageAEnvoyer = sms.Message.messagePDU;
                    //on recupere la reference du message envoye
                    reference = modem.sendTramePDU(messageAEnvoyer);

                    //
                    //decodage de la trame PDU
                    //
                    SMS smsPDU;

                    smsPDU = modem.decodeSMSPDU(messageAEnvoyer); // Peut lever une exception si la trame PDU n'est pas correct

                    sms.Message.messageTexte   = smsPDU.Message;
                    sms.Message.noDestinataire = smsPDU.PhoneNumber;
                    sms.dureeValidite          = modem.calculValidityPeriod(smsPDU.ValidityPeriod);

                    //status report
                    if (smsPDU.StatusReportIndication)
                    {
                        sms.Message.accuseReception = 1;
                    }
                    else
                    {
                        sms.Message.accuseReception = 0;
                    }
                }
                //si trame PDU est nulle alors c'est un message Texte (si pas nul aussi)
                else if (sms.Message.messageTexte != null && sms.Message.messagePDU == null)
                //si trame PDU est nulle alors c'est un message Texte (si non nulle aussi)
                {
                    messageAEnvoyer = sms.Message.messageTexte;

                    //on recupere la duree de validite

                    int dureeValiditite = -1;

                    if (sms.dureeValidite.HasValue)
                    {
                        dureeValiditite = sms.dureeValidite.Value;
                    }


                    //on recupere la reference du message envoye

                    reference = modem.sendSMSPDU(sms.Message.noDestinataire, messageAEnvoyer,
                                                 demandeAccuse, sms.Message.Encodage.libelleEncodage, dureeValiditite);
                }

                //verifie s'il y a une erreur
                if (reference.Contains("ERROR"))
                {
                    //on passe le statut du sms a erreur
                    sms.Statut = (from stat in dbContext.Statut where stat.libelleStatut == "Erreur" select stat).First();
                }
                else //on sauvegarde la reference en BD
                {
                    sms.referenceEnvoi = reference;
                }


                //on sauvegarde le sms comme envoye s'il y a une reference d'envoi
                if (reference != null)
                {
                    //on complete les informations sur l'envoi des SMS
                    sms.Message.noEmetteur  = numeroModem;
                    sms.accuseReceptionRecu = 0; //pas encore recu

                    //on passe le sms en statut envoye
                    sms.Statut    = statutEnvoye;
                    sms.dateEnvoi = DateTime.Now; //date du jour
                }
                else // erreur
                {
                    //on passe le statut du sms a erreur
                    sms.Statut = (from stat in dbContext.Statut where stat.libelleStatut == "Erreur" select stat).First();
                }


                //on valide les changements dans la BD
                dbContext.SubmitChanges();
            }
            catch (ApplicationException ae)
            {
                Console.WriteLine(ae.Message);
                envoyerSMS(sms);
            }
            catch (Exception e)
            {
                sms.Statut = (from stat in dbContext.Statut where stat.libelleStatut == "Erreur" select stat).First();
                dbContext.SubmitChanges();
            }
        }
예제 #3
0
파일: Program.cs 프로젝트: gyagapen/Synox
        /// <summary>
        /// Point d'entrée principal de l'application.
        /// </summary>
        static void Main(string[] args)
        {
            //si mode debug on passe un argument a l'application
            #if DEBUG
            args = new string[1] { "/cons" };
            #endif
            if (args.Length > 0) //si un argument est passé à l'application
            {
                //on lance l'application en mode console
                ServiceManager serverSync = new ServiceManager();
                serverSync.Start();

                //boucle qui permet de passer des commandes a l'application pendant l'execution
                #region Attend une saisie de la commande 'quit' pour sortir
                string quit = string.Empty;
                Console.Title = "Service SMS";

                while (string.IsNullOrEmpty(quit) || !quit.Equals("quit"))
                {
                    Console.WriteLine("///////////////////////////////");
                    Console.WriteLine("taper la commande 'quit' pour quitter l'application\r\n");
                    quit = Console.ReadLine();
                    switch (quit.ToLower())
                    {
                        case "clr":
                        case "clear":
                            Console.Clear();
                            break;

                        case "test":

                            modemSMS modSMS = new modemSMS("COM11");
                            modSMS.connectToModem();
                            //modSMS.sendTramePDU("0001000b913376650111F800f6002930000000000066010b000001001b04343731314e85b65950683b590831323334353637380000126701");
                            modSMS.sendTramePDU("0021000A816057161081000015F4F29C0E0A8FC7F57919242F8FCB707AFAED06");
                            modSMS.readDeliveryReport();
                            modSMS.disconnectToModem();
                            break;

                        case "read":
                            modemSMS modSMSRead = new modemSMS("COM11");
                            modSMSRead.connectToModem();
                            modSMSRead.readPDUMessage();
                            modSMSRead.disconnectToModem();
                            break;

                        case "test vp":
                            modemSMS modSMSVP = new modemSMS("COM11");

                            TimeSpan tim = new TimeSpan(1, 0, 0, 0);

                            int intValue = modSMSVP.calculValidityPeriod(tim);
                            Console.WriteLine("INT VALUE : " + intValue);

                            TimeSpan tim2 = modSMSVP.decoderValidityPeriod(intValue);

                            Console.WriteLine("Redecodage : " + tim2.Days + ", " + tim2.Hours + ", " + tim2.Minutes);

                            break;
                    }
                    Console.WriteLine(string.Empty);
                }
                #endregion

                serverSync.Stop();
                serverSync.Dispose();
            }
            else //on lance l'application en tant que service windows
            {
                //on instancie le service
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[]
                {
                            new ServiceSMS()
                };

                //on lance le service
                ServiceBase.Run(ServicesToRun);
            }
        }