ntminer 6 years ago
parent
commit
d09639ef29

+ 7 - 2
src/NTMiner/Report.cs

@@ -198,10 +198,15 @@ namespace NTMiner {
         private static void ReportSpeed() {
             try {
                 SpeedData data = CreateSpeedData();
-                Server.ReportService.ReportSpeedAsync(NTKeyword.OfficialServerHost, data, response=> {
+                Server.ReportService.ReportSpeedAsync(NTKeyword.OfficialServerHost, data, response => {
                     if (response.IsSuccess()) {
                         AppVersionChangedEvent.PublishIfNewVersion(response.ServerState.MinerClientVersion);
-                        VirtualRoot.Execute(new LoadNewServerMessageCommand(response.ServerState.MessageTimestamp));
+                        if (response.NewServerMessages.Count != 0) {
+                            VirtualRoot.Execute(new ReceiveServerMessageCommand(response.NewServerMessages));
+                        }
+                        else {
+                            VirtualRoot.Execute(new LoadNewServerMessageCommand(response.ServerState.MessageTimestamp));
+                        }
                     }
                 });
             }

+ 32 - 21
src/NTMinerRpcClient/ServerMessage/ServerMessageSet.cs

@@ -29,30 +29,13 @@ namespace NTMiner.ServerMessage {
                     }
                     OfficialServer.ServerMessageService.GetServerMessagesAsync(localTimestamp, (response, e) => {
                         if (response.IsSuccess() && response.Data.Count > 0) {
-                            LinkedList<ServerMessageData> data = new LinkedList<ServerMessageData>();
-                            lock (_locker) {
-                                DateTime maxTime = localTimestamp;
-                                foreach (var item in response.Data.OrderBy(a => a.Timestamp)) {
-                                    if (item.Timestamp > maxTime) {
-                                        maxTime = item.Timestamp;
-                                    }
-                                    data.AddLast(item);
-                                    _linkedList.AddFirst(item);
-                                }
-                                if (maxTime != localTimestamp) {
-                                    VirtualRoot.LocalServerMessageSetTimestamp = maxTime;
-                                }
-                            }
-                            using (LiteDatabase db = new LiteDatabase(_connectionString)) {
-                                var col = db.GetCollection<ServerMessageData>();
-                                foreach (var item in data) {
-                                    col.Insert(item);
-                                }
-                            }
-                            VirtualRoot.RaiseEvent(new NewServerMessageLoadedEvent(data));
+                            ReceiveServerMessage(response.Data);
                         }
                     });
                 });
+                VirtualRoot.BuildCmdPath<ReceiveServerMessageCommand>(action: message => {
+                    ReceiveServerMessage(message.Data);
+                });
             }
             VirtualRoot.BuildCmdPath<AddOrUpdateServerMessageCommand>(action: message => {
                 if (string.IsNullOrEmpty(_connectionString)) {
@@ -158,6 +141,34 @@ namespace NTMiner.ServerMessage {
             });
         }
 
+        private void ReceiveServerMessage(List<ServerMessageData> data) {
+            if (data == null) {
+                return;
+            }
+            DateTime localTimestamp = VirtualRoot.LocalServerMessageSetTimestamp;
+            LinkedList<ServerMessageData> linkedList = new LinkedList<ServerMessageData>();
+            lock (_locker) {
+                DateTime maxTime = localTimestamp;
+                foreach (var item in data.OrderBy(a => a.Timestamp)) {
+                    if (item.Timestamp > maxTime) {
+                        maxTime = item.Timestamp;
+                    }
+                    linkedList.AddLast(item);
+                    _linkedList.AddFirst(item);
+                }
+                if (maxTime != localTimestamp) {
+                    VirtualRoot.LocalServerMessageSetTimestamp = maxTime;
+                }
+            }
+            using (LiteDatabase db = new LiteDatabase(_connectionString)) {
+                var col = db.GetCollection<ServerMessageData>();
+                foreach (var item in linkedList) {
+                    col.Insert(item);
+                }
+            }
+            VirtualRoot.RaiseEvent(new NewServerMessageLoadedEvent(linkedList));
+        }
+
         public List<ServerMessageData> GetServerMessages(DateTime timeStamp) {
             var list = new List<ServerMessageData>();
             if (string.IsNullOrEmpty(_connectionString)) {

+ 9 - 0
src/NTMinerlib/Messages.cs

@@ -165,6 +165,15 @@ namespace NTMiner {
         public ServerMessagesClearedEvent() { }
     }
 
+    [MessageType(description: "接收从服务器得到的服务器消息")]
+    public class ReceiveServerMessageCommand : Cmd {
+        public ReceiveServerMessageCommand(List<ServerMessageData> data) {
+            this.Data = data;
+        }
+
+        public List<ServerMessageData> Data { get; private set; }
+    }
+
     [MessageType(description: "从服务器获取新的服务器消息")]
     public class LoadNewServerMessageCommand : Cmd {
         public LoadNewServerMessageCommand() {