private void Init() { lock (_locker) { if (!_isInited) { var repository = _context.CreateCompositeRepository <SysDicItemData>(); foreach (var item in repository.GetAll()) { if (!_dicById.ContainsKey(item.GetId())) { _dicById.Add(item.GetId(), item); } if (!_dicByDicId.ContainsKey(item.DicId)) { _dicByDicId.Add(item.DicId, new Dictionary <string, SysDicItemData>(StringComparer.OrdinalIgnoreCase)); } if (!_dicByDicId[item.DicId].ContainsKey(item.Code)) { _dicByDicId[item.DicId].Add(item.Code, item); } } _isInited = true; } } }
protected override void Init() { var repository = _context.CreateCompositeRepository <PoolData>(); List <PoolData> data = repository.GetAll().ToList(); foreach (var item in data) { if (!_dicById.ContainsKey(item.GetId())) { _dicById.Add(item.GetId(), item); } } }
private void Init() { lock (_locker) { if (!_isInited) { var repository = _context.CreateCompositeRepository <PoolData>(); List <PoolData> data = repository.GetAll().ToList(); foreach (var item in data) { if (!_dicById.ContainsKey(item.GetId())) { _dicById.Add(item.GetId(), item); } } _isInited = true; } } }
public SysDicItemSet(IServerContext context) { _context = context; _context.AddCmdPath <AddSysDicItemCommand>("添加系统字典项", LogEnum.DevConsole, action: (message) => { InitOnece(); if (message == null || message.Input == null || message.Input.GetId() == Guid.Empty) { throw new ArgumentNullException(); } if (string.IsNullOrEmpty(message.Input.Code)) { throw new ValidationException("dicitem code can't be null or empty"); } if (_dicById.ContainsKey(message.Input.GetId())) { return; } if (!_dicByDicId.ContainsKey(message.Input.DicId)) { _dicByDicId.Add(message.Input.DicId, new Dictionary <string, SysDicItemData>(StringComparer.OrdinalIgnoreCase)); } if (_dicByDicId[message.Input.DicId].ContainsKey(message.Input.Code)) { throw new ValidationException("编码重复"); } SysDicItemData entity = new SysDicItemData().Update(message.Input); _dicById.Add(entity.Id, entity); _dicByDicId[message.Input.DicId].Add(entity.Code, entity); var repository = context.CreateCompositeRepository <SysDicItemData>(); repository.Add(entity); VirtualRoot.RaiseEvent(new SysDicItemAddedEvent(message.MessageId, entity)); }, location: this.GetType()); _context.AddCmdPath <UpdateSysDicItemCommand>("更新系统字典项", LogEnum.DevConsole, action: (message) => { InitOnece(); if (message == null || message.Input == null || message.Input.GetId() == Guid.Empty) { throw new ArgumentNullException(); } if (string.IsNullOrEmpty(message.Input.Code)) { throw new ValidationException("sysDicItem code can't be null or empty"); } if (!_dicById.TryGetValue(message.Input.GetId(), out SysDicItemData entity)) { return; } if (ReferenceEquals(entity, message.Input)) { return; } string oldCode = entity.Code; entity.Update(message.Input); // 如果编码变更了 if (oldCode != entity.Code) { _dicByDicId[entity.DicId].Remove(oldCode); _dicByDicId[entity.DicId].Add(entity.Code, entity); } var repository = context.CreateCompositeRepository <SysDicItemData>(); repository.Update(entity); VirtualRoot.RaiseEvent(new SysDicItemUpdatedEvent(message.MessageId, entity)); }, location: this.GetType()); _context.AddCmdPath <RemoveSysDicItemCommand>("移除系统字典项", LogEnum.DevConsole, action: (message) => { InitOnece(); if (message == null || message.EntityId == Guid.Empty) { throw new ArgumentNullException(); } if (!_dicById.TryGetValue(message.EntityId, out SysDicItemData entity) || !_context.SysDicSet.TryGetSysDic(entity.DicId, out ISysDic sysDic)) { return; } bool isKernelBrand = sysDic.Code == NTKeyword.KernelBrandSysDicCode; bool isPoolBrand = sysDic.Code == NTKeyword.PoolBrandSysDicCode; bool isAlgo = sysDic.Code == NTKeyword.AlgoSysDicCode; // TODO:如果是内核品牌、矿池品牌、算法 _dicById.Remove(entity.Id); if (_dicByDicId.TryGetValue(entity.DicId, out Dictionary <string, SysDicItemData> dicItemDic)) { dicItemDic.Remove(entity.Code); } var repository = context.CreateCompositeRepository <SysDicItemData>(); repository.Remove(entity.Id); VirtualRoot.RaiseEvent(new SysDicItemRemovedEvent(message.MessageId, entity)); }, location: this.GetType()); }
public PoolSet(IServerContext context) { _context = context; context.AddCmdPath <AddPoolCommand>(LogEnum.DevConsole, action: (message) => { InitOnece(); if (message == null || message.Input == null || message.Input.GetId() == Guid.Empty) { throw new ArgumentNullException(); } if (!context.CoinSet.Contains(message.Input.CoinId)) { throw new ValidationException("there is no coin with id " + message.Input.CoinId); } if (string.IsNullOrEmpty(message.Input.Server)) { throw new ValidationException("pool poolurl can't be null or empty"); } if (_dicById.ContainsKey(message.Input.GetId())) { return; } PoolData entity = new PoolData().Update(message.Input); _dicById.Add(entity.Id, entity); var repository = context.CreateCompositeRepository <PoolData>(); repository.Add(entity); VirtualRoot.RaiseEvent(new PoolAddedEvent(message.MessageId, entity)); if (context.CoinSet.TryGetCoin(message.Input.CoinId, out ICoin coin)) { ICoinKernel[] coinKernels = context.CoinKernelSet.AsEnumerable().Where(a => a.CoinId == coin.GetId()).ToArray(); foreach (ICoinKernel coinKernel in coinKernels) { Guid poolKernelId = Guid.NewGuid(); var poolKernel = new PoolKernelData() { Id = poolKernelId, Args = string.Empty, KernelId = coinKernel.KernelId, PoolId = message.Input.GetId() }; VirtualRoot.Execute(new AddPoolKernelCommand(poolKernel)); } } }, location: this.GetType()); context.AddCmdPath <UpdatePoolCommand>(LogEnum.DevConsole, action: (message) => { InitOnece(); if (message == null || message.Input == null || message.Input.GetId() == Guid.Empty) { throw new ArgumentNullException(); } if (!context.CoinSet.Contains(message.Input.CoinId)) { throw new ValidationException("there is no coin with id " + message.Input.CoinId); } if (string.IsNullOrEmpty(message.Input.Server)) { throw new ValidationException("pool poolurl can't be null or empty"); } if (string.IsNullOrEmpty(message.Input.Name)) { throw new ValidationException("pool name can't be null or empty"); } if (!_dicById.TryGetValue(message.Input.GetId(), out PoolData entity)) { return; } if (ReferenceEquals(entity, message.Input)) { return; } entity.Update(message.Input); var repository = context.CreateCompositeRepository <PoolData>(); repository.Update(new PoolData().Update(message.Input)); VirtualRoot.RaiseEvent(new PoolUpdatedEvent(message.MessageId, entity)); }, location: this.GetType()); context.AddCmdPath <RemovePoolCommand>(LogEnum.DevConsole, action: (message) => { InitOnece(); if (message == null || message.EntityId == Guid.Empty) { throw new ArgumentNullException(); } if (!_dicById.ContainsKey(message.EntityId)) { return; } PoolData entity = _dicById[message.EntityId]; _dicById.Remove(entity.GetId()); var repository = context.CreateCompositeRepository <PoolData>(); repository.Remove(message.EntityId); VirtualRoot.RaiseEvent(new PoolRemovedEvent(message.MessageId, entity)); Guid[] toRemoves = context.PoolKernelSet.AsEnumerable().Where(a => a.PoolId == message.EntityId).Select(a => a.GetId()).ToArray(); foreach (Guid poolKernelId in toRemoves) { VirtualRoot.Execute(new RemovePoolKernelCommand(poolKernelId)); } }, location: this.GetType()); context.AddEventPath <PoolDelayPickedEvent>("提取了矿池延时后记录进内存", LogEnum.DevConsole, action: message => { if (message.IsDual) { if (_poolDelayById.TryGetValue(message.PoolId, out PoolDelay poolDelay)) { poolDelay.DualCoinPoolDelayText = message.PoolDelayText; } else { _poolDelayById.Add(message.PoolId, new PoolDelay { MainCoinPoolDelayText = string.Empty, DualCoinPoolDelayText = message.PoolDelayText }); } } else { if (_poolDelayById.TryGetValue(message.PoolId, out PoolDelay poolDelay)) { poolDelay.MainCoinPoolDelayText = message.PoolDelayText; } else { _poolDelayById.Add(message.PoolId, new PoolDelay { MainCoinPoolDelayText = message.PoolDelayText, DualCoinPoolDelayText = string.Empty }); } } }, location: this.GetType()); }
public SysDicItemSet(IServerContext context) { _context = context; _context.AddCmdPath <AddSysDicItemCommand>(LogEnum.DevConsole, action: (message) => { InitOnece(); if (message == null || message.Input == null || message.Input.GetId() == Guid.Empty) { throw new ArgumentNullException(); } if (string.IsNullOrEmpty(message.Input.Code)) { throw new ValidationException("dicitem code can't be null or empty"); } if (_dicById.ContainsKey(message.Input.GetId())) { return; } if (!_dicByDicId.ContainsKey(message.Input.DicId)) { _dicByDicId.Add(message.Input.DicId, new Dictionary <string, SysDicItemData>(StringComparer.OrdinalIgnoreCase)); } if (_dicByDicId[message.Input.DicId].ContainsKey(message.Input.Code)) { throw new ValidationException("编码重复"); } SysDicItemData entity = new SysDicItemData().Update(message.Input); _dicById.Add(entity.Id, entity); _dicByDicId[message.Input.DicId].Add(entity.Code, entity); var repository = context.CreateCompositeRepository <SysDicItemData>(); repository.Add(entity); VirtualRoot.RaiseEvent(new SysDicItemAddedEvent(message.MessageId, entity)); }, location: this.GetType()); _context.AddCmdPath <UpdateSysDicItemCommand>(LogEnum.DevConsole, action: (message) => { InitOnece(); if (message == null || message.Input == null || message.Input.GetId() == Guid.Empty) { throw new ArgumentNullException(); } if (string.IsNullOrEmpty(message.Input.Code)) { throw new ValidationException("sysDicItem code can't be null or empty"); } if (!_dicById.TryGetValue(message.Input.GetId(), out SysDicItemData entity)) { return; } if (ReferenceEquals(entity, message.Input)) { return; } string oldCode = entity.Code; entity.Update(message.Input); // 如果编码变更了 if (oldCode != entity.Code) { _dicByDicId[entity.DicId].Remove(oldCode); _dicByDicId[entity.DicId].Add(entity.Code, entity); } var repository = context.CreateCompositeRepository <SysDicItemData>(); repository.Update(entity); VirtualRoot.RaiseEvent(new SysDicItemUpdatedEvent(message.MessageId, entity)); }, location: this.GetType()); _context.AddCmdPath <RemoveSysDicItemCommand>(LogEnum.DevConsole, action: (message) => { InitOnece(); if (message == null || message.EntityId == Guid.Empty) { throw new ArgumentNullException(); } if (!_dicById.TryGetValue(message.EntityId, out SysDicItemData entity) || !_context.SysDicSet.TryGetSysDic(entity.DicId, out ISysDic sysDic)) { return; } switch (sysDic.Code) { case NTKeyword.KernelBrandSysDicCode: if (NTMinerContext.Instance.ServerContext.KernelSet.AsEnumerable().Any(a => a.BrandId == message.EntityId)) { VirtualRoot.Out.ShowWarn("该内核品牌字典项关联有内核品牌不能删除,请先解除关联"); return; } break; case NTKeyword.PoolBrandSysDicCode: if (NTMinerContext.Instance.ServerContext.PoolSet.AsEnumerable().Any(a => a.BrandId == message.EntityId)) { VirtualRoot.Out.ShowWarn("该矿池品牌字典项关联有矿池品牌不能删除,请先解除关联"); return; } break; case NTKeyword.AlgoSysDicCode: if (NTMinerContext.Instance.ServerContext.PackageSet.AsEnumerable().Any(a => a.AlgoIds.Contains(message.EntityId))) { VirtualRoot.Out.ShowWarn("该算法字典项关联有内核不能删除,请先解除关联"); return; } break; default: break; } _dicById.Remove(entity.Id); if (_dicByDicId.TryGetValue(entity.DicId, out Dictionary <string, SysDicItemData> dicItemDic)) { dicItemDic.Remove(entity.Code); } var repository = context.CreateCompositeRepository <SysDicItemData>(); repository.Remove(entity.Id); VirtualRoot.RaiseEvent(new SysDicItemRemovedEvent(message.MessageId, entity)); }, location: this.GetType()); }