ntminer 5 年之前
父节点
当前提交
6d3fa825c4

+ 1 - 1
src/NTMinerClient/Core/Impl/ClientDataSet.cs

@@ -12,7 +12,7 @@ namespace NTMiner.Core.Impl {
             Task.Factory.StartNew(() => {
                 using (LiteDatabase db = CreateLocalDb()) {
                     var col = db.GetCollection<MinerData>();
-                    callback?.Invoke(col.FindAll());
+                    callback?.Invoke(col.FindAll().Select(a => ClientData.Create(a)));
                 }
             });
         }) {

+ 19 - 3
src/WebApiServer/Core/Impl/ClientDataSet.cs

@@ -4,7 +4,9 @@ using NTMiner.Core.Redis;
 using NTMiner.Report;
 using System;
 using System.Collections.Generic;
+using System.Linq;
 using System.Reflection;
+using System.Threading.Tasks;
 
 namespace NTMiner.Core.Impl {
     // TODO:将矿机列表数据放入redis从而实现WebApi进程重启时不丢失内存中的矿机算力数据
@@ -12,13 +14,27 @@ namespace NTMiner.Core.Impl {
         private const string _safeIgnoreMessage = "该消息发生的时间早于本节点启动时间1分钟,安全忽略";
 
         private readonly IMinerRedis _minerRedis;
+        private readonly ISpeedDataRedis _speedDataRedis;
         private readonly IMinerClientMqSender _mqSender;
-        public ClientDataSet(IMinerRedis minerRedis, IMinerClientMqSender mqSender) : base(isPull: false, getDatas: callback => {
-            minerRedis.GetAllAsync().ContinueWith(t => {
-                callback?.Invoke(t.Result);
+        public ClientDataSet(IMinerRedis minerRedis, ISpeedDataRedis speedDataRedis, IMinerClientMqSender mqSender) : base(isPull: false, getDatas: callback => {
+            var getMinersTask = minerRedis.GetAllAsync();
+            var getSpeedsTask = speedDataRedis.GetAllAsync();
+            Task.WhenAll(getMinersTask, getSpeedsTask).ContinueWith(t => {
+                var speedDatas = getSpeedsTask.Result;
+                List<ClientData> clientDatas = new List<ClientData>();
+                foreach (var minerData in getMinersTask.Result) {
+                    var clientData = ClientData.Create(minerData);
+                    clientDatas.Add(clientData);
+                    var speedData = speedDatas.FirstOrDefault(a => a.ClientId == minerData.ClientId);
+                    if (speedData != null) {
+                        clientData.Update(speedData);
+                    }
+                }
+                callback?.Invoke(clientDatas);
             });
         }) {
             _minerRedis = minerRedis;
+            _speedDataRedis = speedDataRedis;
             _mqSender = mqSender;
             // 收到Mq消息之前一定已经初始化完成,因为Mq消费者在ClientSetInitedEvent事件之后才会创建
             VirtualRoot.AddEventPath<SpeedDataMqMessage>("收到SpeedDataMq消息后更新ClientData内存", LogEnum.None, action: message => {

+ 3 - 4
src/WebApiServer/Core/Impl/ClientDataSetBase.cs

@@ -26,18 +26,17 @@ namespace NTMiner.Core.Impl {
         /// </summary>
         /// <param name="isPull"></param>
         /// <param name="getDatas"></param>
-        public ClientDataSetBase(bool isPull, Action<Action<IEnumerable<MinerData>>> getDatas) {
+        public ClientDataSetBase(bool isPull, Action<Action<IEnumerable<ClientData>>> getDatas) {
             _isPull = isPull;
             getDatas(datas => {
                 InitedOn = DateTime.Now;
                 IsReadied = true;
                 foreach (var item in datas) {
-                    var data = ClientData.Create(item);
                     if (!_dicByObjectId.ContainsKey(item.Id)) {
-                        _dicByObjectId.Add(item.Id, data);
+                        _dicByObjectId.Add(item.Id, item);
                     }
                     if (!_dicByClientId.ContainsKey(item.ClientId)) {
-                        _dicByClientId.Add(item.ClientId, data);
+                        _dicByClientId.Add(item.ClientId, item);
                     }
                 }
                 Write.UserOk("矿机集就绪");

+ 2 - 1
src/WebApiServer/WebApiRoot.cs

@@ -68,6 +68,7 @@ namespace NTMiner {
                         var wsServerNodeMqSender = new WsServerNodeMqSender(_serverContext.Channel);
 
                         var minerRedis = new MinerRedis(_serverContext.RedisConn);
+                        var speedDataRedis = new SpeedDataRedis(_serverContext.RedisConn);
                         var userRedis = new UserRedis(_serverContext.RedisConn);
                         var captchaRedis = new CaptchaRedis(_serverContext.RedisConn);
 
@@ -77,7 +78,7 @@ namespace NTMiner {
                         CaptchaSet = new CaptchaSet(captchaRedis);
                         CalcConfigSet = new CalcConfigSet();
                         NTMinerWalletSet = new NTMinerWalletSet();
-                        ClientDataSet clientDataSet = new ClientDataSet(minerRedis, minerClientMqSender);
+                        ClientDataSet clientDataSet = new ClientDataSet(minerRedis, speedDataRedis, minerClientMqSender);
                         ClientDataSet = clientDataSet;
                         CoinSnapshotSet = new CoinSnapshotSet(clientDataSet);
                         MineWorkSet = new UserMineWorkSet();