protected override void Init() { var repository = _context.CreateServerRepository <PoolKernelData>(); List <PoolKernelData> list = repository.GetAll().ToList(); foreach (IPool pool in _context.PoolSet.AsEnumerable().ToArray()) { foreach (ICoinKernel coinKernel in _context.CoinKernelSet.AsEnumerable().Where(a => a.CoinId == pool.CoinId).ToArray()) { PoolKernelData poolKernel = list.FirstOrDefault(a => a.PoolId == pool.GetId() && a.KernelId == coinKernel.KernelId); if (poolKernel != null) { _dicById.Add(poolKernel.GetId(), poolKernel); } else { Guid poolKernelId = Guid.NewGuid(); _dicById.Add(poolKernelId, new PoolKernelData() { Id = poolKernelId, Args = string.Empty, KernelId = coinKernel.KernelId, PoolId = pool.GetId() }); } } } }
private void Init() { lock (_locker) { if (!_isInited) { var repository = NTMinerRoot.CreateServerRepository <PoolKernelData>(); List <PoolKernelData> list = repository.GetAll().ToList(); foreach (IPool pool in _root.PoolSet) { foreach (ICoinKernel coinKernel in _root.CoinKernelSet.Where(a => a.CoinId == pool.CoinId)) { PoolKernelData poolKernel = list.FirstOrDefault(a => a.PoolId == pool.GetId() && a.KernelId == coinKernel.KernelId); if (poolKernel != null) { _dicById.Add(poolKernel.GetId(), poolKernel); } else { Guid poolKernelId = Guid.NewGuid(); _dicById.Add(poolKernelId, new PoolKernelData() { Id = poolKernelId, Args = string.Empty, Description = string.Empty, KernelId = coinKernel.KernelId, PoolId = pool.GetId() }); } } } _isInited = true; } } }
public PoolKernelSet(INTMinerRoot root, bool isUseJson) { _root = root; _isUseJson = isUseJson; VirtualRoot.Window <AddPoolKernelCommand>("处理添加矿池级内核命令", LogEnum.DevConsole, action: message => { if (!_dicById.ContainsKey(message.Input.GetId())) { var entity = new PoolKernelData().Update(message.Input); _dicById.Add(message.Input.GetId(), entity); var repository = NTMinerRoot.CreateServerRepository <PoolKernelData>(isUseJson); repository.Add(entity); VirtualRoot.Happened(new PoolKernelAddedEvent(message.Input)); } }).AddToCollection(root.ContextHandlers); VirtualRoot.Window <RemovePoolKernelCommand>("处理移除矿池级内核命令", LogEnum.DevConsole, action: message => { if (_dicById.ContainsKey(message.EntityId)) { var entity = _dicById[message.EntityId]; _dicById.Remove(message.EntityId); var repository = NTMinerRoot.CreateServerRepository <PoolKernelData>(isUseJson); repository.Remove(message.EntityId); VirtualRoot.Happened(new PoolKernelRemovedEvent(entity)); } }).AddToCollection(root.ContextHandlers); VirtualRoot.Window <UpdatePoolKernelCommand>("更新矿池内核", LogEnum.DevConsole, action: (message) => { InitOnece(); if (message == null || message.Input == null || message.Input.GetId() == Guid.Empty) { throw new ArgumentNullException(); } if (!_root.PoolSet.Contains(message.Input.PoolId)) { throw new ValidationException("there is no pool with id" + message.Input.PoolId); } if (!_dicById.ContainsKey(message.Input.GetId())) { return; } PoolKernelData entity = _dicById[message.Input.GetId()]; if (ReferenceEquals(entity, message.Input)) { return; } entity.Update(message.Input); var repository = NTMinerRoot.CreateServerRepository <PoolKernelData>(isUseJson); repository.Update(entity); VirtualRoot.Happened(new PoolKernelUpdatedEvent(entity)); }).AddToCollection(root.ContextHandlers); }
public PoolKernelSet(IServerContext context) { _context = context; _context.AddCmdPath <AddPoolKernelCommand>("处理添加矿池级内核命令", LogEnum.DevConsole, action: message => { if (!_dicById.ContainsKey(message.Input.GetId())) { var entity = new PoolKernelData().Update(message.Input); _dicById.Add(message.Input.GetId(), entity); var repository = NTMinerRoot.CreateServerRepository <PoolKernelData>(); repository.Add(entity); VirtualRoot.RaiseEvent(new PoolKernelAddedEvent(message.MessageId, message.Input)); } }, location: this.GetType()); _context.AddCmdPath <RemovePoolKernelCommand>("处理移除矿池级内核命令", LogEnum.DevConsole, action: message => { if (_dicById.ContainsKey(message.EntityId)) { var entity = _dicById[message.EntityId]; _dicById.Remove(message.EntityId); var repository = NTMinerRoot.CreateServerRepository <PoolKernelData>(); repository.Remove(message.EntityId); VirtualRoot.RaiseEvent(new PoolKernelRemovedEvent(message.MessageId, entity)); } }, location: this.GetType()); _context.AddCmdPath <UpdatePoolKernelCommand>("更新矿池内核", LogEnum.DevConsole, action: (message) => { InitOnece(); if (message == null || message.Input == null || message.Input.GetId() == Guid.Empty) { throw new ArgumentNullException(); } if (!_context.PoolSet.Contains(message.Input.PoolId)) { throw new ValidationException("there is no pool with id" + message.Input.PoolId); } if (!_dicById.ContainsKey(message.Input.GetId())) { return; } PoolKernelData entity = _dicById[message.Input.GetId()]; if (ReferenceEquals(entity, message.Input)) { return; } entity.Update(message.Input); var repository = NTMinerRoot.CreateServerRepository <PoolKernelData>(); repository.Update(entity); VirtualRoot.RaiseEvent(new PoolKernelUpdatedEvent(message.MessageId, entity)); }, location: this.GetType()); }
public PoolKernelSet(INTMinerRoot root) { _root = root; Global.Access <CoinKernelAddedEvent>( Guid.Parse("F39019DF-21F7-40EF-9233-4F7E8291FF39"), "新添了币种内核后刷新矿池内核内存", LogEnum.Log, action: (message) => { ICoin coin; if (root.CoinSet.TryGetCoin(message.Source.CoinId, out coin)) { IPool[] pools = root.PoolSet.Where(a => a.CoinId == coin.GetId()).ToArray(); foreach (IPool pool in pools) { Guid poolKernelId = Guid.NewGuid(); var entity = new PoolKernelData() { Id = poolKernelId, Args = string.Empty, Description = string.Empty, KernelId = message.Source.KernelId, PoolId = pool.GetId() }; _dicById.Add(poolKernelId, entity); Global.Happened(new PoolKernelAddedEvent(entity)); } } }); Global.Access <CoinKernelRemovedEvent>( Guid.Parse("3FD6D2B4-4C8F-4C81-8E15-2FBA4E730AF7"), "移除了币种内核后刷新矿池内核内存", LogEnum.Log, action: (message) => { ICoin coin; if (root.CoinSet.TryGetCoin(message.Source.CoinId, out coin)) { var repository = NTMinerRoot.CreateServerRepository <PoolKernelData>(); List <Guid> toRemoves = new List <Guid>(); IPool[] pools = root.PoolSet.Where(a => a.CoinId == coin.GetId()).ToArray(); foreach (IPool pool in pools) { foreach (PoolKernelData poolKernelVm in _dicById.Values.Where(a => a.PoolId == pool.GetId() && a.KernelId == message.Source.KernelId)) { toRemoves.Add(poolKernelVm.Id); } } foreach (Guid poolKernelId in toRemoves) { var entity = _dicById[poolKernelId]; _dicById.Remove(poolKernelId); repository.Remove(entity.Id); Global.Happened(new PoolKernelRemovedEvent(entity)); } } }); Global.Access <PoolAddedEvent>( Guid.Parse("CDDC4FD4-DC93-4CD3-B814-5A3A99228AB0"), "新添了矿池后刷新矿池内核内存", LogEnum.Log, action: (message) => { ICoin coin; if (root.CoinSet.TryGetCoin(message.Source.CoinId, out coin)) { ICoinKernel[] coinKernels = root.CoinKernelSet.Where(a => a.CoinId == coin.GetId()).ToArray(); foreach (ICoinKernel coinKernel in coinKernels) { Guid poolKernelId = Guid.NewGuid(); var entity = new PoolKernelData() { Id = poolKernelId, Args = string.Empty, Description = string.Empty, KernelId = coinKernel.KernelId, PoolId = message.Source.GetId() }; _dicById.Add(poolKernelId, entity); Global.Happened(new PoolKernelAddedEvent(entity)); } } }); Global.Access <PoolRemovedEvent>( Guid.Parse("F4B99EAE-2532-4DAC-8D49-2D6A51530722"), "移除了矿池后刷新矿池内核内存", LogEnum.Log, action: (message) => { var repository = NTMinerRoot.CreateServerRepository <PoolKernelData>(); Guid[] toRemoves = _dicById.Values.Where(a => a.PoolId == message.Source.GetId()).Select(a => a.Id).ToArray(); foreach (Guid poolKernelId in toRemoves) { var entity = _dicById[poolKernelId]; _dicById.Remove(poolKernelId); repository.Remove(entity.Id); Global.Happened(new PoolKernelRemovedEvent(entity)); } }); Global.Access <UpdatePoolKernelCommand>( Guid.Parse("08843B3B-3F82-45D2-8B45-6B24F397A326"), "更新矿池内核", LogEnum.Log, action: (message) => { InitOnece(); if (message == null || message.Input == null || message.Input.GetId() == Guid.Empty) { throw new ArgumentNullException(); } if (!_root.PoolSet.Contains(message.Input.PoolId)) { throw new ValidationException("there is no pool with id" + message.Input.PoolId); } if (!_dicById.ContainsKey(message.Input.GetId())) { return; } PoolKernelData entity = _dicById[message.Input.GetId()]; entity.Update(message.Input); var repository = NTMinerRoot.CreateServerRepository <PoolKernelData>(); repository.Update(entity); Global.Happened(new PoolKernelUpdatedEvent(entity)); }); Global.Logger.InfoDebugLine(this.GetType().FullName + "接入总线"); }
public CoinKernelSet(INTMinerRoot root) { _root = root; _root.ServerContextWindow <AddCoinKernelCommand>("添加币种内核", LogEnum.DevConsole, action: (message) => { InitOnece(); if (message == null || message.Input == null || message.Input.GetId() == Guid.Empty) { throw new ArgumentNullException(); } if (!_root.CoinSet.Contains(message.Input.CoinId)) { throw new ValidationException("there is no coin with id" + message.Input.CoinId); } if (_dicById.ContainsKey(message.Input.GetId())) { return; } if (_dicById.Values.Any(a => a.CoinId == message.Input.CoinId && a.KernelId == message.Input.KernelId)) { return; } CoinKernelData entity = new CoinKernelData().Update(message.Input); _dicById.Add(entity.Id, entity); var repository = NTMinerRoot.CreateServerRepository <CoinKernelData>(); repository.Add(entity); VirtualRoot.Happened(new CoinKernelAddedEvent(entity)); ICoin coin; if (root.CoinSet.TryGetCoin(message.Input.CoinId, out coin)) { IPool[] pools = root.PoolSet.Where(a => a.CoinId == coin.GetId()).ToArray(); foreach (IPool pool in pools) { Guid poolKernelId = Guid.NewGuid(); var poolKernel = new PoolKernelData() { Id = poolKernelId, Args = string.Empty, KernelId = message.Input.KernelId, PoolId = pool.GetId() }; VirtualRoot.Execute(new AddPoolKernelCommand(poolKernel)); } } }); _root.ServerContextWindow <UpdateCoinKernelCommand>("更新币种内核", LogEnum.DevConsole, action: (message) => { InitOnece(); if (message == null || message.Input == null || message.Input.GetId() == Guid.Empty) { throw new ArgumentNullException(); } if (!_root.CoinSet.Contains(message.Input.CoinId)) { throw new ValidationException("there is no coin with id" + message.Input.CoinId); } if (!_dicById.ContainsKey(message.Input.GetId())) { return; } CoinKernelData entity = _dicById[message.Input.GetId()]; if (ReferenceEquals(entity, message.Input)) { return; } entity.Update(message.Input); var repository = NTMinerRoot.CreateServerRepository <CoinKernelData>(); repository.Update(entity); VirtualRoot.Happened(new CoinKernelUpdatedEvent(entity)); }); _root.ServerContextWindow <RemoveCoinKernelCommand>("移除币种内核", LogEnum.DevConsole, action: (message) => { InitOnece(); if (message == null || message.EntityId == Guid.Empty) { throw new ArgumentNullException(); } if (!_dicById.ContainsKey(message.EntityId)) { return; } CoinKernelData entity = _dicById[message.EntityId]; _dicById.Remove(entity.Id); var repository = NTMinerRoot.CreateServerRepository <CoinKernelData>(); repository.Remove(entity.Id); VirtualRoot.Happened(new CoinKernelRemovedEvent(entity)); ICoin coin; if (root.CoinSet.TryGetCoin(entity.CoinId, out coin)) { List <Guid> toRemoves = new List <Guid>(); IPool[] pools = root.PoolSet.Where(a => a.CoinId == coin.GetId()).ToArray(); foreach (IPool pool in pools) { foreach (PoolKernelData poolKernel in root.PoolKernelSet.Where(a => a.PoolId == pool.GetId() && a.KernelId == entity.KernelId)) { toRemoves.Add(poolKernel.Id); } } foreach (Guid poolKernelId in toRemoves) { VirtualRoot.Execute(new RemovePoolKernelCommand(poolKernelId)); } } }); _root.ServerContextOn <FileWriterRemovedEvent>("移除文件书写器后移除引用关系", LogEnum.DevConsole, action: message => { var repository = NTMinerRoot.CreateServerRepository <CoinKernelData>(); var entities = _dicById.Values.Where(a => a.FileWriterIds.Contains(message.Source.GetId())).ToArray(); foreach (var entity in entities) { entity.FileWriterIds = new List <Guid>(entity.FileWriterIds.Where(a => a != message.Source.GetId())); repository.Update(entity); VirtualRoot.Happened(new CoinKernelUpdatedEvent(entity)); } }); _root.ServerContextOn <FragmentWriterRemovedEvent>("移除命令行片段书写器后移除引用关系", LogEnum.DevConsole, action: message => { var repository = NTMinerRoot.CreateServerRepository <CoinKernelData>(); var entities = _dicById.Values.Where(a => a.FragmentWriterIds.Contains(message.Source.GetId())).ToArray(); foreach (var entity in entities) { entity.FragmentWriterIds = new List <Guid>(entity.FragmentWriterIds.Where(a => a != message.Source.GetId())); repository.Update(entity); VirtualRoot.Happened(new CoinKernelUpdatedEvent(entity)); } }); }
public CoinKernelSet(IServerContext context) { _context = context; context.AddCmdPath <AddCoinKernelCommand>(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 (_dicById.ContainsKey(message.Input.GetId())) { return; } if (_dicById.Values.Any(a => a.CoinId == message.Input.CoinId && a.KernelId == message.Input.KernelId)) { return; } CoinKernelData entity = new CoinKernelData().Update(message.Input); _dicById.Add(entity.Id, entity); var repository = context.CreateServerRepository <CoinKernelData>(); repository.Add(entity); VirtualRoot.RaiseEvent(new CoinKernelAddedEvent(message.MessageId, entity)); if (context.CoinSet.TryGetCoin(message.Input.CoinId, out ICoin coin)) { IPool[] pools = context.PoolSet.AsEnumerable().Where(a => a.CoinId == coin.GetId()).ToArray(); foreach (IPool pool in pools) { Guid poolKernelId = Guid.NewGuid(); var poolKernel = new PoolKernelData() { Id = poolKernelId, Args = string.Empty, KernelId = message.Input.KernelId, PoolId = pool.GetId() }; VirtualRoot.Execute(new AddPoolKernelCommand(poolKernel)); } } }, location: this.GetType()); context.AddCmdPath <UpdateCoinKernelCommand>(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 (!_dicById.TryGetValue(message.Input.GetId(), out CoinKernelData entity)) { return; } if (ReferenceEquals(entity, message.Input)) { return; } entity.Update(message.Input); var repository = context.CreateServerRepository <CoinKernelData>(); repository.Update(entity); VirtualRoot.RaiseEvent(new CoinKernelUpdatedEvent(message.MessageId, entity)); }, location: this.GetType()); context.AddCmdPath <RemoveCoinKernelCommand>(LogEnum.DevConsole, action: (message) => { InitOnece(); if (message == null || message.EntityId == Guid.Empty) { throw new ArgumentNullException(); } if (!_dicById.ContainsKey(message.EntityId)) { return; } CoinKernelData entity = _dicById[message.EntityId]; _dicById.Remove(entity.Id); var repository = context.CreateServerRepository <CoinKernelData>(); repository.Remove(entity.Id); VirtualRoot.RaiseEvent(new CoinKernelRemovedEvent(message.MessageId, entity)); if (context.CoinSet.TryGetCoin(entity.CoinId, out ICoin coin)) { List <Guid> toRemoves = new List <Guid>(); IPool[] pools = context.PoolSet.AsEnumerable().Where(a => a.CoinId == coin.GetId()).ToArray(); foreach (IPool pool in pools) { foreach (PoolKernelData poolKernel in context.PoolKernelSet.AsEnumerable().Where(a => a.PoolId == pool.GetId() && a.KernelId == entity.KernelId).ToArray()) { toRemoves.Add(poolKernel.Id); } } foreach (Guid poolKernelId in toRemoves) { VirtualRoot.Execute(new RemovePoolKernelCommand(poolKernelId)); } } }, location: this.GetType()); context.AddEventPath <FileWriterRemovedEvent>("移除文件书写器后移除引用关系", LogEnum.DevConsole, location: this.GetType(), PathPriority.Normal, action: message => { var repository = context.CreateServerRepository <CoinKernelData>(); var entities = _dicById.Values.Where(a => a.FileWriterIds.Contains(message.Source.GetId())).ToArray(); foreach (var entity in entities) { entity.FileWriterIds = new List <Guid>(entity.FileWriterIds.Where(a => a != message.Source.GetId())); repository.Update(entity); VirtualRoot.RaiseEvent(new CoinKernelUpdatedEvent(message.MessageId, entity)); } }); context.AddEventPath <FragmentWriterRemovedEvent>("移除命令行片段书写器后移除引用关系", LogEnum.DevConsole, location: this.GetType(), PathPriority.Normal, action: message => { var repository = context.CreateServerRepository <CoinKernelData>(); var entities = _dicById.Values.Where(a => a.FragmentWriterIds.Contains(message.Source.GetId())).ToArray(); foreach (var entity in entities) { entity.FragmentWriterIds = new List <Guid>(entity.FragmentWriterIds.Where(a => a != message.Source.GetId())); repository.Update(entity); VirtualRoot.RaiseEvent(new CoinKernelUpdatedEvent(message.MessageId, entity)); } }); }