/// <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;
                }
            }
        }
示例#4
0
 /// <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;
                }
            }
        }