public Task UpdateAsync(MinerSign minerSign) { if (minerSign == null) { return(TaskEx.CompletedTask); } var db = _redis.GetDatabase(); return(db.HashGetAsync(_redisKeyMinerById, minerSign.Id).ContinueWith(t => { MinerData minerData = null; if (t.Result.HasValue) { minerData = VirtualRoot.JsonSerializer.Deserialize <MinerData>(t.Result); minerData?.Update(minerSign); } else { minerData = MinerData.Create(minerSign); } if (minerData != null) { db.HashSetAsync(_redisKeyMinerById, minerSign.Id, VirtualRoot.JsonSerializer.Serialize(minerSign)); } })); }
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)); } } }); }
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; } }
public static void AddMinerClientSession(WsUserName wsUserName, UserData userData, IPEndPoint remoteEndPoint, IWsSessionAdapter session) { IMinerClientSession minerSession = MinerClientSession.Create(userData, wsUserName, remoteEndPoint, session.SessionId, WsServer.MinerClientWsSessions); MinerClientSessionSet.Add(minerSession); // 通知WebApiServer节点该矿机Ws连线了 MinerClientMqSender.SendMinerClientWsOpened(minerSession.LoginName, minerSession.ClientId); bool isMinerSignChanged; if (!MinerSignSet.TryGetByClientId(wsUserName.ClientId, out MinerSign minerSign)) { // 此时该矿机是第一次在服务端出现 minerSign = new MinerSign { Id = LiteDB.ObjectId.NewObjectId().ToString(), ClientId = wsUserName.ClientId, LoginName = userData.LoginName, OuterUserId = wsUserName.UserId, AESPassword = string.Empty, AESPasswordOn = Timestamp.UnixBaseTime }; isMinerSignChanged = true; } else { isMinerSignChanged = minerSign.OuterUserId != wsUserName.UserId || minerSign.LoginName != userData.LoginName; if (isMinerSignChanged) { minerSign.OuterUserId = wsUserName.UserId; minerSign.LoginName = userData.LoginName; } } // 通常执行不到,因为用户注册的时候已经生成了RSA公私钥对了 if (string.IsNullOrEmpty(userData.PublicKey) || string.IsNullOrEmpty(userData.PrivateKey)) { var key = Cryptography.RSAUtil.GetRASKey(); userData.PublicKey = key.PublicKey; userData.PrivateKey = key.PrivateKey; UserMqSender.SendUpdateUserRSAKey(userData.LoginName, key); } DateTime now = DateTime.Now; if (string.IsNullOrEmpty(minerSign.AESPassword) || minerSign.AESPasswordOn.AddDays(1) < now) { isMinerSignChanged = true; minerSign.AESPassword = Cryptography.AESUtil.GetRandomPassword(); minerSign.AESPasswordOn = now; } session.SendAsync(new WsMessage(Guid.NewGuid(), WsMessage.UpdateAESPassword) { Data = new AESPassword { PublicKey = userData.PublicKey, Password = Cryptography.RSAUtil.EncryptString(minerSign.AESPassword, userData.PrivateKey) } }.SignToJson(minerSign.AESPassword)); if (isMinerSignChanged) { MinerClientMqSender.SendChangeMinerSign(minerSign); } }
public void SetMinerSign(MinerSign minerSign) { _dicByClientId[minerSign.ClientId] = minerSign; _redis.UpdateAsync(minerSign); lock (_lockForMinerSignsSeted) { _minerSignsSeted.Add(minerSign); } }
public bool TryGetByClientId(Guid clientId, out MinerSign minerSign) { minerSign = null; if (!IsReadied) { return(false); } return(_dicByClientId.TryGetValue(clientId, out minerSign)); }
public bool TryGetByMinerId(string minerId, out MinerSign minerSign) { minerSign = null; if (!IsReadied) { return(false); } return(_dicByMinerId.TryGetValue(minerId, out minerSign)); }
protected override void OnOpen() { base.OnOpen(); if (!this.TryGetUser(out WsUserName wsUserName, out UserData userData)) { this.CloseAsync(); return; } IMinerClientSession minerSession = MinerClientSession.Create(userData, wsUserName, this.ID); WsRoot.MinerClientSessionSet.Add(minerSession); WsRoot.MinerClientMqSender.SendMinerClientWsOpened(minerSession.LoginName, minerSession.ClientId); if (!WsRoot.MinerSignSet.TryGetByClientId(wsUserName.ClientId, out MinerSign minerSign)) { minerSign = new MinerSign { Id = LiteDB.ObjectId.NewObjectId().ToString(), ClientId = wsUserName.ClientId, LoginName = userData.LoginName, OuterUserId = wsUserName.UserId, AESPassword = string.Empty, AESPasswordOn = Timestamp.UnixBaseTime }; } bool isMinerSignChanged = minerSign.OuterUserId != wsUserName.UserId || minerSign.LoginName != userData.LoginName; if (isMinerSignChanged) { minerSign.OuterUserId = wsUserName.UserId; minerSign.LoginName = userData.LoginName; } if (string.IsNullOrEmpty(userData.PublicKey) || string.IsNullOrEmpty(userData.PrivateKey)) { var key = Cryptography.RSAUtil.GetRASKey(); userData.PublicKey = key.PublicKey; userData.PrivateKey = key.PrivateKey; WsRoot.UserMqSender.SendUpdateUserRSAKey(userData.LoginName, key); } DateTime now = DateTime.Now; if (string.IsNullOrEmpty(minerSign.AESPassword) || minerSign.AESPasswordOn.AddDays(1) < now) { isMinerSignChanged = true; minerSign.AESPassword = Cryptography.AESUtil.GetRandomPassword(); minerSign.AESPasswordOn = now; } base.SendAsync(new WsMessage(Guid.NewGuid(), WsMessage.UpdateAESPassword) { Data = new AESPassword { PublicKey = userData.PublicKey, Password = Cryptography.RSAUtil.EncryptString(minerSign.AESPassword, userData.PrivateKey) } }.SignToJson(minerSign.AESPassword), completed: null); if (isMinerSignChanged) { WsRoot.MinerClientMqSender.SendChangeMinerSign(minerSign); } }
private void Add(MinerSign minerSign) { if (!_dicByMinerId.ContainsKey(minerSign.Id)) { _dicByMinerId.Add(minerSign.Id, minerSign); } if (!_dicByClientId.ContainsKey(minerSign.ClientId)) { _dicByClientId.Add(minerSign.ClientId, minerSign); } }
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)); }
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)); }
public void SetMinerSign(MinerSign minerSign) { _dicByClientId[minerSign.ClientId] = minerSign; _redis.GetByIdAsync(minerSign.Id).ContinueWith(t => { MinerData minerData = t.Result; if (minerData != null) { minerData.Update(minerSign); } else { minerData = MinerData.Create(minerSign); } _redis.SetAsync(minerData).ContinueWith(_ => { AppRoot.MinerClientMqSender.SendMinerSignSeted(minerSign); }); }); }
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); }
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); }
public static byte[] GetChangeMinerSignMqSendBody(MinerSign minerSign) { return(Encoding.UTF8.GetBytes(VirtualRoot.JsonSerializer.Serialize(minerSign))); }
public void SetMinerSign(MinerSign minerSign) { _dicByClientId[minerSign.ClientId] = minerSign; _redis.UpdateAsync(minerSign); AppRoot.MinerClientMqSender.SendMinerSignSeted(minerSign); }
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); }
public ChangeMinerSignMqCommand(MinerSign data) { this.Data = data; }
public MinerSignSet(IReadOnlyMinerRedis redis) { redis.GetAllAsync().ContinueWith(t => { _initedOn = DateTime.Now; foreach (var item in t.Result) { Add(MinerSign.Create(item)); } IsReadied = true; NTMinerConsole.UserOk("矿机签名集就绪"); VirtualRoot.RaiseEvent(new MinerSignSetInitedEvent()); }); // 收到Mq消息之前一定已经初始化完成,因为Mq消费者在MinerSignSetInitedEvent事件之后才会创建 VirtualRoot.BuildEventPath <MinerDataRemovedMqMessage>("收到MinerClientRemovedMq消息后移除内存中对应的记录", LogEnum.None, path: message => { #region if (message.AppId == ServerRoot.HostConfig.ThisServerAddress) { return; } if (string.IsNullOrEmpty(message.MinerId)) { return; } if (IsOldMqMessage(message.Timestamp)) { NTMinerConsole.UserOk(nameof(MinerDataRemovedMqMessage) + ":" + MqKeyword.SafeIgnoreMessage); return; } if (_dicByMinerId.TryGetValue(message.MinerId, out MinerSign minerSign)) { if (AppRoot.MinerClientSessionSet.TryGetByClientId(minerSign.ClientId, out IMinerClientSession ntminerSession)) { ntminerSession.CloseAsync(WsCloseCode.Normal, "服务端移除了该矿机"); } _dicByMinerId.Remove(message.MinerId); _dicByClientId.Remove(minerSign.ClientId); } #endregion }, this.GetType()); VirtualRoot.BuildEventPath <MinerDataAddedMqMessage>("收到MinerDataAddedMq消息后更新内存中对应的记录", LogEnum.None, path: message => { #region if (message.AppId == ServerRoot.HostConfig.ThisServerAddress) { return; } if (string.IsNullOrEmpty(message.MinerId)) { return; } if (IsOldMqMessage(message.Timestamp)) { NTMinerConsole.UserOk(nameof(MinerDataAddedMqMessage) + ":" + MqKeyword.SafeIgnoreMessage); return; } redis.GetByIdAsync(message.MinerId).ContinueWith(t => { if (t.Result != null) { if (_dicByMinerId.TryGetValue(message.MinerId, out MinerSign minerSign)) { minerSign.Update(t.Result); } else { Add(MinerSign.Create(t.Result)); } } }); #endregion }, this.GetType()); VirtualRoot.BuildEventPath <MinerSignChangedMqMessage>("收到MinerSignChangedMq消息后更新内存中对应的记录", LogEnum.None, path: message => { #region if (message.AppId == ServerRoot.HostConfig.ThisServerAddress) { return; } if (string.IsNullOrEmpty(message.MinerId)) { return; } if (IsOldMqMessage(message.Timestamp)) { NTMinerConsole.UserOk(nameof(MinerSignChangedMqMessage) + ":" + MqKeyword.SafeIgnoreMessage); return; } redis.GetByIdAsync(message.MinerId).ContinueWith(t => { if (t.Result != null) { if (_dicByMinerId.TryGetValue(message.MinerId, out MinerSign minerSign)) { minerSign.Update(t.Result); } else { Add(MinerSign.Create(t.Result)); } } }); #endregion }, this.GetType()); }
public MinerSignSet(IReadOnlyMinerRedis redis) { redis.GetAllAsync().ContinueWith(t => { _initedOn = DateTime.Now; foreach (var item in t.Result) { Add(MinerSign.Create(item)); } IsReadied = true; Write.UserOk("矿机签名集就绪"); VirtualRoot.RaiseEvent(new MinerSignSetInitedEvent()); }); // 收到Mq消息之前一定已经初始化完成,因为Mq消费者在MinerSignSetInitedEvent事件之后才会创建 VirtualRoot.AddEventPath <MinerDataRemovedMqMessage>("收到MinerClientRemovedMq消息后移除内存中对应的记录", LogEnum.None, action: message => { if (message.AppId == ServerRoot.HostConfig.ThisServerAddress) { return; } if (string.IsNullOrEmpty(message.MinerId)) { return; } if (IsOldMqMessage(message.Timestamp)) { Write.UserOk(_safeIgnoreMessage); return; } if (_dicByMinerId.TryGetValue(message.MinerId, out MinerSign minerSign)) { _dicByMinerId.Remove(message.MinerId); _dicByClientId.Remove(minerSign.ClientId); } }, this.GetType()); VirtualRoot.AddEventPath <MinerDataAddedMqMessage>("收到MinerDataAddedMq消息后更新内存中对应的记录", LogEnum.None, action: message => { if (message.AppId == ServerRoot.HostConfig.ThisServerAddress) { return; } if (string.IsNullOrEmpty(message.MinerId)) { return; } if (IsOldMqMessage(message.Timestamp)) { Write.UserOk(_safeIgnoreMessage); return; } redis.GetByIdAsync(message.MinerId).ContinueWith(t => { if (t.Result != null) { if (_dicByMinerId.TryGetValue(message.MinerId, out MinerSign minerSign)) { minerSign.Update(t.Result); } else { Add(MinerSign.Create(t.Result)); } } }); }, this.GetType()); VirtualRoot.AddEventPath <MinerSignChangedMqMessage>("收到MinerSignChangedMq消息后更新内存中对应的记录", LogEnum.None, action: message => { if (message.AppId == ServerRoot.HostConfig.ThisServerAddress) { return; } if (string.IsNullOrEmpty(message.MinerId)) { return; } if (IsOldMqMessage(message.Timestamp)) { Write.UserOk(_safeIgnoreMessage); return; } redis.GetByIdAsync(message.MinerId).ContinueWith(t => { if (t.Result != null) { if (_dicByMinerId.TryGetValue(message.MinerId, out MinerSign minerSign)) { minerSign.Update(t.Result); } else { Add(MinerSign.Create(t.Result)); } } }); }, this.GetType()); }
public MinerSignSetedMqEvent(string appId, MinerSign data, DateTime timestamp) { this.AppId = appId; this.Data = data; this.Timestamp = timestamp; }
public MinerSignSet(IMinerDataRedis redis) { _redis = redis; Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); redis.GetAllAsync().ContinueWith(t => { _initedOn = DateTime.Now; foreach (var item in t.Result) { _dicByClientId[item.ClientId] = MinerSign.Create(item); } IsReadied = true; stopwatch.Stop(); NTMinerConsole.UserOk($"矿机签名集就绪,耗时 {stopwatch.GetElapsedSeconds().ToString("f2")} 秒"); VirtualRoot.RaiseEvent(new MinerSignSetInitedEvent()); }); // 收到Mq消息之前一定已经初始化完成,因为Mq消费者在MinerSignSetInitedEvent事件之后才会创建 VirtualRoot.BuildEventPath <MinerDataRemovedMqEvent>("收到MinerClientRemovedMq消息后移除内存中对应的记录", LogEnum.None, path: message => { #region if (message.AppId == ServerRoot.HostConfig.ThisServerAddress) { return; } if (string.IsNullOrEmpty(message.MinerId)) { return; } if (IsOldMqMessage(message.Timestamp)) { NTMinerConsole.UserOk(nameof(MinerDataRemovedMqEvent) + ":" + MqKeyword.SafeIgnoreMessage); return; } if (_dicByClientId.TryRemove(message.ClientId, out MinerSign minerSign)) { if (AppRoot.MinerClientSessionSet.TryGetByClientId(minerSign.ClientId, out IMinerClientSession ntminerSession)) { ntminerSession.CloseAsync(WsCloseCode.Normal, "服务端移除了该矿机"); } } #endregion }, this.GetType()); VirtualRoot.BuildEventPath <MinerSignSetedMqEvent>("收到MinerSignSetedMq消息后更新内存中对应的记录", LogEnum.None, path: message => { #region if (message.AppId == ServerRoot.HostConfig.ThisServerAddress) { return; } if (message.Data == null) { return; } if (IsOldMqMessage(message.Timestamp)) { NTMinerConsole.UserOk(nameof(MinerSignSetedMqEvent) + ":" + MqKeyword.SafeIgnoreMessage); return; } _dicByClientId[message.Data.ClientId] = message.Data; #endregion }, this.GetType()); }
public ChangeMinerSignMqCommand(string appId, MinerSign data) { this.AppId = appId; this.Data = data; }
public ChangeMinerSignMqMessage(MinerSign data) { this.Data = data; }
public MinerSignSet(IMinerDataRedis redis) { _redis = redis; Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); redis.GetAllAsync().ContinueWith(t => { _initedOn = DateTime.Now; foreach (var item in t.Result) { _dicByClientId[item.ClientId] = MinerSign.Create(item); } IsReadied = true; stopwatch.Stop(); NTMinerConsole.UserOk($"矿机签名集就绪,耗时 {stopwatch.GetElapsedSeconds().ToString("f2")} 秒"); VirtualRoot.RaiseEvent(new MinerSignSetInitedEvent()); }); // 收到Mq消息之前一定已经初始化完成,因为Mq消费者在MinerSignSetInitedEvent事件之后才会创建 VirtualRoot.BuildEventPath <MinerDataRemovedMqEvent>("收到MinerClientRemovedMq消息后移除内存中对应的记录", LogEnum.None, this.GetType(), PathPriority.Normal, path: message => { #region if (message.AppId == ServerRoot.HostConfig.ThisServerAddress) { return; } if (IsOldMqMessage(message.Timestamp)) { NTMinerConsole.UserOk(nameof(MinerDataRemovedMqEvent) + ":" + MqKeyword.SafeIgnoreMessage); return; } if (_dicByClientId.TryRemove(message.ClientId, out MinerSign minerSign)) { if (AppRoot.MinerClientSessionSet.TryGetByClientId(minerSign.ClientId, out IMinerClientSession ntminerSession)) { ntminerSession.CloseAsync(WsCloseCode.Normal, "服务端移除了该矿机"); } } #endregion }); VirtualRoot.BuildEventPath <MinerDatasRemovedMqEvent>("收到MinerClientsRemovedMq消息后移除内存中对应的记录", LogEnum.None, this.GetType(), PathPriority.Normal, path: message => { #region if (message.AppId == ServerRoot.HostConfig.ThisServerAddress) { return; } if (IsOldMqMessage(message.Timestamp)) { NTMinerConsole.UserOk(nameof(MinerDataRemovedMqEvent) + ":" + MqKeyword.SafeIgnoreMessage); return; } foreach (var clientId in message.ClientIds) { if (_dicByClientId.TryRemove(clientId, out MinerSign minerSign)) { if (AppRoot.MinerClientSessionSet.TryGetByClientId(clientId, out IMinerClientSession ntminerSession)) { ntminerSession.CloseAsync(WsCloseCode.Normal, "服务端移除了该矿机"); } } } #endregion }); VirtualRoot.BuildEventPath <Per1SecondEvent>("每秒钟将暂存的新设置的MinerSign发送到Mq", LogEnum.None, this.GetType(), PathPriority.Normal, message => { Task.Factory.StartNew(() => { MinerSign[] minerSignsSeted; lock (_lockForMinerSignsSeted) { minerSignsSeted = _minerSignsSeted.ToArray(); _minerSignsSeted.Clear(); } AppRoot.MinerClientMqSender.SendMinerSignsSeted(minerSignsSeted); }); }); }