Пример #1
0
 public KernelOutputKeywordSet(string dbFileFullName)
 {
     if (string.IsNullOrEmpty(dbFileFullName))
     {
         throw new ArgumentNullException(nameof(dbFileFullName));
     }
     _connectionString = $"filename={dbFileFullName}";
     VirtualRoot.BuildCmdPath <AddOrUpdateKernelOutputKeywordCommand>(path: (message) => {
         InitOnece();
         DataLevel dataLevel = DataLevel.Global;
         if (_dicById.TryGetValue(message.Input.GetId(), out KernelOutputKeywordData exist))
         {
             exist.Update(message.Input);
             exist.SetDataLevel(dataLevel);
             using (LiteDatabase db = new LiteDatabase(_connectionString)) {
                 var col = db.GetCollection <KernelOutputKeywordData>();
                 col.Update(exist);
             }
         }
         else
         {
             KernelOutputKeywordData entity = new KernelOutputKeywordData().Update(message.Input);
             entity.SetDataLevel(dataLevel);
             _dicById.Add(entity.Id, entity);
             if (!_dicByKernelOutputId.TryGetValue(entity.KernelOutputId, out List <IKernelOutputKeyword> list))
             {
                 list = new List <IKernelOutputKeyword>();
                 _dicByKernelOutputId.Add(entity.KernelOutputId, list);
             }
             list.Add(entity);
             using (LiteDatabase db = new LiteDatabase(_connectionString)) {
                 var col = db.GetCollection <KernelOutputKeywordData>();
                 col.Insert(entity);
             }
         }
     }, location: this.GetType());
     VirtualRoot.BuildCmdPath <RemoveKernelOutputKeywordCommand>(path: (message) => {
         InitOnece();
         if (message == null || message.EntityId == Guid.Empty)
         {
             return;
         }
         if (!_dicById.ContainsKey(message.EntityId))
         {
             return;
         }
         KernelOutputKeywordData entity = _dicById[message.EntityId];
         _dicById.Remove(entity.GetId());
         if (_dicByKernelOutputId.TryGetValue(entity.KernelOutputId, out List <IKernelOutputKeyword> list))
         {
             list.Remove(entity);
         }
         using (LiteDatabase db = new LiteDatabase(_connectionString)) {
             var col = db.GetCollection <KernelOutputKeywordData>();
             col.Delete(message.EntityId);
         }
     }, location: this.GetType());
 }
        public LocalKernelOutputKeywordSet(string dbFileFullName)
        {
            _dbFileFullName = dbFileFullName;
            VirtualRoot.BuildCmdPath <SetKernelOutputKeywordCommand>(action: (message) => {
                InitOnece();
                if (message == null || message.Input == null || message.Input.GetId() == Guid.Empty)
                {
                    throw new ArgumentNullException();
                }
                if (_dicById.ContainsKey(message.Input.GetId()))
                {
                    return;
                }
                if (string.IsNullOrEmpty(message.Input.MessageType))
                {
                    throw new ValidationException("MessageType can't be null or empty");
                }
                if (string.IsNullOrEmpty(message.Input.Keyword))
                {
                    throw new ValidationException("Keyword can't be null or empty");
                }
                if (_dicById.Values.Any(a => a.KernelOutputId == message.Input.KernelOutputId && a.Keyword == message.Input.Keyword && a.Id != message.Input.GetId()))
                {
                    throw new ValidationException($"关键字{message.Input.Keyword}已存在");
                }
                KernelOutputKeywordData entity = new KernelOutputKeywordData().Update(message.Input);
                _dicById.Add(entity.Id, entity);
                using (LiteDatabase db = new LiteDatabase(_dbFileFullName)) {
                    var col = db.GetCollection <KernelOutputKeywordData>();
                    col.Upsert(entity);
                }

                VirtualRoot.RaiseEvent(new KernelOutputKeyworSetedEvent(entity));
            });
            VirtualRoot.BuildCmdPath <RemoveKernelOutputKeywordCommand>(action: (message) => {
                InitOnece();
                if (message == null || message.EntityId == Guid.Empty)
                {
                    throw new ArgumentNullException();
                }
                if (!_dicById.ContainsKey(message.EntityId))
                {
                    return;
                }
                KernelOutputKeywordData entity = _dicById[message.EntityId];
                _dicById.Remove(entity.GetId());
                using (LiteDatabase db = new LiteDatabase(_dbFileFullName)) {
                    var col = db.GetCollection <KernelOutputKeywordData>();
                    col.Delete(message.EntityId);
                }

                VirtualRoot.RaiseEvent(new KernelOutputKeywordRemovedEvent(entity));
            });
        }
Пример #3
0
        public KernelOutputKeywordSet(INTMinerRoot root, bool isUseJson)
        {
            _root      = root;
            _isUseJson = isUseJson;
            _root.ServerContextWindow <AddKernelOutputKeywordCommand>("添加内核输出关键字", LogEnum.DevConsole,
                                                                      action: (message) => {
                InitOnece();
                if (message == null || message.Input == null || message.Input.GetId() == Guid.Empty)
                {
                    throw new ArgumentNullException();
                }
                if (_dicById.ContainsKey(message.Input.GetId()))
                {
                    return;
                }
                if (string.IsNullOrEmpty(message.Input.Keyword))
                {
                    throw new ValidationException("EventType name can't be null or empty");
                }
                if (_dicById.Values.Any(a => a.Keyword == message.Input.Keyword && a.Id != message.Input.GetId()))
                {
                    throw new ValidationException($"关键字{message.Input.Keyword}已存在");
                }
                KernelOutputKeywordData entity = new KernelOutputKeywordData().Update(message.Input);
                _dicById.Add(entity.Id, entity);
                var repository = NTMinerRoot.CreateCompositeRepository <KernelOutputKeywordData>(isUseJson);
                repository.Add(entity);

                VirtualRoot.Happened(new KernelOutputKeywordAddedEvent(entity));
            });
            _root.ServerContextWindow <UpdateKernelOutputKeywordCommand>("更新内核输出关键字", LogEnum.DevConsole,
                                                                         action: (message) => {
                InitOnece();
                if (message == null || message.Input == null || message.Input.GetId() == Guid.Empty)
                {
                    throw new ArgumentNullException();
                }
                if (string.IsNullOrEmpty(message.Input.Keyword))
                {
                    throw new ValidationException("EventType name can't be null or empty");
                }
                if (!_dicById.ContainsKey(message.Input.GetId()))
                {
                    return;
                }
                if (_dicById.Values.Any(a => a.Keyword == message.Input.Keyword && a.Id != message.Input.GetId()))
                {
                    throw new ValidationException($"关键字{message.Input.Keyword}已存在");
                }
                KernelOutputKeywordData entity = _dicById[message.Input.GetId()];
                if (ReferenceEquals(entity, message.Input))
                {
                    return;
                }
                entity.Update(message.Input);
                var repository = NTMinerRoot.CreateCompositeRepository <KernelOutputKeywordData>(isUseJson);
                repository.Update(entity);

                VirtualRoot.Happened(new KernelOutputKeywordUpdatedEvent(entity));
            });
            _root.ServerContextWindow <RemoveKernelOutputKeywordCommand>("移除内核输出关键字", LogEnum.DevConsole,
                                                                         action: (message) => {
                InitOnece();
                if (message == null || message.EntityId == Guid.Empty)
                {
                    throw new ArgumentNullException();
                }
                if (!_dicById.ContainsKey(message.EntityId))
                {
                    return;
                }
                KernelOutputKeywordData entity = _dicById[message.EntityId];
                _dicById.Remove(entity.GetId());
                var repository = NTMinerRoot.CreateCompositeRepository <KernelOutputKeywordData>(isUseJson);
                repository.Remove(message.EntityId);

                VirtualRoot.Happened(new KernelOutputKeywordRemovedEvent(entity));
            });
        }
Пример #4
0
 public KernelOutputKeywordSet(string dbFileFullName, bool isServer)
 {
     if (string.IsNullOrEmpty(dbFileFullName))
     {
         throw new ArgumentNullException(nameof(dbFileFullName));
     }
     _connectionString = $"filename={dbFileFullName};journal=false";
     _isServer         = isServer;
     if (!isServer)
     {
         VirtualRoot.BuildCmdPath <LoadKernelOutputKeywordCommand>(action: message => {
             DateTime localTimestamp = VirtualRoot.LocalKernelOutputKeywordSetTimestamp;
             // 如果已知服务器端最新内核输出关键字时间戳不比本地已加载的最新内核输出关键字时间戳新就不用加载了
             if (message.KnowKernelOutputKeywordTimestamp <= Timestamp.GetTimestamp(localTimestamp))
             {
                 return;
             }
             OfficialServer.KernelOutputKeywordService.GetKernelOutputKeywords((response, e) => {
                 if (response.IsSuccess())
                 {
                     KernelOutputKeywordData[] toRemoves = _dicById.Where(a => a.Value.DataLevel == DataLevel.Global).Select(a => a.Value).ToArray();
                     foreach (var item in toRemoves)
                     {
                         _dicById.Remove(item.Id);
                         if (_dicByKernelOutputId.TryGetValue(item.KernelOutputId, out List <IKernelOutputKeyword> list))
                         {
                             list.Remove(item);
                         }
                     }
                     if (response.Data.Count != 0)
                     {
                         foreach (var item in response.Data)
                         {
                             item.SetDataLevel(DataLevel.Global);
                             _dicById.Add(item.Id, item);
                             if (!_dicByKernelOutputId.TryGetValue(item.KernelOutputId, out List <IKernelOutputKeyword> list))
                             {
                                 list = new List <IKernelOutputKeyword>();
                                 _dicByKernelOutputId.Add(item.KernelOutputId, list);
                             }
                             list.Add(item);
                         }
                         if (response.Timestamp != Timestamp.GetTimestamp(localTimestamp))
                         {
                             VirtualRoot.LocalKernelOutputKeywordSetTimestamp = Timestamp.FromTimestamp(response.Timestamp);
                         }
                         CacheServerKernelOutputKeywords(response.Data);
                         VirtualRoot.RaiseEvent(new KernelOutputKeywordLoadedEvent(response.Data));
                     }
                 }
             });
         });
     }
     VirtualRoot.BuildCmdPath <AddOrUpdateKernelOutputKeywordCommand>(action: (message) => {
         InitOnece();
         if (isServer || !DevMode.IsDevMode)
         {
             DataLevel dataLevel = isServer ? DataLevel.Global : DataLevel.Profile;
             if (_dicById.TryGetValue(message.Input.GetId(), out KernelOutputKeywordData exist))
             {
                 exist.Update(message.Input);
                 exist.SetDataLevel(dataLevel);
                 using (LiteDatabase db = new LiteDatabase(_connectionString)) {
                     var col = db.GetCollection <KernelOutputKeywordData>();
                     col.Update(exist);
                 }
                 if (!isServer)
                 {
                     VirtualRoot.RaiseEvent(new UserKernelOutputKeywordUpdatedEvent(message.Id, exist));
                 }
             }
             else
             {
                 KernelOutputKeywordData entity = new KernelOutputKeywordData().Update(message.Input);
                 entity.SetDataLevel(dataLevel);
                 _dicById.Add(entity.Id, entity);
                 if (!_dicByKernelOutputId.TryGetValue(entity.KernelOutputId, out List <IKernelOutputKeyword> list))
                 {
                     list = new List <IKernelOutputKeyword>();
                     _dicByKernelOutputId.Add(entity.KernelOutputId, list);
                 }
                 list.Add(entity);
                 using (LiteDatabase db = new LiteDatabase(_connectionString)) {
                     var col = db.GetCollection <KernelOutputKeywordData>();
                     col.Insert(entity);
                 }
                 if (!isServer)
                 {
                     VirtualRoot.RaiseEvent(new UserKernelOutputKeywordAddedEvent(message.Id, entity));
                 }
             }
         }
         else if (DevMode.IsDevMode)
         {
             OfficialServer.KernelOutputKeywordService.AddOrUpdateKernelOutputKeywordAsync(KernelOutputKeywordData.Create(message.Input), (response, e) => {
                 if (response.IsSuccess())
                 {
                     VirtualRoot.Execute(new LoadKernelOutputKeywordCommand());
                 }
             });
         }
     });
     VirtualRoot.BuildCmdPath <RemoveKernelOutputKeywordCommand>(action: (message) => {
         InitOnece();
         if (isServer || !DevMode.IsDevMode)
         {
             if (message == null || message.EntityId == Guid.Empty)
             {
                 return;
             }
             if (!_dicById.ContainsKey(message.EntityId))
             {
                 return;
             }
             KernelOutputKeywordData entity = _dicById[message.EntityId];
             _dicById.Remove(entity.GetId());
             if (_dicByKernelOutputId.TryGetValue(entity.KernelOutputId, out List <IKernelOutputKeyword> list))
             {
                 list.Remove(entity);
             }
             using (LiteDatabase db = new LiteDatabase(_connectionString)) {
                 var col = db.GetCollection <KernelOutputKeywordData>();
                 col.Delete(message.EntityId);
             }
             if (!isServer)
             {
                 VirtualRoot.RaiseEvent(new UserKernelOutputKeywordRemovedEvent(message.Id, entity));
             }
         }
         else if (DevMode.IsDevMode)
         {
             OfficialServer.KernelOutputKeywordService.RemoveKernelOutputKeyword(message.EntityId, (response, e) => {
                 if (response.IsSuccess())
                 {
                     VirtualRoot.Execute(new LoadKernelOutputKeywordCommand());
                 }
             });
         }
     });
 }
Пример #5
0
 public KernelOutputKeywordSet(string dbFileFullName)
 {
     if (string.IsNullOrEmpty(dbFileFullName))
     {
         throw new ArgumentNullException(nameof(dbFileFullName));
     }
     _connectionString = $"filename={dbFileFullName}";
     VirtualRoot.BuildCmdPath <AddOrUpdateKernelOutputKeywordCommand>(location: this.GetType(), LogEnum.DevConsole, path: (message) => {
         InitOnece();
         DataLevel dataLevel = DataLevel.Global;
         if (_dicById.TryGetValue(message.Input.GetId(), out KernelOutputKeywordData exist))
         {
             exist.Update(message.Input);
             exist.SetDataLevel(dataLevel);
             using (LiteDatabase db = new LiteDatabase(_connectionString)) {
                 var col = db.GetCollection <KernelOutputKeywordData>();
                 col.Update(exist);
             }
         }
         else
         {
             KernelOutputKeywordData entity = new KernelOutputKeywordData().Update(message.Input);
             entity.SetDataLevel(dataLevel);
             _dicById.Add(entity.Id, entity);
             if (!_dicByKernelOutputId.TryGetValue(entity.KernelOutputId, out List <IKernelOutputKeyword> list))
             {
                 list = new List <IKernelOutputKeyword>();
                 _dicByKernelOutputId.Add(entity.KernelOutputId, list);
             }
             list.Add(entity);
             using (LiteDatabase db = new LiteDatabase(_connectionString)) {
                 var col = db.GetCollection <KernelOutputKeywordData>();
                 col.Insert(entity);
             }
         }
     });
     VirtualRoot.BuildCmdPath <RemoveKernelOutputKeywordCommand>(location: this.GetType(), LogEnum.DevConsole, path: (message) => {
         InitOnece();
         if (message == null || message.EntityId == Guid.Empty)
         {
             return;
         }
         if (!_dicById.ContainsKey(message.EntityId))
         {
             return;
         }
         KernelOutputKeywordData entity = _dicById[message.EntityId];
         _dicById.Remove(entity.GetId());
         if (_dicByKernelOutputId.TryGetValue(entity.KernelOutputId, out List <IKernelOutputKeyword> list))
         {
             list.Remove(entity);
             if (list.Count == 0)
             {
                 _dicByKernelOutputId.Remove(entity.KernelOutputId);
             }
         }
         using (LiteDatabase db = new LiteDatabase(_connectionString)) {
             var col = db.GetCollection <KernelOutputKeywordData>();
             col.Delete(message.EntityId);
         }
     });
     VirtualRoot.BuildCmdPath <ClearKernelOutputKeywordsCommand>(this.GetType(), LogEnum.DevConsole, message => {
         InitOnece();
         if (message == null || message.ExceptedOutputIds == null || message.ExceptedOutputIds.Length == 0)
         {
             return;
         }
         var toRemoves = _dicById.Where(a => !message.ExceptedOutputIds.Contains(a.Value.KernelOutputId)).Select(a => a.Key).ToArray();
         foreach (var item in toRemoves)
         {
             VirtualRoot.Execute(new RemoveKernelOutputKeywordCommand(item));
         }
     });
 }