ntminer 5 years ago
parent
commit
00836f2b28

+ 9 - 0
src/NTMinerServer/IServerConfig.cs

@@ -0,0 +1,9 @@
+using RabbitMQ.Client;
+using StackExchange.Redis;
+
+namespace NTMiner {
+    public interface IServerConfig {
+        ConnectionMultiplexer RedisConn { get; }
+        IModel Channel { get; }
+    }
+}

+ 0 - 11
src/NTMinerServer/IServerContext.cs

@@ -1,11 +0,0 @@
-using NTMiner.Core.Mq.MqMessagePaths;
-using RabbitMQ.Client;
-using StackExchange.Redis;
-
-namespace NTMiner {
-    public interface IServerContext {
-        ConnectionMultiplexer RedisConn { get; }
-        IModel Channel { get; }
-        IMqMessagePath[] MqMessagePaths { get; }
-    }
-}

+ 2 - 2
src/NTMinerServer/NTMinerServer.csproj

@@ -73,13 +73,13 @@
     <Compile Include="Core\Redis\IReadOnlyMinerRedis.cs" />
     <Compile Include="Core\IHostConfig.cs" />
     <Compile Include="Core\Redis\Impl\ReadOnlyUserRedis.cs" />
-    <Compile Include="IServerContext.cs" />
+    <Compile Include="IServerConfig.cs" />
     <Compile Include="MqKeyword.cs" />
     <Compile Include="Core\Mq\MqMessagePaths\IMqMessagePath.cs" />
     <Compile Include="Core\Messages.cs" />
     <Compile Include="Core\Redis\IReadOnlyUserRedis.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="ServerContext.cs" />
+    <Compile Include="ServerConfig.cs" />
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\NTMinerDataSchemas\NTMinerDataSchemas.csproj">

+ 4 - 7
src/NTMinerServer/ServerContext.cs → src/NTMinerServer/ServerConfig.cs

@@ -7,14 +7,14 @@ using System.Linq;
 using System.Threading.Tasks;
 
 namespace NTMiner {
-    public class ServerContext : IServerContext {
+    public class ServerConfig : IServerConfig {
         /// <summary>
         /// 如果创建失败返回null
         /// </summary>
         /// <param name="mqClientTypeName"></param>
         /// <param name="mqMessagePaths"></param>
         /// <returns></returns>
-        public static ServerContext Create(string mqClientTypeName, params AbstractMqMessagePath[] mqMessagePaths) {
+        public static ServerConfig Create(string mqClientTypeName, params AbstractMqMessagePath[] mqMessagePaths) {
             ConnectionMultiplexer redisConn;
             try {
                 redisConn = ConnectionMultiplexer.Connect(ServerRoot.HostConfig.RedisConfig);
@@ -47,7 +47,7 @@ namespace NTMiner {
             if (mqMessagePaths != null && mqMessagePaths.Length != 0) {
                 StartConsumer(channel, mqMessagePaths);
             }
-            return new ServerContext(redisConn, channel, mqMessagePaths);
+            return new ServerConfig(redisConn, channel);
         }
 
         private static void StartConsumer(IModel channel, AbstractMqMessagePath[] mqMessagePaths) {
@@ -103,16 +103,13 @@ namespace NTMiner {
             });
         }
 
-        private ServerContext(ConnectionMultiplexer redisConn, IModel channel, AbstractMqMessagePath[] mqMessagePaths) {
+        private ServerConfig(ConnectionMultiplexer redisConn, IModel channel) {
             this.RedisConn = redisConn;
             this.Channel = channel;
-            this.MqMessagePaths = mqMessagePaths;
         }
 
         public ConnectionMultiplexer RedisConn { get; private set; }
 
         public IModel Channel { get; private set; }
-
-        public IMqMessagePath[] MqMessagePaths { get; private set; }
     }
 }

+ 11 - 13
src/WebApiServer/WebApiRoot.cs

@@ -18,8 +18,6 @@ namespace NTMiner {
         private static readonly EventWaitHandle WaitHandle = new AutoResetEvent(false);
         public static OssClient OssClient { get; private set; }
 
-        private static IServerContext _serverContext;
-
         private static Mutex _sMutexApp;
         // 该程序编译为控制台程序,如果不启用内网支持则默认设置为开机自动启动
         [STAThread]
@@ -51,22 +49,22 @@ namespace NTMiner {
                             new UserMqMessagePath(durableQueue),
                             new MinerClientMqMessagePath(queue)
                         };
-                        _serverContext = ServerContext.Create(mqClientTypeName: ServerAppType.WebApiServer.GetName(), mqMessagePaths);
-                        if (_serverContext == null) {
+                        IServerConfig serverConfig = ServerConfig.Create(mqClientTypeName: ServerAppType.WebApiServer.GetName(), mqMessagePaths);
+                        if (serverConfig == null) {
                             Write.UserError("启动失败,无法继续,因为服务器上下文创建失败");
                             return;
                         }
                         Console.Title = $"{ServerAppType.WebApiServer.GetName()}_{ServerRoot.HostConfig.ThisServerAddress}";
                         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 userRedis = new UserRedis(_serverContext.RedisConn);
-                        var captchaRedis = new CaptchaRedis(_serverContext.RedisConn);
-                        var gpuNameRedis = new GpuNameRedis(_serverContext.RedisConn);
+                        var minerClientMqSender = new MinerClientMqSender(serverConfig.Channel);
+                        var userMqSender = new UserMqSender(serverConfig.Channel);
+                        var wsServerNodeMqSender = new WsServerNodeMqSender(serverConfig.Channel);
+
+                        var minerRedis = new MinerRedis(serverConfig.RedisConn);
+                        var speedDataRedis = new SpeedDataRedis(serverConfig.RedisConn);
+                        var userRedis = new UserRedis(serverConfig.RedisConn);
+                        var captchaRedis = new CaptchaRedis(serverConfig.RedisConn);
+                        var gpuNameRedis = new GpuNameRedis(serverConfig.RedisConn);
 
                         WsServerNodeSet = new WsServerNodeSet(wsServerNodeMqSender);
                         UserSet = new UserSet(userRedis, userMqSender);

+ 11 - 10
src/WsServer/WsRoot.cs

@@ -38,7 +38,6 @@ namespace NTMiner {
                 return new NetworkCredential(userData.LoginName, password, domain: null, roles: wsUserName.ClientType.GetName());
             }
         };
-        private static IServerContext _serverContext;
 
         public static IMinerClientSessionSet MinerClientSessionSet { get; private set; }
         public static IMinerStudioSessionSet MinerStudioSessionSet { get; private set; }
@@ -50,6 +49,7 @@ namespace NTMiner {
         public static IOperationMqSender OperationMqSender { get; private set; }
         public static IUserMqSender UserMqSender { get; private set; }
 
+        private static bool _started = false;
         static void Main() {
             HomePath.SetHomeDirFullName(HomePath.BaseDirectory);
             NTMinerConsole.DisbleQuickEditMode();
@@ -71,17 +71,17 @@ namespace NTMiner {
                 new WsServerNodeMqMessagePath(queue),
                 new OperationMqMessagePath(queue)
             };
-            _serverContext = ServerContext.Create(mqClientTypeName: ServerAppType.WsServer.GetName(), mqMessagePaths);
-            if (_serverContext == null) {
+            IServerConfig serverConfig = ServerConfig.Create(mqClientTypeName: ServerAppType.WsServer.GetName(), mqMessagePaths);
+            if (serverConfig == null) {
                 Write.UserError("启动失败,无法继续,因为服务器上下文创建失败");
                 return;
             }
-            MinerClientMqSender = new MinerClientMqSender(_serverContext.Channel);
-            SpeedDataRedis = new SpeedDataRedis(_serverContext.RedisConn);
-            OperationMqSender = new OperationMqSender(_serverContext.Channel);
-            UserMqSender = new UserMqSender(_serverContext.Channel);
-            var minerRedis = new ReadOnlyMinerRedis(_serverContext.RedisConn);
-            var userRedis = new ReadOnlyUserRedis(_serverContext.RedisConn);
+            MinerClientMqSender = new MinerClientMqSender(serverConfig.Channel);
+            SpeedDataRedis = new SpeedDataRedis(serverConfig.RedisConn);
+            OperationMqSender = new OperationMqSender(serverConfig.Channel);
+            UserMqSender = new UserMqSender(serverConfig.Channel);
+            var minerRedis = new ReadOnlyMinerRedis(serverConfig.RedisConn);
+            var userRedis = new ReadOnlyUserRedis(serverConfig.RedisConn);
             VirtualRoot.StartTimer();
             RpcRoot.SetRpcUser(new RpcUser(ServerRoot.HostConfig.RpcLoginName, HashUtil.Sha1(ServerRoot.HostConfig.RpcPassword)));
             RpcRoot.SetIsOuterNet(false);
@@ -96,6 +96,7 @@ namespace NTMiner {
             MinerStudioSessionSet = new MinerStudioSessionSet(_wsServer.WebSocketServices[minerStudioPath].Sessions);
             _wsServer.Start();
             VirtualRoot.RaiseEvent(new WebSocketServerStatedEvent());
+            _started = true;
 
             Console.ReadKey(true);
             Exit();
@@ -120,7 +121,7 @@ namespace NTMiner {
         }
 
         private static void Exit() {
-            if (_serverContext != null) {
+            if (_started) {
                 RpcRoot.OfficialServer.WsServerNodeService.RemoveNodeAsync(ServerRoot.HostConfig.ThisServerAddress, callback: null);
                 // 等待1秒以使ReportNodeAsync过程完成
                 System.Threading.Thread.Sleep(1000);