Esempio n. 1
0
        /// <summary>
        /// Method of backgroundExecutionThread. It will Loop until the end of main Thread.
        /// This method is going to read the MessagesActionQueue and do associated action.
        /// In case of JsonRPC message, it will be pass to a MessageHandler.
        /// In case of an action, it will execute it.
        /// </summary>
        /// <param name="messageHandler"></param>
        /// <param name="typeCobolServer"></param>
        static void MessageHandler(IMessageHandler messageHandler, TypeCobolServer typeCobolServer)
        {
            while (true)
            {
                Thread.Sleep(1); //To preserve processor use

                MessageActionWrapper messageActionWrapper = null;
                lock (MessagesActionQueue)
                {
                    if (MessagesActionQueue.Any())
                    {
                        messageActionWrapper = MessagesActionQueue.Dequeue(); //Pop out message from queue
                    }
                }
                if (messageActionWrapper == null)
                {
                    continue;
                }

                if (messageActionWrapper.MessageKind == MessageKind.JSonMessage)
                {
                    messageHandler.HandleMessage(messageActionWrapper.Message, messageActionWrapper.MessageServer); //Give this mesage to the real handler
                }
                else if (messageActionWrapper.MessageKind == MessageKind.Action)
                {
                    try
                    {
                        messageActionWrapper.Action(); //Execute queued action
                    }
                    catch (Exception e)
                    {
                        typeCobolServer.NotifyException(e);
                    }
                }
            }
        }