ntminer 6 years ago
parent
commit
f844724909

+ 9 - 0
src/NTMinerDataObjects/MinerServer/ServerMessageData.cs

@@ -4,6 +4,15 @@ namespace NTMiner.MinerServer {
     public class ServerMessageData : IServerMessage {
         public ServerMessageData() { }
 
+        public ServerMessageData(IServerMessage data) {
+            Id = data.Id == Guid.Empty ? Guid.NewGuid() : data.Id;
+            Provider = data.Provider;
+            MessageType = data.MessageType;
+            Content = data.Content;
+            Timestamp = data.Timestamp == DateTime.MinValue ? DateTime.Now : data.Timestamp;
+            IsDeleted = false;
+        }
+
         public Guid GetId() {
             return this.Id;
         }

+ 1 - 7
src/NTMinerServices/Controllers/ServerMessageController.cs

@@ -24,13 +24,7 @@ namespace NTMiner.Controllers {
                 if (!request.IsValid(User, Sign, Timestamp, ClientIp, out ResponseBase response)) {
                     return response;
                 }
-                var entity = HostRoot.Instance.ServerMessageSet.FirstOrDefault(a => a.Id == request.Data.Id);
-                if (entity != null) {
-                    VirtualRoot.Execute(new UpdateServerMessageCommand(request.Data));
-                }
-                else {
-                    VirtualRoot.Execute(new AddServerMessageCommand(request.Data));
-                }
+                VirtualRoot.Execute(new AddOrUpdateServerMessageCommand(request.Data));
                 return ResponseBase.Ok();
             }
             catch (Exception e) {

+ 3 - 9
src/NTMinerlib/Messages.cs

@@ -179,15 +179,9 @@ namespace NTMiner {
         public LinkedList<ServerMessageData> Data { get; }
     }
 
-    [MessageType(description: "添加服务器消息")]
-    public class AddServerMessageCommand : AddEntityCommand<IServerMessage> {
-        public AddServerMessageCommand(IServerMessage input) : base(input) {
-        }
-    }
-
-    [MessageType(description: "更新服务器消息")]
-    public class UpdateServerMessageCommand : UpdateEntityCommand<IServerMessage> {
-        public UpdateServerMessageCommand(IServerMessage input) : base(input) {
+    [MessageType(description: "添加或修改服务器消息")]
+    public class AddOrUpdateServerMessageCommand : AddEntityCommand<IServerMessage> {
+        public AddOrUpdateServerMessageCommand(IServerMessage input) : base(input) {
         }
     }
 

+ 25 - 45
src/NTMinerlib/ServerMessage/ServerMessageSet.cs

@@ -28,64 +28,44 @@ namespace NTMiner.ServerMessage {
                         }
                     });
             }
-            VirtualRoot.BuildCmdPath<AddServerMessageCommand>(action: message => {
-                if (string.IsNullOrEmpty(_connectionString)) {
-                    return;
-                }
-                InitOnece();
-                var data = new ServerMessageData {
-                    Id = message.Input.Id == Guid.Empty ? Guid.NewGuid() : message.Input.Id,
-                    Provider = message.Input.Provider,
-                    MessageType = message.Input.MessageType,
-                    Content = message.Input.Content,
-                    Timestamp = message.Input.Timestamp == DateTime.MinValue ? DateTime.Now : message.Input.Timestamp,
-                    IsDeleted = false
-                };
-                if (_isServer) {
-                    List<ServerMessageData> toRemoves = new List<ServerMessageData>();
-                    lock (_locker) {
-                        _linkedList.AddFirst(data);
-                        while (_linkedList.Count > NTKeyword.ServerMessageSetCapacity) {
-                            var toRemove = _linkedList.Last;
-                            _linkedList.RemoveLast();
-                            toRemoves.Add(toRemove.Value);
-                        }
-                    }
-                    if (toRemoves.Count != 0) {
-                        using (LiteDatabase db = new LiteDatabase(_connectionString)) {
-                            var col = db.GetCollection<ServerMessageData>();
-                            foreach (var item in toRemoves) {
-                                col.Delete(item.Id);
-                            }
-                        }
-                    }
-                    using (LiteDatabase db = new LiteDatabase(_connectionString)) {
-                        var col = db.GetCollection<ServerMessageData>();
-                        col.Insert(data);
-                    }
-                }
-                else {
-
-                    VirtualRoot.Execute(new LoadNewServerMessageCommand());
-                }
-            });
-            VirtualRoot.BuildCmdPath<UpdateServerMessageCommand>(action: message => {
+            VirtualRoot.BuildCmdPath<AddOrUpdateServerMessageCommand>(action: message => {
                 if (string.IsNullOrEmpty(_connectionString)) {
                     return;
                 }
                 InitOnece();
                 if (_isServer) {
                     ServerMessageData exist;
+                    List<ServerMessageData> toRemoves = new List<ServerMessageData>();
+                    ServerMessageData data = null;
                     lock (_locker) {
                         exist = _linkedList.FirstOrDefault(a => a.Id == message.Input.Id);
                         if (exist != null) {
                             exist.Update(message.Input);
                         }
+                        else {
+                            data = new ServerMessageData(message.Input);
+                            _linkedList.AddFirst(data);
+                            while (_linkedList.Count > NTKeyword.ServerMessageSetCapacity) {
+                                toRemoves.Add(_linkedList.Last.Value);
+                                _linkedList.RemoveLast();
+                            }
+                        }
                     }
                     if (exist != null) {
                         using (LiteDatabase db = new LiteDatabase(_connectionString)) {
                             var col = db.GetCollection<ServerMessageData>();
-                            col.Upsert(exist);
+                            col.Update(exist);
+                        }
+                    }
+                    else {
+                        using (LiteDatabase db = new LiteDatabase(_connectionString)) {
+                            var col = db.GetCollection<ServerMessageData>();
+                            if (toRemoves.Count != 0) {
+                                foreach (var item in toRemoves) {
+                                    col.Delete(item.Id);
+                                }
+                            }
+                            col.Insert(data);
                         }
                     }
                 }
@@ -104,13 +84,13 @@ namespace NTMiner.ServerMessage {
                     lock (_locker) {
                         exist = _linkedList.FirstOrDefault(a => a.Id == message.EntityId);
                         if (exist != null) {
-                            _linkedList.Remove(exist);
+                            exist.IsDeleted = true;
                         }
                     }
                     if (exist != null) {
                         using (LiteDatabase db = new LiteDatabase(_connectionString)) {
                             var col = db.GetCollection<ServerMessageData>();
-                            col.Delete(message.EntityId);
+                            col.Update(exist);
                         }
                     }
                 }