Beispiel #1
0
        /// <summary>
        /// Execute remote command from client to queue managment using <see cref="QueueMessage"/>.
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        internal static NetStream ExecManager(QueueMessage message)
        {
            QueueState state = QueueState.Ok;

            try
            {
                NetStream stream = null;
                switch (message.Command)
                {
                case QueueManagerCmd.Reply:
                    return(QueueEntry.GetAckStream(QueueState.Ok, QueueManagerCmd.Reply, message.Key));

                case QueueManagerCmd.QueueProperties:
                    if (_Queue == null)
                    {
                        return(null);
                    }
                    return(message.AsyncTask(() => Queue.PerformanceCounter.GetPerformanceProperties(), message.Command));


                case QueueManagerCmd.CloneItems:
                    if (_Queue == null)
                    {
                        return(null);
                    }
                    var       args = message.GetArgs();
                    CloneType ct   = EnumExtension.Parse <CloneType>(args.Get <string>("value"), CloneType.All);
                    return(message.AsyncTask(() => Queue.CloneItems(ct), message.Command));

                case QueueManagerCmd.GetAllKeys:
                    if (_Queue == null)
                    {
                        return(null);
                    }
                    return(message.AsyncTask(() => Queue.GetAllKeys(), message.Command));

                case QueueManagerCmd.GetAllKeysIcons:
                    if (_Queue == null)
                    {
                        return(null);
                    }
                    return(message.AsyncTask(() => Queue.GetAllKeysIcons(), message.Command));

                case QueueManagerCmd.StateCounterQueue:
                    return(message.AsyncTask(() => QueueStateCounter(QueueAgentType.Queue), message.Command));

                case QueueManagerCmd.StateCounterSync:
                    return(message.AsyncTask(() => QueueStateCounter(QueueAgentType.SyncQueue), message.Command));

                case QueueManagerCmd.StateCounterSession:
                    return(message.AsyncTask(() => QueueStateCounter(QueueAgentType.SessionQueue), message.Command));

                case QueueManagerCmd.StateCounterDataQueue:
                    return(message.AsyncTask(() => QueueStateCounter(QueueAgentType.DataQueue), message.Command));

                case QueueManagerCmd.GetStateCounterReport:
                    return(message.AsyncTask(() => QueueStateCounter(), message.Command));

                case QueueManagerCmd.GetPerformanceReport:
                    return(message.AsyncTask(() => PerformanceReport(), message.Command));

                case QueueManagerCmd.GetAgentPerformanceReport:
                    QueueAgentType agentType = QueuePerformanceCounter.GetAgent(message.Key);
                    return(message.AsyncTask(() => PerformanceReport(agentType), message.Command));

                case QueueManagerCmd.ResetPerformanceCounter:
                    message.AsyncTask(() => ResetPerformanceCounter());
                    return(null);

                case QueueManagerCmd.GetAllDataKeys:
                    if (_DbQueue == null)
                    {
                        return(null);
                    }
                    return(message.AsyncTask(() => DbQueue.GetAllDataKeys(), message.Command));

                case QueueManagerCmd.GetAllSyncQueueKeys:
                    if (_SyncQueue == null)
                    {
                        return(null);
                    }
                    return(message.AsyncTask(() => SyncQueue.QueueKeys().ToArray(), message.Command));

                case QueueManagerCmd.QueueLog:
                    return(message.AsyncTask(() => QueueLogger.Logger.QueueLog(), message.Command));

                case QueueManagerCmd.GetAllSessionsKeys:
                    if (_Session == null)
                    {
                        return(null);
                    }
                    return(message.AsyncTask(() => Session.GetAllSessionsKeys(), message.Command));

                case QueueManagerCmd.GetAllSessionsStateKeys:
                    if (_Session == null)
                    {
                        return(null);
                    }
                    stream = new NetStream();
                    SessionState st = (SessionState)message.GetArgs().Get <int>("state");
                    return(message.AsyncTask(() => Session.GetAllSessionsStateKeys(st), message.Command));

                case QueueManagerCmd.GetSessionItemsKeys:
                    if (_Session == null)
                    {
                        return(null);
                    }
                    return(message.AsyncTask(() => Session.GetSessionsItemsKeys(message.Id), message.Command));

                //=== Queue api===================================================
                case QueueCmd.ViewItem:
                case QueueCmd.RemoveItem:
                    return(Queue.ExecRemote(message));

                //=== Data Queue api===================================================
                case DataQueueCmd.GetItemProperties:
                case DataQueueCmd.RemoveTable:
                //case DataQueueCmd.GetDataStatistic:
                case DataQueueCmd.GetDataTable:

                    return(DbQueue.ExecRemote(message));

                //=== Sync Queue api===================================================

                case SyncQueueCmd.RemoveSyncItem:
                case SyncQueueCmd.GetSyncItem:
                //case SyncQueueCmd.GetSyncStatistic:
                case SyncQueueCmd.GetItemsReport:

                    return(SyncQueue.ExecRemote(message));

                //=== Session Queue api===================================================

                case SessionCmd.RemoveSession:
                case SessionCmd.GetExistingSession:

                    return(Session.ExecRemote(message));
                }
            }
            catch (System.Runtime.Serialization.SerializationException se)
            {
                state = QueueState.SerializationError;
                QueueLogger.Logger.LogAction(QueueAction.QueueException, QueueActionState.Error, "ExecManager error: " + se.Message);
            }
            catch (Exception ex)
            {
                state = QueueState.UnexpectedError;
                QueueLogger.Logger.LogAction(QueueAction.QueueException, QueueActionState.Error, "ExecManager error: " + ex.Message);
            }

            return(QueueEntry.GetAckStream(state, message.Command)); //null;
        }