/// <summary> /// Objet pour creer les queue de reception /// </summary> /// <param name="context">l'appli HylaNotify</param> public RabbitMQManager(HylaNotify context) { this.Context = context; //on recupere le context de l'application Rabbit = Context.Config.items.rabbit; //recupere les donnees de rabbit QUEUE_NAME_SUBSCRIBING = context.Hostname.ToUpper() + @"\" + context.Username.ToUpper() + @"\" + "HYL" + @"\" + "ABO"; QUEUE_NAME_SYSTEM = context.Hostname.ToUpper() + @"\" + context.Username.ToUpper() + @"\" + "HYL" + @"\" + "SYS"; var factory = new ConnectionFactory() { HostName = Rabbit.host, VirtualHost = VIRTUAL_HOST }; Log.Debug("Connexion Rabbit"); try { Connection = factory.CreateConnection(); Channel = Connection.CreateModel(); } catch (Exception) { System.Threading.Thread.Sleep(10000); // 1 min avant de relancer Log.Debug("Impossible de se connecter au serveur rabbit"); Environment.Exit(1); } }
/// <summary> /// Methodes traitant les messages rabbit Abonnement ou System /// </summary> /// <param name="Context">Le context de l'application</param> /// <param name="json">le message rabbit</param> /// <param name="typeMessage">le type de message abonnement ou system</param> public static void processingMessage(HylaNotify Context, string json, string typeMessage) { switch (typeMessage) { //si c'est un message via la queue abonnement case "subscribing": processingSubscribing(json, Context); break; //si c'est un message system case "system": processingSystem(json, Context); break; } }
/// <summary> /// Traitement un message de la queue System /// </summary> /// <param name="json">le message rabbit</param> /// <param name="Context">Le context de l'application</param> public static void processingSystem(string json, HylaNotify Context) { MessageSystem msgSystem = null; bool success; try { msgSystem = JsonConvert.DeserializeObject <MessageSystem>(json); success = true; } catch (JsonReaderException) { Log.Error("Message system invalide\n" + json); success = false; } if (success) { Log.Info("Message systeme valide"); // TODO passe le message dans une methode appeler traitement_MESSAGE_SYSTEM // Execution differente dependant du type de message switch (msgSystem.type) { case "NEW_FAX_SEND": Log.Debug("Systeme: Envoi d'un nouveau fax"); // Si pas de nav renseigné on met le navigateur par default if (msgSystem.items.navigateur.Equals("") || msgSystem.items.navigateur == null) { msgSystem.items.navigateur = "chrome.exe"; } // On lance l'url dans le nav Context.LaunchNav(msgSystem.items.url, msgSystem.items.navigateur, msgSystem.items.options_nav); break; case "SERVICE_CHANGE": Log.Debug("Systeme: Changement de service"); break; } } }
/// <summary> /// Constructeur pour l'API /// </summary> /// <param name="context">l'application HylaNotify</param> public DataApi(HylaNotify context) { Context = context; }
/// <summary> /// Traitement un message de la queue abonnement /// </summary> /// <param name="json">le message rabbit</param> /// <param name="Context">Le context de l'application</param> public static void processingSubscribing(string json, HylaNotify Context) { FaxRabbit fax = null; bool success; try { fax = JsonConvert.DeserializeObject <FaxRabbit>(json); success = true; } catch (JsonReaderException) { Log.Debug("Fax invalide\n" + json); success = false; } //Si la deserialisation s'est bien passé if (success) { Log.Info("Fax valide"); //TODO passe le message dans une methode appeler traitement_MESSAGE_ABO Log.Debug("Type de fax" + fax.type.Substring(0, 2)); switch (fax.type.Substring(0, 2)) { // Si le fax est une reception case "RX": Log.Debug("fax en reception"); // Si HylaOnEr est lancé if (Context.HylaOnER != IntPtr.Zero) // TODO msgWindows { if (Context.InvokeRequired) // TODO msgWindows { //Envoie le message de mise a jour a hylaOner Context.Invoke(new MethodInvoker(delegate { // TODO msgWindows SendMessage(Context.HylaOnER, RegisterWindowMessage("Hylafax_UPDATEREC"), Context.Handle, IntPtr.Zero); })); } } //on verifie si c'est un nouveau fax if (fax.type.Equals("RX-NEW")) { Context.AfficherPopup(fax); //dans ce cas on affiche de la popup Log.Debug("Nouveau fax, affichage popup"); } break; // Si le fax est en emission case "TX": Log.Debug("fax en emission"); // Si HylaOnEr est lancé if (Context.HylaOnER != IntPtr.Zero) // TODO msgWindows { if (Context.InvokeRequired) // TODO msgWindows { //Envoie le message de mise a jour a hylaOner Context.Invoke(new MethodInvoker(delegate { // TODO msgWindows SendMessage(Context.HylaOnER, RegisterWindowMessage("Hylafax_MajEmission"), Context.Handle, IntPtr.Zero); })); } } break; } } }