/// <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); } }
/// <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(); } }