コード例 #1
0
        public override bool Go(BasicDeliverEventArgs ea)
        {
            switch (ea.RoutingKey)
            {
            case MqKeyword.MinerClientWsClosedRoutingKey: {
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                Guid     clientId  = MinerClientMqBodyUtil.GetClientIdMqReciveBody(ea.Body);
                if (clientId != Guid.Empty)
                {
                    VirtualRoot.RaiseEvent(new MinerClientWsClosedMqEvent(appId, clientId, timestamp));
                }
            }
            break;

            case MqKeyword.MinerClientsWsBreathedRoutingKey: {
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                Guid[]   clientIds = MinerClientMqBodyUtil.GetClientIdsMqReciveBody(ea.Body);
                if (clientIds != null && clientIds.Length != 0)
                {
                    VirtualRoot.RaiseEvent(new MinerClientsWsBreathedMqEvent(appId, clientIds, timestamp));
                }
            }
            break;

            default:
                return(false);
            }
            return(true);
        }
コード例 #2
0
        public override void Go(BasicDeliverEventArgs ea)
        {
            switch (ea.RoutingKey)
            {
            // 上报的算力放在这里消费,因为只有WebApiServer消费该类型的消息,WsServer不消费该类型的消息
            case MqKeyword.SpeedRoutingKey: {
                Guid     clientId  = MinerClientMqBodyUtil.GetClientIdMqReciveBody(ea.Body);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                string   minerIp   = ea.BasicProperties.ReadHeaderString(MqKeyword.MinerIpHeaderName);
                VirtualRoot.RaiseEvent(new SpeedDataMqMessage(appId, clientId, minerIp, timestamp));
            }
            break;

            case MqKeyword.MinerClientWsOpenedRoutingKey: {
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                Guid     clientId  = MinerClientMqBodyUtil.GetClientIdMqReciveBody(ea.Body);
                if (clientId != Guid.Empty)
                {
                    VirtualRoot.RaiseEvent(new MinerClientWsOpenedMqMessage(appId, clientId, timestamp));
                }
            }
            break;

            case MqKeyword.MinerClientWsClosedRoutingKey: {
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                Guid     clientId  = MinerClientMqBodyUtil.GetClientIdMqReciveBody(ea.Body);
                if (clientId != Guid.Empty)
                {
                    VirtualRoot.RaiseEvent(new MinerClientWsClosedMqMessage(appId, clientId, timestamp));
                }
            }
            break;

            case MqKeyword.MinerClientWsBreathedRoutingKey: {
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                Guid     clientId  = MinerClientMqBodyUtil.GetClientIdMqReciveBody(ea.Body);
                if (clientId != Guid.Empty)
                {
                    VirtualRoot.RaiseEvent(new MinerClientWsBreathedMqMessage(appId, clientId, timestamp));
                }
            }
            break;

            case MqKeyword.ChangeMinerSignRoutingKey: {
                MinerSign minerSign = MinerClientMqBodyUtil.GetChangeMinerSignMqReceiveBody(ea.Body);
                if (minerSign != null)
                {
                    VirtualRoot.Execute(new ChangeMinerSignMqMessage(minerSign));
                }
            }
            break;

            default:
                break;
            }
        }
コード例 #3
0
 protected override Dictionary <string, Action <BasicDeliverEventArgs> > GetPaths()
 {
     return(new Dictionary <string, Action <BasicDeliverEventArgs> > {
         [MqKeyword.SpeedsRoutingKey] = ea => {
             ClientIdIp[] clientIdIps = MinerClientMqBodyUtil.GetClientIdIpsMqReciveBody(ea.Body);
             string appId = ea.BasicProperties.AppId;
             VirtualRoot.RaiseEvent(new SpeedDatasMqEvent(appId, clientIdIps, ea.GetTimestamp()));
         },
         [MqKeyword.MinerSignSetedRoutingKey] = ea => {
             string appId = ea.BasicProperties.AppId;
             MinerSign minerSign = MinerClientMqBodyUtil.GetMinerSignMqReceiveBody(ea.Body);
             if (minerSign != null)
             {
                 VirtualRoot.RaiseEvent(new MinerSignSetedMqEvent(appId, minerSign, ea.GetTimestamp()));
             }
         },
         [MqKeyword.QueryClientsForWsRoutingKey] = ea => {
             string appId = ea.BasicProperties.AppId;
             string mqMessageId = ea.BasicProperties.MessageId;
             string loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
             string sessionId = ea.BasicProperties.ReadHeaderString(MqKeyword.SessionIdHeaderName);
             QueryClientsForWsRequest query = MinerClientMqBodyUtil.GetQueryClientsForWsMqReceiveBody(ea.Body);
             if (query != null)
             {
                 VirtualRoot.Execute(new QueryClientsForWsMqCommand(appId, mqMessageId, ea.GetTimestamp(), loginName, sessionId, query));
             }
         }
     });
 }
コード例 #4
0
        public void SendSpeeds(ClientIdIp[] clientIdIps)
        {
            if (clientIdIps == null || clientIdIps.Length == 0)
            {
                return;
            }
            var basicProperties = CreateNonePersistentBasicProperties();

            _mq.BasicPublish(
                routingKey: MqKeyword.SpeedsRoutingKey,
                basicProperties: basicProperties,
                body: MinerClientMqBodyUtil.GetClientIdIpsMqSendBody(clientIdIps));
        }
コード例 #5
0
        public void SendAutoQueryClientsForWs(QueryClientsForWsRequest[] requests)
        {
            if (requests == null || requests.Length == 0)
            {
                return;
            }
            var basicProperties = CreateNonePersistentBasicProperties();

            _mq.BasicPublish(
                routingKey: MqKeyword.AutoQueryClientsForWsRoutingKey,
                basicProperties: basicProperties,
                body: MinerClientMqBodyUtil.GetAutoQueryClientsForWsMqSendBody(requests));
        }
コード例 #6
0
        public void SendMinerSignsSeted(MinerSign[] minerSigns)
        {
            if (minerSigns == null || minerSigns.Length == 0)
            {
                return;
            }
            var basicProperties = CreateNonePersistentBasicProperties();

            _mq.BasicPublish(
                routingKey: MqKeyword.MinerSignsSetedRoutingKey,
                basicProperties: basicProperties,
                body: MinerClientMqBodyUtil.GetMinerSignsMqSendBody(minerSigns));
        }
コード例 #7
0
        public void SendMinerDataRemoved(string minerId, Guid clientId)
        {
            if (string.IsNullOrEmpty(minerId))
            {
                return;
            }
            var basicProperties = CreateBasicProperties(clientId);

            _mq.BasicPublish(
                routingKey: MqKeyword.MinerDataRemovedRoutingKey,
                basicProperties: basicProperties,
                body: MinerClientMqBodyUtil.GetMinerIdMqSendBody(minerId));
        }
コード例 #8
0
        public void SendMinerClientsWsBreathed(Guid[] clientIds)
        {
            if (clientIds == null || clientIds.Length == 0)
            {
                return;
            }
            var basicProperties = CreateNonePersistentBasicProperties();

            _mq.BasicPublish(
                routingKey: MqKeyword.MinerClientsWsBreathedRoutingKey,
                basicProperties: basicProperties,
                body: MinerClientMqBodyUtil.GetClientIdsMqSendBody(clientIds));
        }
コード例 #9
0
        public void SendMinerSignSeted(MinerSign minerSign)
        {
            if (minerSign == null || string.IsNullOrEmpty(minerSign.Id))
            {
                return;
            }
            var basicProperties = CreateNonePersistentBasicProperties(minerSign.LoginName);

            _mq.BasicPublish(
                routingKey: MqKeyword.MinerSignSetedRoutingKey,
                basicProperties: basicProperties,
                body: MinerClientMqBodyUtil.GetMinerSignMqSendBody(minerSign));
        }
コード例 #10
0
        public void SendMinerClientWsClosed(Guid clientId)
        {
            if (clientId == Guid.Empty)
            {
                return;
            }
            var basicProperties = CreateNonePersistentBasicProperties();

            _mq.BasicPublish(
                routingKey: MqKeyword.MinerClientWsClosedRoutingKey,
                basicProperties: basicProperties,
                body: MinerClientMqBodyUtil.GetClientIdMqSendBody(clientId));
        }
コード例 #11
0
        public void SendQueryClientsForWs(string sessionId, QueryClientsForWsRequest request)
        {
            if (string.IsNullOrEmpty(sessionId) || request == null || string.IsNullOrEmpty(request.LoginName))
            {
                return;
            }
            var basicProperties = CreateNonePersistentWsBasicProperties(request.LoginName, sessionId);

            _mq.BasicPublish(
                routingKey: MqKeyword.QueryClientsForWsRoutingKey,
                basicProperties: basicProperties,
                body: MinerClientMqBodyUtil.GetQueryClientsForWsMqSendBody(request));
        }
コード例 #12
0
        public void SendResponseClientsForWs(string wsServerIp, string loginName, string sessionId, QueryClientsResponse response)
        {
            if (response == null)
            {
                return;
            }
            var basicProperties = CreateWsBasicProperties(loginName, sessionId);

            _mq.MqChannel.BasicPublish(
                exchange: MqKeyword.NTMinerExchange,
                routingKey: string.Format(MqKeyword.QueryClientsForWsResponseRoutingKey, wsServerIp),
                basicProperties: basicProperties,
                body: MinerClientMqBodyUtil.GetQueryClientsResponseMqSendBody(response));
        }
コード例 #13
0
        public void SendMinerSignChanged(string minerId)
        {
            if (string.IsNullOrEmpty(minerId))
            {
                return;
            }
            var basicProperties = CreateBasicProperties();

            _serverConnection.Channel.BasicPublish(
                exchange: MqKeyword.NTMinerExchange,
                routingKey: MqKeyword.MinerSignChangedRoutingKey,
                basicProperties: basicProperties,
                body: MinerClientMqBodyUtil.GetMinerIdMqSendBody(minerId));
        }
コード例 #14
0
        public void SendMinerClientWsBreathed(string loginName, Guid clientId)
        {
            if (string.IsNullOrEmpty(loginName) || clientId == Guid.Empty)
            {
                return;
            }
            var basicProperties = CreateBasicProperties(loginName);

            _serverConnection.MqChannel.BasicPublish(
                exchange: MqKeyword.NTMinerExchange,
                routingKey: MqKeyword.MinerClientWsBreathedRoutingKey,
                basicProperties: basicProperties,
                body: MinerClientMqBodyUtil.GetClientIdMqSendBody(clientId));
        }
コード例 #15
0
ファイル: MinerClientMqSender.cs プロジェクト: Feiox/NtMiner
        public void SendMinerClientWsOpened(Guid clientId)
        {
            if (clientId == Guid.Empty)
            {
                return;
            }
            var basicProperties = CreateNonePersistentBasicProperties();

            _mq.MqChannel.BasicPublish(
                exchange: MqKeyword.NTMinerExchange,
                routingKey: MqKeyword.MinerClientWsOpenedRoutingKey,
                basicProperties: basicProperties,
                body: MinerClientMqBodyUtil.GetClientIdMqSendBody(clientId));
        }
コード例 #16
0
ファイル: MinerClientMqSender.cs プロジェクト: Feiox/NtMiner
        public void SendChangeMinerSign(MinerSign minerSign)
        {
            if (minerSign == null || string.IsNullOrEmpty(minerSign.Id))
            {
                return;
            }
            var basicProperties = CreatePersistentBasicProperties(minerSign.LoginName);

            _mq.MqChannel.BasicPublish(
                exchange: MqKeyword.NTMinerExchange,
                routingKey: MqKeyword.ChangeMinerSignRoutingKey,
                basicProperties: basicProperties,
                body: MinerClientMqBodyUtil.GetChangeMinerSignMqSendBody(minerSign));
        }
コード例 #17
0
        public void SendSpeed(string loginName, Guid clientId, string minerIp)
        {
            if (string.IsNullOrEmpty(loginName) || clientId == Guid.Empty || string.IsNullOrEmpty(minerIp))
            {
                return;
            }
            var basicProperties = CreateBasicProperties(loginName);

            basicProperties.Headers[MqKeyword.MinerIpHeaderName] = minerIp;
            _serverConnection.MqChannel.BasicPublish(
                exchange: MqKeyword.NTMinerExchange,
                routingKey: MqKeyword.SpeedRoutingKey,
                basicProperties: basicProperties,
                body: MinerClientMqBodyUtil.GetClientIdMqSendBody(clientId));
        }
コード例 #18
0
 protected override Dictionary <string, Action <BasicDeliverEventArgs> > GetPaths()
 {
     return(new Dictionary <string, Action <BasicDeliverEventArgs> > {
         [_queryClientsForWsResponseRoutingKey] = ea => {
             string appId = ea.BasicProperties.AppId;
             string mqCorrelationId = ea.BasicProperties.CorrelationId;
             string loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
             string sessionId = ea.BasicProperties.ReadHeaderString(MqKeyword.SessionIdHeaderName);
             QueryClientsResponse response = MinerClientMqBodyUtil.GetQueryClientsResponseMqReceiveBody(ea.Body);
             if (response != null)
             {
                 VirtualRoot.RaiseEvent(new QueryClientsForWsResponseMqEvent(appId, mqCorrelationId, ea.GetTimestamp(), loginName, sessionId, response));
             }
         }
     });
 }
コード例 #19
0
        public void SendResponseClientsForWs(string wsServerIp, string mqCorrelationId, QueryClientsResponseEx[] responses)
        {
            if (responses == null || responses.Length == 0)
            {
                return;
            }
            var basicProperties = CreateBasicProperties();

            if (!string.IsNullOrEmpty(mqCorrelationId))
            {
                basicProperties.CorrelationId = mqCorrelationId;
            }
            _mq.BasicPublish(
                routingKey: string.Format(MqKeyword.AutoQueryClientsForWsResponseRoutingKey, wsServerIp),
                basicProperties: basicProperties,
                body: MinerClientMqBodyUtil.GetAutoQueryClientsResponseMqSendBody(responses));
        }
コード例 #20
0
        public override bool Go(BasicDeliverEventArgs ea)
        {
            switch (ea.RoutingKey)
            {
            // 上报的算力放在这里消费,因为只有WebApiServer消费该类型的消息,WsServer不消费该类型的消息
            case MqKeyword.SpeedRoutingKey: {
                Guid     clientId  = MinerClientMqBodyUtil.GetClientIdMqReciveBody(ea.Body);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                string   minerIp   = ea.BasicProperties.ReadHeaderString(MqKeyword.MinerIpHeaderName);
                VirtualRoot.RaiseEvent(new SpeedDataMqEvent(appId, clientId, minerIp, timestamp));
            }
            break;

            case MqKeyword.ChangeMinerSignRoutingKey: {
                string    appId     = ea.BasicProperties.AppId;
                MinerSign minerSign = MinerClientMqBodyUtil.GetChangeMinerSignMqReceiveBody(ea.Body);
                if (minerSign != null)
                {
                    VirtualRoot.Execute(new ChangeMinerSignMqCommand(appId, minerSign));
                }
            }
            break;

            case MqKeyword.QueryClientsForWsRoutingKey: {
                DateTime timestamp             = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId                 = ea.BasicProperties.AppId;
                string   mqMessageId           = ea.BasicProperties.MessageId;
                string   loginName             = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                string   sessionId             = ea.BasicProperties.ReadHeaderString(MqKeyword.SessionIdHeaderName);
                QueryClientsForWsRequest query = MinerClientMqBodyUtil.GetQueryClientsForWsMqReceiveBody(ea.Body);
                if (query != null)
                {
                    VirtualRoot.Execute(new QueryClientsForWsMqCommand(appId, mqMessageId, timestamp, loginName, sessionId, query));
                }
            }
            break;

            default:
                return(false);
            }
            return(true);
        }
コード例 #21
0
        public override bool Go(BasicDeliverEventArgs ea)
        {
            switch (ea.RoutingKey)
            {
            case MqKeyword.SpeedsRoutingKey: {
                ClientIdIp[] clientIdIps = MinerClientMqBodyUtil.GetClientIdIpsMqReciveBody(ea.Body);
                DateTime     timestamp   = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string       appId       = ea.BasicProperties.AppId;
                VirtualRoot.RaiseEvent(new SpeedDatasMqEvent(appId, clientIdIps, timestamp));
            }
            break;

            case MqKeyword.MinerSignSetedRoutingKey: {
                string    appId     = ea.BasicProperties.AppId;
                DateTime  timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                MinerSign minerSign = MinerClientMqBodyUtil.GetMinerSignMqReceiveBody(ea.Body);
                if (minerSign != null)
                {
                    VirtualRoot.RaiseEvent(new MinerSignSetedMqEvent(appId, minerSign, timestamp));
                }
            }
            break;

            case MqKeyword.QueryClientsForWsRoutingKey: {
                DateTime timestamp             = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId                 = ea.BasicProperties.AppId;
                string   mqMessageId           = ea.BasicProperties.MessageId;
                string   loginName             = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                string   sessionId             = ea.BasicProperties.ReadHeaderString(MqKeyword.SessionIdHeaderName);
                QueryClientsForWsRequest query = MinerClientMqBodyUtil.GetQueryClientsForWsMqReceiveBody(ea.Body);
                if (query != null)
                {
                    VirtualRoot.Execute(new QueryClientsForWsMqCommand(appId, mqMessageId, timestamp, loginName, sessionId, query));
                }
            }
            break;

            default:
                return(false);
            }
            return(true);
        }
コード例 #22
0
        public override bool Go(BasicDeliverEventArgs ea)
        {
            switch (ea.RoutingKey)
            {
            case MqKeyword.MinerDataAddedRoutingKey: {
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                string   minerId   = MinerClientMqBodyUtil.GetMinerIdMqReciveBody(ea.Body);
                if (!string.IsNullOrEmpty(minerId))
                {
                    VirtualRoot.RaiseEvent(new MinerDataAddedMqMessage(appId, minerId, timestamp));
                }
            }
            break;

            case MqKeyword.MinerDataRemovedRoutingKey: {
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                string   minerId   = MinerClientMqBodyUtil.GetMinerIdMqReciveBody(ea.Body);
                if (!string.IsNullOrEmpty(minerId))
                {
                    VirtualRoot.RaiseEvent(new MinerDataRemovedMqMessage(appId, minerId, timestamp));
                }
            }
            break;

            case MqKeyword.MinerSignChangedRoutingKey: {
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                string   minerId   = MinerClientMqBodyUtil.GetMinerIdMqReciveBody(ea.Body);
                if (!string.IsNullOrEmpty(minerId))
                {
                    VirtualRoot.RaiseEvent(new MinerSignChangedMqMessage(appId, minerId, timestamp));
                }
            }
            break;

            default:
                return(false);
            }
            return(true);
        }
コード例 #23
0
 public override bool Go(BasicDeliverEventArgs ea)
 {
     if (ea.RoutingKey == _queryClientsForWsResponseRoutingKey)
     {
         DateTime             timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
         string               appId     = ea.BasicProperties.AppId;
         string               loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
         string               sessionId = ea.BasicProperties.ReadHeaderString(MqKeyword.SessionIdHeaderName);
         QueryClientsResponse response  = MinerClientMqBodyUtil.GetQueryClientsResponseMqReceiveBody(ea.Body);
         if (response != null)
         {
             VirtualRoot.RaiseEvent(new QueryClientsForWsResponseMqMessage(appId, timestamp, loginName, sessionId, response));
         }
         return(true);
     }
     else
     {
         return(false);
     }
 }
コード例 #24
0
 protected override Dictionary <string, Action <BasicDeliverEventArgs> > GetPaths()
 {
     return(new Dictionary <string, Action <BasicDeliverEventArgs> > {
         [MqKeyword.MinerClientWsClosedRoutingKey] = ea => {
             string appId = ea.BasicProperties.AppId;
             Guid clientId = MinerClientMqBodyUtil.GetClientIdMqReciveBody(ea.Body);
             if (clientId != Guid.Empty)
             {
                 VirtualRoot.RaiseEvent(new MinerClientWsClosedMqEvent(appId, clientId, ea.GetTimestamp()));
             }
         },
         [MqKeyword.MinerClientsWsBreathedRoutingKey] = ea => {
             string appId = ea.BasicProperties.AppId;
             Guid[] clientIds = MinerClientMqBodyUtil.GetClientIdsMqReciveBody(ea.Body);
             if (clientIds != null && clientIds.Length != 0)
             {
                 VirtualRoot.RaiseEvent(new MinerClientsWsBreathedMqEvent(appId, clientIds, ea.GetTimestamp()));
             }
         }
     });
 }
コード例 #25
0
        public void SendResponseClientsForWs(
            string wsServerIp,
            string loginName,
            string sessionId,
            string mqCorrelationId,
            QueryClientsResponse response)
        {
            if (response == null)
            {
                return;
            }
            var basicProperties = CreateWsBasicProperties(loginName, sessionId);

            if (!string.IsNullOrEmpty(mqCorrelationId))
            {
                basicProperties.CorrelationId = mqCorrelationId;
            }
            _mq.BasicPublish(
                routingKey: string.Format(MqKeyword.QueryClientsForWsResponseRoutingKey, wsServerIp),
                basicProperties: basicProperties,
                body: MinerClientMqBodyUtil.GetQueryClientsResponseMqSendBody(response));
        }
コード例 #26
0
        public override bool Go(BasicDeliverEventArgs ea)
        {
            switch (ea.RoutingKey)
            {
            case MqKeyword.MinerSignSetedRoutingKey: {
                DateTime  timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string    appId     = ea.BasicProperties.AppId;
                MinerSign minerSign = MinerClientMqBodyUtil.GetMinerSignMqReceiveBody(ea.Body);
                if (minerSign != null)
                {
                    VirtualRoot.RaiseEvent(new MinerSignSetedMqEvent(appId, minerSign, timestamp));
                }
            }
            break;

            case WsMqKeyword.GetConsoleOutLinesRoutingKey: {
                DateTime           timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string             appId     = ea.BasicProperties.AppId;
                AfterTimeRequest[] requests  = OperationMqBodyUtil.GetAfterTimeRequestMqReceiveBody(ea.Body);
                if (requests != null && requests.Length != 0)
                {
                    foreach (var request in requests)
                    {
                        VirtualRoot.RaiseEvent(new GetConsoleOutLinesMqEvent(appId, request.LoginName, timestamp, request.ClientId, request.AfterTime));
                    }
                }
            }
            break;

            case WsMqKeyword.FastGetConsoleOutLinesRoutingKey: {
                string   loginName      = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp      = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId          = ea.BasicProperties.AppId;
                long     afterTimestamp = OperationMqBodyUtil.GetFastGetConsoleOutLinesMqReceiveBody(ea.Body);
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    VirtualRoot.RaiseEvent(new GetConsoleOutLinesMqEvent(appId, loginName, timestamp, clientId, afterTimestamp));
                }
            }
            break;

            case WsMqKeyword.ConsoleOutLinesRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                var      data      = OperationMqBodyUtil.GetConsoleOutLinesMqReceiveBody(ea.Body);
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    VirtualRoot.RaiseEvent(new ConsoleOutLinesMqEvent(appId, loginName, timestamp, clientId, data));
                }
            }
            break;

            case WsMqKeyword.GetLocalMessagesRoutingKey: {
                DateTime           timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string             appId     = ea.BasicProperties.AppId;
                AfterTimeRequest[] requests  = OperationMqBodyUtil.GetAfterTimeRequestMqReceiveBody(ea.Body);
                if (requests != null && requests.Length != 0)
                {
                    foreach (var request in requests)
                    {
                        VirtualRoot.RaiseEvent(new GetLocalMessagesMqEvent(appId, request.LoginName, timestamp, request.ClientId, request.AfterTime));
                    }
                }
            }
            break;

            case WsMqKeyword.FastGetLocalMessagesRoutingKey: {
                string   loginName      = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp      = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId          = ea.BasicProperties.AppId;
                long     afterTimestamp = OperationMqBodyUtil.GetFastGetLocalMessagesMqReceiveBody(ea.Body);
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    VirtualRoot.RaiseEvent(new GetLocalMessagesMqEvent(appId, loginName, timestamp, clientId, afterTimestamp));
                }
            }
            break;

            case WsMqKeyword.LocalMessagesRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                var      data      = OperationMqBodyUtil.GetLocalMessagesMqReceiveBody(ea.Body);
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    VirtualRoot.RaiseEvent(new LocalMessagesMqEvent(appId, loginName, timestamp, clientId, data));
                }
            }
            break;

            case WsMqKeyword.GetOperationResultsRoutingKey: {
                DateTime           timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string             appId     = ea.BasicProperties.AppId;
                AfterTimeRequest[] requests  = OperationMqBodyUtil.GetAfterTimeRequestMqReceiveBody(ea.Body);
                if (requests != null && requests.Length != 0)
                {
                    foreach (var request in requests)
                    {
                        VirtualRoot.RaiseEvent(new GetOperationResultsMqEvent(appId, request.LoginName, timestamp, request.ClientId, request.AfterTime));
                    }
                }
            }
            break;

            case WsMqKeyword.FastGetOperationResultsRoutingKey: {
                string   loginName      = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp      = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId          = ea.BasicProperties.AppId;
                long     afterTimestamp = OperationMqBodyUtil.GetFastGetOperationResultsMqReceiveBody(ea.Body);
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    VirtualRoot.RaiseEvent(new GetOperationResultsMqEvent(appId, loginName, timestamp, clientId, afterTimestamp));
                }
            }
            break;

            case WsMqKeyword.OperationResultsRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                var      data      = OperationMqBodyUtil.GetOperationResultsMqReceiveBody(ea.Body);
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    VirtualRoot.RaiseEvent(new OperationResultsMqEvent(appId, loginName, timestamp, clientId, data));
                }
            }
            break;

            case WsMqKeyword.GetDrivesRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    VirtualRoot.RaiseEvent(new GetDrivesMqEvent(appId, loginName, timestamp, clientId));
                }
            }
            break;

            case WsMqKeyword.DrivesRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                var      data      = OperationMqBodyUtil.GetDrivesMqReceiveBody(ea.Body);
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    VirtualRoot.RaiseEvent(new DrivesMqEvent(appId, loginName, timestamp, clientId, data));
                }
            }
            break;

            case WsMqKeyword.GetLocalIpsRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    VirtualRoot.RaiseEvent(new GetLocalIpsMqEvent(appId, loginName, timestamp, clientId));
                }
            }
            break;

            case WsMqKeyword.LocalIpsRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                var      data      = OperationMqBodyUtil.GetLocalIpsMqReceiveBody(ea.Body);
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    VirtualRoot.RaiseEvent(new LocalIpsMqEvent(appId, loginName, timestamp, clientId, data));
                }
            }
            break;

            case WsMqKeyword.OperationReceivedRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    VirtualRoot.RaiseEvent(new OperationReceivedMqEvent(appId, loginName, timestamp, clientId));
                }
            }
            break;

            case WsMqKeyword.GetSpeedRoutingKey: {
                DateTime timestamp             = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId                 = ea.BasicProperties.AppId;
                UserGetSpeedRequest[] requests = OperationMqBodyUtil.GetGetSpeedMqReceiveBody(ea.Body);
                if (requests != null && requests.Length != 0)
                {
                    VirtualRoot.RaiseEvent(new GetSpeedMqEvent(appId, timestamp, requests));
                }
            }
            break;

            case WsMqKeyword.EnableRemoteDesktopRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    VirtualRoot.RaiseEvent(new EnableRemoteDesktopMqEvent(appId, loginName, timestamp, clientId));
                }
            }
            break;

            case WsMqKeyword.BlockWAURoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    VirtualRoot.RaiseEvent(new BlockWAUMqEvent(appId, loginName, timestamp, clientId));
                }
            }
            break;

            case WsMqKeyword.SetVirtualMemoryRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    var data = OperationMqBodyUtil.GetSetVirtualMemoryMqReceiveBody(ea.Body);
                    VirtualRoot.RaiseEvent(new SetVirtualMemoryMqEvent(appId, loginName, timestamp, clientId, data));
                }
            }
            break;

            case WsMqKeyword.SetLocalIpsRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    var data = OperationMqBodyUtil.GetSetLocalIpsMqReceiveBody(ea.Body);
                    VirtualRoot.RaiseEvent(new SetLocalIpsMqEvent(appId, loginName, timestamp, clientId, data));
                }
            }
            break;

            case WsMqKeyword.SwitchRadeonGpuRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    bool on = OperationMqBodyUtil.GetSwitchRadeonGpuMqReceiveBody(ea.Body);
                    VirtualRoot.RaiseEvent(new SwitchRadeonGpuMqEvent(appId, loginName, timestamp, clientId, on));
                }
            }
            break;

            case WsMqKeyword.GetSelfWorkLocalJsonRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    VirtualRoot.RaiseEvent(new GetSelfWorkLocalJsonMqEvent(appId, loginName, timestamp, clientId));
                }
            }
            break;

            case WsMqKeyword.SelfWorkLocalJsonRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    string json = OperationMqBodyUtil.GetSelfWorkLocalJsonMqReceiveBody(ea.Body);
                    VirtualRoot.RaiseEvent(new LocalJsonMqEvent(appId, loginName, timestamp, clientId, json));
                }
            }
            break;

            case WsMqKeyword.SaveSelfWorkLocalJsonRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    WorkRequest request = OperationMqBodyUtil.GetSaveSelfWorkLocalJsonMqReceiveBody(ea.Body);
                    VirtualRoot.RaiseEvent(new SaveSelfWorkLocalJsonMqEvent(appId, loginName, timestamp, clientId, request));
                }
            }
            break;

            case WsMqKeyword.GetGpuProfilesJsonRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    VirtualRoot.RaiseEvent(new GetGpuProfilesJsonMqEvent(appId, loginName, timestamp, clientId));
                }
            }
            break;

            case WsMqKeyword.GpuProfilesJsonRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    string json = OperationMqBodyUtil.GetGpuProfilesJsonMqReceiveBody(ea.Body);
                    VirtualRoot.RaiseEvent(new GpuProfilesJsonMqEvent(appId, loginName, timestamp, clientId, json));
                }
            }
            break;

            case WsMqKeyword.SaveGpuProfilesJsonRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    string json = OperationMqBodyUtil.GetSaveGpuProfilesJsonMqReceiveBody(ea.Body);
                    VirtualRoot.RaiseEvent(new SaveGpuProfilesJsonMqEvent(appId, loginName, timestamp, clientId, json));
                }
            }
            break;

            case WsMqKeyword.SetAutoBootStartRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    SetAutoBootStartRequest body = OperationMqBodyUtil.GetSetAutoBootStartMqReceiveBody(ea.Body);
                    if (body != null)
                    {
                        VirtualRoot.RaiseEvent(new SetAutoBootStartMqEvent(appId, loginName, timestamp, clientId, body));
                    }
                }
            }
            break;

            case WsMqKeyword.RestartWindowsRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    VirtualRoot.RaiseEvent(new RestartWindowsMqEvent(appId, loginName, timestamp, clientId));
                }
            }
            break;

            case WsMqKeyword.ShutdownWindowsRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    VirtualRoot.RaiseEvent(new ShutdownWindowsMqEvent(appId, loginName, timestamp, clientId));
                }
            }
            break;

            case WsMqKeyword.UpgradeNTMinerRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    string ntminerFileName = OperationMqBodyUtil.GetUpgradeNTMinerMqReceiveBody(ea.Body);
                    if (!string.IsNullOrEmpty(ntminerFileName))
                    {
                        VirtualRoot.RaiseEvent(new UpgradeNTMinerMqEvent(appId, loginName, timestamp, clientId, ntminerFileName));
                    }
                }
            }
            break;

            case MqKeyword.StartMineRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    Guid workId = OperationMqBodyUtil.GetStartMineMqReceiveBody(ea.Body);
                    VirtualRoot.RaiseEvent(new StartMineMqEvent(appId, loginName, timestamp, clientId, workId));
                }
            }
            break;

            case MqKeyword.StartWorkMineRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    WorkRequest request = OperationMqBodyUtil.GetStartWorkMineMqReceiveBody(ea.Body);
                    VirtualRoot.RaiseEvent(new StartWorkMineMqEvent(appId, loginName, timestamp, clientId, request));
                }
            }
            break;

            case WsMqKeyword.StopMineRoutingKey: {
                string   loginName = ea.BasicProperties.ReadHeaderString(MqKeyword.LoginNameHeaderName);
                DateTime timestamp = Timestamp.FromTimestamp(ea.BasicProperties.Timestamp.UnixTime);
                string   appId     = ea.BasicProperties.AppId;
                if (ea.BasicProperties.ReadHeaderGuid(MqKeyword.ClientIdHeaderName, out Guid clientId))
                {
                    VirtualRoot.RaiseEvent(new StopMineMqEvent(appId, loginName, timestamp, clientId));
                }
            }
            break;

            default:
                return(false);
            }
            return(true);
        }