ntminer 6 years ago
parent
commit
e5fde8a24c

+ 10 - 2
src/NTMinerDataObjects/MinerServer/ReportResponse.cs

@@ -1,6 +1,11 @@
-namespace NTMiner.MinerServer {
+using System.Collections.Generic;
+
+namespace NTMiner.MinerServer {
     public class ReportResponse : ResponseBase {
-        public ReportResponse() { }
+        public ReportResponse() {
+            this.ServerState = ServerState.Empty;
+            this.NewServerMessages = new List<ServerMessageData>();
+        }
 
         public static ReportResponse Ok(ServerState serverState) {
             return new ReportResponse() {
@@ -12,5 +17,8 @@
         }
 
         public ServerState ServerState { get; set; }
+
+        // 基于请求携带的LocalServerMessageTimestamp,当新消息条数较少时直接在响应中携带给请求端
+        public List<ServerMessageData> NewServerMessages { get; set; }
     }
 }

+ 12 - 2
src/NTMinerRpcClient/ServerMessage/ServerMessageSet.cs

@@ -159,11 +159,21 @@ namespace NTMiner.ServerMessage {
         }
 
         public List<ServerMessageData> GetServerMessages(DateTime timeStamp) {
+            var list = new List<ServerMessageData>();
             if (string.IsNullOrEmpty(_connectionString)) {
-                return new List<ServerMessageData>();
+                return list;
             }
             InitOnece();
-            return _linkedList.Where(a => a.Timestamp >= timeStamp).ToList();
+            foreach (var item in _linkedList) {
+                if (item.Timestamp >= timeStamp) {
+                    list.Add(item);
+                }
+                else {
+                    // 这是个链表,最新的消息在前
+                    break;
+                }
+            }
+            return list;
         }
 
         private bool _isInited = false;

+ 9 - 8
src/NTMinerServices/Controllers/ReportController.cs

@@ -7,12 +7,9 @@ namespace NTMiner.Controllers {
     public class ReportController : ApiControllerBase, IReportController {
         [HttpPost]
         public ReportResponse ReportSpeed([FromBody]SpeedData speedData) {
-            ReportResponse response;
             try {
                 if (speedData == null) {
-                    response = ResponseBase.InvalidInput<ReportResponse>();
-                    response.ServerState = ServerState.Empty;
-                    return response;
+                    return ResponseBase.InvalidInput<ReportResponse>();
                 }
                 ClientData clientData = HostRoot.Instance.ClientSet.GetByClientId(speedData.ClientId);
                 if (clientData == null) {
@@ -24,16 +21,20 @@ namespace NTMiner.Controllers {
                 }
                 if (Version.TryParse(speedData.Version, out Version version)) {
                     string jsonVersionKey = MainAssemblyInfo.GetServerJsonVersion(version);
-                    response = ReportResponse.Ok(HostRoot.GetServerState(jsonVersionKey));
+                    var response = ReportResponse.Ok(HostRoot.GetServerState(jsonVersionKey));
+                    if (speedData.LocalServerMessageTimestamp.AddSeconds(1) < HostRoot.Instance.ServerMessageTimestamp) {
+                        var list = HostRoot.Instance.ServerMessageSet.GetServerMessages(speedData.LocalServerMessageTimestamp);
+                        if (list.Count < 10) {
+                            response.NewServerMessages.AddRange(list);
+                        }
+                    }
                     return response;
                 }
             }
             catch (Exception e) {
                 Logger.ErrorDebugLine(e);
             }
-            response = ResponseBase.InvalidInput<ReportResponse>();
-            response.ServerState = ServerState.Empty;
-            return response;
+            return ResponseBase.InvalidInput<ReportResponse>();
         }
 
         [HttpPost]