Exemplo n.º 1
0
 /*
  * Logger thread
  */
 public void LoggerThreadRun()
 {
     while (true)
     {
         try
         {
             String value = (String)loggerQueue.Dequeue();
             loggerEmitter.Send(value, Encoding.UTF8, SendRecvOpt.NONE);
             logger.Debug("Message is sent for logging");
             Thread.Sleep(1);
             if (messagingFinished && loggerQueue.Count == 0)
             {
                 loggerEmitter.Send(FINISH_COMMAND, Encoding.UTF8, SendRecvOpt.NONE);
                 return;
             }
         }
         catch (System.Exception e)
         {
             //disables logging type messaging
             DB_LOGGING = false;
             loggerQueue.Clear();
             logger.Error(e);
             IGNORE_QUEUE_OVERFLOW = ON;
             return;
         }
     }
 }
Exemplo n.º 2
0
 /*
  * Activemq messaging thread
  */
 public void ActiveMQBrokerThreadRun()
 {
     while (true)
     {
         try
         {
             String value = (String)brokerQueue.Dequeue();
             //activemqSender.Send(value);
             logger.Debug("Message is sent with activemq");
             Thread.Sleep(1);
             if (messagingFinished && brokerQueue.Count == 0)
             {
                 activeMQconnection.Close();
                 return;
             }
         }
         catch (System.Exception e)
         {
             //disables broker type messaging
             BROKER = NONE;
             logger.Error(e);
             brokerQueue.Clear();
             activeMQconnection.Close();
             return;
         }
     }
 }
Exemplo n.º 3
0
 public String getMessage()
 {
     try
     {
         if (BLOCKING_QUEUE || incomingMessageQueue.Count > 0)
         {
             String message = incomingMessageQueue.Dequeue();
             Thread.Sleep(1);
             return(message);
         }
     }
     catch (System.Exception e)
     {
         logger.Error(e.ToString());
     }
     return(null);
 }
Exemplo n.º 4
0
        /*
         * Reads a message file
         */
        private String readOutGoingMessageFile()
        {
            String       fileName = (String)fileQueue.Peek();
            StreamReader file     = new StreamReader(outFileStorageAddress + "\\" + fileName);
            String       content  = file.ReadToEnd();

            file.Close();
            System.IO.File.Delete(outFileStorageAddress + "\\" + fileName);
            fileQueue.Dequeue();
            return(content);
        }
Exemplo n.º 5
0
        /*
         * Sends messages to consumers
         *
         */
        public void ZeromqSendThreadRun()
        {
            logger.Debug("messaging type: " + MESSAGING_TYPE);
            double messageNum = 0;
            bool   wait       = false;

            switch (MESSAGING_TYPE)
            {
            case PIPELINE:
                while (!messagingFinished)
                {
                    try
                    {
                        //When a wait command is received, waits until the continue message
                        byte[] command = lbReceiver.Recv(SendRecvOpt.NOBLOCK);
                        if (command != null)
                        {
                            string commandString = System.Text.Encoding.UTF8.GetString(command);
                            if (commandString.StartsWith(WAIT_COMMAND))
                            {
                                int clientNum = Convert.ToInt32(commandString.Split(' ')[1]);
                                logger.Debug(ID + "wait message is received from : " + clientNum);
                                lbSet.Add(clientNum);
                            }
                            else if (commandString.StartsWith(CONTINUE_COMMAND))
                            {
                                int clientNum = Convert.ToInt32(commandString.Split(' ')[1]);
                                lbSet.Remove(clientNum);
                                logger.Debug(ID + "continue message is received from : " + clientNum);
                            }
                            if (lbSet.Count * ratio >= ID)
                            {
                                wait = true;
                            }
                            else
                            {
                                wait = false;
                            }
                        }
                        //Gets message from the queue added by the WP3
                        if (outgoingMessageQueue.Count > 0 && wait == false)
                        {
                            String value = (String)outgoingMessageQueue.Dequeue();
                            //Sends the message
                            sender.Send(value, Encoding.UTF8, SendRecvOpt.NONE);
                            logger.Debug("message is sent over network: " + messageNum++);
                            //if enabled, send a copy to DB_logging component
                            if (DB_LOGGING == true)
                            {
                                loggerQueue.Enqueue(value);
                            }
                        }
                        else
                        {
                            logger.Debug(ID + "wait mode, size: " + lbSet.Count);
                            Thread.Sleep(10);
                        }
                        //Terminates the thread if finish message is retrived from WP3
                        //if (messagingFinished)
                        //{
                        //    sender.Send(FINISH_COMMAND, Encoding.UTF8, SendRecvOpt.NONE);
                        //    logger.Debug("Finish command is received");
                        //    return;
                        //}
                    }
                    catch (ThreadStateException e)
                    {
                        logger.Error(e);
                    }
                    catch (System.Exception e)
                    {
                        logger.Error(e);
                    }
                }
                while (outgoingMessageQueue.Count > 0)
                {
                    writeOutgoingMessageToFile(outgoingMessageQueue.Dequeue());
                }
                break;

            case REQ_REP:
                while (!messagingFinished)
                {
                    try
                    {
                        //Waits request message from WP4
                        String message = sender.Recv(Encoding.UTF8);
                        while (!message.Equals(MESSAGE_REQUEST))
                        {
                            message = sender.Recv(Encoding.UTF8);
                        }
                        logger.Debug("Received request: {0}" + message);
                        // Sends WP3 message to WP4
                        if (outgoingMessageQueue.Count > 0)
                        {
                            String value = (String)outgoingMessageQueue.Dequeue();
                            sender.Send(value, Encoding.UTF8);
                            logger.Debug("message is sent over network: " + messageNum++);
                            //if enabled, send a copy to DB_logging component
                            if (DB_LOGGING == true)
                            {
                                loggerQueue.Enqueue(value);
                            }
                        }
                    }
                    catch (ThreadStateException e)
                    {
                        logger.Error(e);
                    }
                    catch (System.Exception e)
                    {
                        logger.Error(e);
                        if (outgoingMessageQueue.Count > 0)
                        {
                            String value = (String)outgoingMessageQueue.Dequeue();
                            sender.Send(value, Encoding.UTF8);
                            logger.Debug("message is sent over network: " + messageNum++);
                            //if enabled, send a copy to DB_logging component
                            if (DB_LOGGING == true)
                            {
                                loggerQueue.Enqueue(value);
                            }
                        }
                    }
                }
                while (outgoingMessageQueue.Count > 0)
                {
                    writeOutgoingMessageToFile(outgoingMessageQueue.Dequeue());
                }
                break;
            }
        }
Exemplo n.º 6
0
        /*
         * Messaging thread function handles communication between WP4
         *
         */
        public void ZeromqThreadRun()
        {
            logger.Info("messaging type: " + MESSAGING_TYPE);
            double messageNum = 0;

            switch (MESSAGING_TYPE)
            {
            case PIPELINE:
                while (true)
                {
                    try
                    {
                        //When a wait command is received, waits until the continue message
                        byte[] command = zeromqWP4Subscriber.Recv(SendRecvOpt.NOBLOCK);
                        if (command != null)
                        {
                            string commandString = System.Text.Encoding.UTF8.GetString(command);
                            if (commandString.Equals(WAIT_COMMAND))
                            {
                                logger.Info("wait message is received: ");
                                Thread.Sleep(1);
                                String continueMessage = "";
                                while (!continueMessage.Equals(CONTINUE_COMMAND))
                                {
                                    continueMessage = zeromqWP4Subscriber.Recv(Encoding.UTF8);
                                    logger.Info("continue message is received: " + continueMessage);
                                }
                            }
                        }
                        //Gets message from the queue added by the WP3
                        if (zeromqQueue.Count > 0)
                        {
                            String value = (String)zeromqQueue.Dequeue();
                            //Sends the message
                            zeromqSender.Send(value, Encoding.UTF8, SendRecvOpt.NONE);
                            logger.Debug("message is sent over network: " + messageNum++);
                            //if enabled, send a copy to DB_logging component
                            if (DB_LOGGING == true)
                            {
                                loggerQueue.Enqueue(value);
                            }
                        }
                        //Terminates the thread if finish message is retrived from WP3
                        if (messagingFinished && zeromqQueue.Count == 0 && fileQueue.Count == 0 && brokerQueue.Count == 0 && loggerQueue.Count == 0)
                        {
                            zeromqSender.Send(FINISH_COMMAND, Encoding.UTF8, SendRecvOpt.NONE);
                            logger.Info("Finish command is received");
                            return;
                        }
                    }
                    catch (ThreadStateException e)
                    {
                        logger.Error(e);
                    }
                    catch (System.Exception e)
                    {
                        logger.Error(e);
                    }
                }

            case REQ_REP:
                while (true)
                {
                    try
                    {
                        //Waits request message from WP4
                        String message = zeromqSender.Recv(Encoding.UTF8);
                        while (!message.Equals(MESSAGE_REQUEST))
                        {
                            message = zeromqSender.Recv(Encoding.UTF8);
                        }
                        logger.Debug("Received request: {0}" + message);
                        // Sends WP3 message to WP4
                        if (zeromqQueue.Count > 0)
                        {
                            String value = (String)zeromqQueue.Dequeue();
                            zeromqSender.Send(value, Encoding.UTF8);
                            logger.Debug("message is sent over network: " + messageNum++);
                            //if enabled, send a copy to DB_logging component
                            if (DB_LOGGING == true)
                            {
                                loggerQueue.Enqueue(value);
                            }
                        }
                        //Terminates the thread if finish message is retrived from WP3
                        if (messagingFinished && zeromqQueue.Count == 0 && fileQueue.Count == 0 && brokerQueue.Count == 0 && loggerQueue.Count == 0)
                        {
                            zeromqSender.Send(FINISH_COMMAND, Encoding.UTF8, SendRecvOpt.NONE);
                            logger.Info("Finish command is received");
                            return;
                        }
                    }
                    catch (ThreadStateException e)
                    {
                        logger.Error(e);
                    }
                    catch (System.Exception e)
                    {
                        logger.Error(e);
                    }
                }
            }
        }