ntminer 6 years ago
parent
commit
b8c4f860c0

+ 11 - 11
src/NTMiner/NTMinerRoot.cs

@@ -88,16 +88,16 @@ namespace NTMiner {
                                 if (!string.IsNullOrEmpty(serverJson)) {
                                     SpecialPath.WriteServerJsonFile(serverJson);
                                 }
-                                OfficialServer.GetJsonFileVersionAsync(MainAssemblyInfo.ServerJsonFileName, (serverJsonFileVersion, minerClientVersion, serverTime, serverMessageTime) => {
-                                    SetServerJsonVersion(serverJsonFileVersion);
-                                    AppVersionChangedEvent.PublishIfNewVersion(minerClientVersion); 
-                                    if (Math.Abs((DateTime.Now - serverTime).TotalSeconds) < Timestamp.DesyncSeconds) {
+                                OfficialServer.GetJsonFileVersionAsync(MainAssemblyInfo.ServerJsonFileName, serverState => {
+                                    SetServerJsonVersion(serverState.JsonFileVersion);
+                                    AppVersionChangedEvent.PublishIfNewVersion(serverState.MinerClientVersion); 
+                                    if (Math.Abs((long)Timestamp.GetTimestamp() - (long)serverState.Time) < Timestamp.DesyncSeconds) {
                                         Logger.OkDebugLine("时间同步");
                                     }
                                     else {
-                                        Write.UserWarn($"本机时间和服务器时间不同步,请调整,本地:{DateTime.Now},服务器:{serverTime}");
+                                        Write.UserWarn($"本机时间和服务器时间不同步,请调整,本地:{DateTime.Now},服务器:{serverState.GetTime()}");
                                     }
-                                    VirtualRoot.Execute(new LoadNewServerMessageCommand(serverMessageTime));
+                                    VirtualRoot.Execute(new LoadNewServerMessageCommand(serverState.MessageTimestamp));
                                 });
                             }
                             else {
@@ -135,14 +135,14 @@ namespace NTMiner {
         }
 
         private void RefreshServerJsonFile() {
-            OfficialServer.GetJsonFileVersionAsync(MainAssemblyInfo.ServerJsonFileName, (serverJsonFileVersion, minerClientVersion, serverTime, serverMessageTime) => {
-                AppVersionChangedEvent.PublishIfNewVersion(minerClientVersion);
+            OfficialServer.GetJsonFileVersionAsync(MainAssemblyInfo.ServerJsonFileName, serverState => {
+                AppVersionChangedEvent.PublishIfNewVersion(serverState.MinerClientVersion);
                 string localServerJsonFileVersion = GetServerJsonVersion();
-                if (!string.IsNullOrEmpty(serverJsonFileVersion) && localServerJsonFileVersion != serverJsonFileVersion) {
+                if (!string.IsNullOrEmpty(serverState.JsonFileVersion) && localServerJsonFileVersion != serverState.JsonFileVersion) {
                     GetAliyunServerJson((data) => {
                         string rawJson = Encoding.UTF8.GetString(data);
                         SpecialPath.WriteServerJsonFile(rawJson);
-                        SetServerJsonVersion(serverJsonFileVersion);
+                        SetServerJsonVersion(serverState.JsonFileVersion);
                         ReInitServerJson();
                         // 作业模式下界面是禁用的,所以这里的初始化isWork必然是false
                         ContextReInit(isWork: VirtualRoot.IsMinerStudio);
@@ -152,7 +152,7 @@ namespace NTMiner {
                 else {
                     Write.DevDebug("server.json没有新版本");
                 }
-                VirtualRoot.Execute(new LoadNewServerMessageCommand(serverMessageTime));
+                VirtualRoot.Execute(new LoadNewServerMessageCommand(serverState.MessageTimestamp));
             });
         }
 

+ 20 - 0
src/NTMinerDataObjects/MinerServer/ServerState.cs

@@ -0,0 +1,20 @@
+using System;
+
+namespace NTMiner.MinerServer {
+    public class ServerState {
+        public string JsonFileVersion { get; set; }
+        public string MinerClientVersion { get; set; }
+        public ulong Time { get; set; }
+        public ulong MessageTimestamp { get; set; }
+
+        public DateTime GetTime() {
+            return Timestamp.FromTimestamp(Time);
+        }
+
+        public DateTime GetMessageTImestamp {
+            get {
+                return Timestamp.FromTimestamp(MessageTimestamp);
+            }
+        }
+    }
+}

+ 1 - 0
src/NTMinerDataObjects/NTMinerDataObjects.csproj

@@ -92,6 +92,7 @@
     <Compile Include="MinerServer\ServerMessageData.cs" />
     <Compile Include="MinerServer\ServerMessagesRequest.cs" />
     <Compile Include="MinerServer\ServerMessageType.cs" />
+    <Compile Include="MinerServer\ServerState.cs" />
     <Compile Include="Profile\GpuProfileExtension.cs" />
     <Compile Include="Core\IKernelOutputKeyword.cs" />
     <Compile Include="MinerClient\ILocalMessage.cs" />

+ 11 - 10
src/NTMinerRpcClient/OfficialServer.cs

@@ -82,15 +82,15 @@ namespace NTMiner {
         }
 
         #region GetJsonFileVersionAsync
-        public static void GetJsonFileVersionAsync(string key, Action<string/*jsonFileVersion*/, string/*minerClientVersion*/, DateTime/*serverTime*/, DateTime/*serverMessageTime*/> callback) {
+        public static void GetJsonFileVersionAsync(string key, Action<ServerState> callback) {
             AppSettingRequest request = new AppSettingRequest {
                 Key = key
             };
             PostAsync("AppSetting", nameof(IAppSettingController.GetJsonFileVersion), null, request, (string text, Exception e) => {
                 string jsonFileVersion = string.Empty;
                 string minerClientVersion = string.Empty;
-                DateTime serverTime = DateTime.Now;
-                DateTime serverMessageTime = Timestamp.UnixBaseTime;
+                ulong time = Timestamp.GetTimestamp();
+                ulong messageTimestamp = 0;
                 if (!string.IsNullOrEmpty(text)) {
                     text = text.Trim();
                     string[] parts = text.Split(new char[] { '|' });
@@ -101,17 +101,18 @@ namespace NTMiner {
                         minerClientVersion = parts[1];
                     }
                     if (parts.Length > 2) {
-                        if (ulong.TryParse(parts[2], out ulong timestamp)) {
-                            serverTime = Timestamp.FromTimestamp(timestamp);
-                        }
+                        ulong.TryParse(parts[2], out time);
                     }
                     if (parts.Length > 3) {
-                        if (ulong.TryParse(parts[3], out ulong timestamp)) {
-                            serverMessageTime = Timestamp.FromTimestamp(timestamp);
-                        }
+                        ulong.TryParse(parts[3], out messageTimestamp);
                     }
                 }
-                callback?.Invoke(jsonFileVersion, minerClientVersion, serverTime, serverMessageTime);
+                callback?.Invoke(new ServerState {
+                    JsonFileVersion = jsonFileVersion,
+                    MinerClientVersion = minerClientVersion,
+                    MessageTimestamp = messageTimestamp,
+                    Time = time
+                });
             }, timeountMilliseconds: 10 * 1000);
         }
         #endregion

+ 7 - 7
src/NTMinerRpcClient/ServerMessage/ServerMessageSet.cs

@@ -19,16 +19,16 @@ namespace NTMiner.ServerMessage {
             _isServer = isServer;
             if (!_isServer) {
                 VirtualRoot.BuildCmdPath<LoadNewServerMessageCommand>(action: message => {
-                    DateTime dateTime = VirtualRoot.LocalServerMessageSetTimestamp;
+                    DateTime localTimestamp = VirtualRoot.LocalServerMessageSetTimestamp;
                     // 如果已知服务器端最新消息的时间戳不比本地已加载的最新消息新就不用加载了
-                    if (message.KnowServerMessageTimestamp <= dateTime) {
+                    if (message.KnowServerMessageTimestamp <= Timestamp.GetTimestamp(localTimestamp)) {
                         return;
                     }
-                    OfficialServer.ServerMessageService.GetServerMessagesAsync(dateTime, (response, e) => {
+                    OfficialServer.ServerMessageService.GetServerMessagesAsync(localTimestamp, (response, e) => {
                         if (response.IsSuccess() && response.Data.Count > 0) {
                             LinkedList<ServerMessageData> data = new LinkedList<ServerMessageData>();
                             lock (_locker) {
-                                DateTime maxTime = dateTime;
+                                DateTime maxTime = localTimestamp;
                                 foreach (var item in response.Data.OrderBy(a => a.Timestamp)) {
                                     if (item.Timestamp > maxTime) {
                                         maxTime = item.Timestamp;
@@ -36,7 +36,7 @@ namespace NTMiner.ServerMessage {
                                     data.AddLast(item);
                                     _linkedList.AddFirst(item);
                                 }
-                                if (maxTime != dateTime) {
+                                if (maxTime != localTimestamp) {
                                     VirtualRoot.LocalServerMessageSetTimestamp = maxTime;
                                 }
                             }
@@ -96,7 +96,7 @@ namespace NTMiner.ServerMessage {
                 else {
                     OfficialServer.ServerMessageService.AddOrUpdateServerMessageAsync(new ServerMessageData(message.Input), (response, ex) => {
                         if (response.IsSuccess()) {
-                            VirtualRoot.Execute(new LoadNewServerMessageCommand(DateTime.MaxValue));
+                            VirtualRoot.Execute(new LoadNewServerMessageCommand());
                         }
                     });
                 }
@@ -126,7 +126,7 @@ namespace NTMiner.ServerMessage {
                 }
                 else {
                     OfficialServer.ServerMessageService.MarkDeleteServerMessageAsync(message.EntityId, (response, ex) => {
-                        VirtualRoot.Execute(new LoadNewServerMessageCommand(DateTime.MaxValue));
+                        VirtualRoot.Execute(new LoadNewServerMessageCommand());
                     });
                 }
             });

+ 6 - 2
src/NTMinerlib/Messages.cs

@@ -167,11 +167,15 @@ namespace NTMiner {
 
     [MessageType(description: "从服务器获取新的服务器消息")]
     public class LoadNewServerMessageCommand : Cmd {
-        public LoadNewServerMessageCommand(DateTime knowServerMessageTimestamp) {
+        public LoadNewServerMessageCommand() {
+            this.KnowServerMessageTimestamp = Timestamp.GetTimestamp();
+        }
+
+        public LoadNewServerMessageCommand(ulong knowServerMessageTimestamp) {
             this.KnowServerMessageTimestamp = knowServerMessageTimestamp;
         }
 
-        public DateTime KnowServerMessageTimestamp { get; private set; }
+        public ulong KnowServerMessageTimestamp { get; private set; }
     }
 
     [MessageType(description: "从服务器获取到新的服务器消息后")]