ntminer 5 years ago
parent
commit
209ae3cc3f

+ 5 - 0
src/NTMinerlib/Messages.cs

@@ -225,6 +225,11 @@ namespace NTMiner {
         public UserSetInitedEvent() { }
     }
 
+    [MessageType(description: "Gpu名称集已初始化完成")]
+    public class GpuNameSetInitedEvent : EventBase {
+        public GpuNameSetInitedEvent() { }
+    }
+
     [MessageType(description: "矿机签名集已初始化完成")]
     public class MinerSignSetInitedEvent: EventBase {
         public MinerSignSetInitedEvent() { }

+ 4 - 0
src/WebApiServer/Core/IGpuNameSet.cs

@@ -3,6 +3,10 @@ using System.Collections.Generic;
 
 namespace NTMiner.Core {
     public interface IGpuNameSet {
+        /// <summary>
+        /// 该集合的成员是异步从redis中加载数据初始化的,所以有了这个IsReadied属性。
+        /// </summary>
+        bool IsReadied { get; }
         /// <summary>
         /// 
         /// </summary>

+ 14 - 1
src/WebApiServer/Core/Impl/GpuNameSet.cs

@@ -1,11 +1,24 @@
 using NTMiner.Core.Gpus;
+using NTMiner.Core.Redis;
 using System.Collections.Generic;
 
 namespace NTMiner.Core.Impl {
     public class GpuNameSet : IGpuNameSet {
         private readonly HashSet<GpuName> _hashSet = new HashSet<GpuName>();
 
-        public GpuNameSet() {
+        public bool IsReadied {
+            get; private set;
+        }
+
+        public GpuNameSet(IGpuNameRedis userRedis) {
+            userRedis.GetAllAsync().ContinueWith(t => {
+                foreach (var item in t.Result) {
+                    _hashSet.Add(item);
+                }
+                IsReadied = true;
+                Write.UserOk("Gpu名称集就绪");
+                VirtualRoot.RaiseEvent(new GpuNameSetInitedEvent());
+            });
         }
 
         /// <summary>

+ 4 - 8
src/WebApiServer/WebApiRoot.cs

@@ -16,12 +16,7 @@ using System.Web.Http;
 namespace NTMiner {
     public static class WebApiRoot {
         private static readonly EventWaitHandle WaitHandle = new AutoResetEvent(false);
-        private static OssClient _ossClient = null;
-        public static OssClient OssClient {
-            get {
-                return _ossClient;
-            }
-        }
+        public static OssClient OssClient { get; private set; }
 
         private static IServerContext _serverContext;
 
@@ -62,13 +57,14 @@ namespace NTMiner {
                             return;
                         }
                         Console.Title = $"{ServerAppType.WebApiServer.GetName()}_{ServerRoot.HostConfig.ThisServerAddress}";
-                        _ossClient = new OssClient(ServerRoot.HostConfig.OssEndpoint, ServerRoot.HostConfig.OssAccessKeyId, ServerRoot.HostConfig.OssAccessKeySecret);
+                        OssClient = new OssClient(ServerRoot.HostConfig.OssEndpoint, ServerRoot.HostConfig.OssAccessKeyId, ServerRoot.HostConfig.OssAccessKeySecret);
                         var minerClientMqSender = new MinerClientMqSender(_serverContext.Channel);
                         var userMqSender = new UserMqSender(_serverContext.Channel);
                         var wsServerNodeMqSender = new WsServerNodeMqSender(_serverContext.Channel);
 
                         var minerRedis = new MinerRedis(_serverContext.RedisConn);
                         var speedDataRedis = new SpeedDataRedis(_serverContext.RedisConn);
+                        var gpuNameRedist = new GpuNameRedis(_serverContext.RedisConn);
                         var userRedis = new UserRedis(_serverContext.RedisConn);
                         var captchaRedis = new CaptchaRedis(_serverContext.RedisConn);
 
@@ -80,7 +76,7 @@ namespace NTMiner {
                         NTMinerWalletSet = new NTMinerWalletSet();
                         ClientDataSet clientDataSet = new ClientDataSet(minerRedis, speedDataRedis, minerClientMqSender);
                         ClientDataSet = clientDataSet;
-                        GpuNameSet = new GpuNameSet();
+                        GpuNameSet = new GpuNameSet(gpuNameRedist);
                         CoinSnapshotSet = new CoinSnapshotSet(clientDataSet);
                         MineWorkSet = new UserMineWorkSet();
                         MinerGroupSet = new UserMinerGroupSet();