ntminer 5 lat temu
rodzic
commit
e7f33bf6af
39 zmienionych plików z 139 dodań i 149 usunięć
  1. 2 2
      src/NTMinerClient/Core/Impl/CoinGroupSet.cs
  2. 3 3
      src/NTMinerClient/Core/Impl/CoinSet.cs
  3. 3 3
      src/NTMinerClient/Core/Impl/FileWriterSet.cs
  4. 3 3
      src/NTMinerClient/Core/Impl/FragmentWriterSet.cs
  5. 3 3
      src/NTMinerClient/Core/Impl/GroupSet.cs
  6. 3 3
      src/NTMinerClient/Core/Impl/PoolSet.cs
  7. 3 3
      src/NTMinerClient/Core/Impl/SysDicItemSet.cs
  8. 3 3
      src/NTMinerClient/Core/Impl/SysDicSet.cs
  9. 5 5
      src/NTMinerClient/Core/Kernels/Impl/CoinKernelSet.cs
  10. 3 3
      src/NTMinerClient/Core/Kernels/Impl/KernelInputSet.cs
  11. 3 3
      src/NTMinerClient/Core/Kernels/Impl/KernelOutputSet.cs
  12. 3 3
      src/NTMinerClient/Core/Kernels/Impl/KernelOutputTranslaterSet.cs
  13. 3 3
      src/NTMinerClient/Core/Kernels/Impl/KernelSet.cs
  14. 3 3
      src/NTMinerClient/Core/Kernels/Impl/PackageSet.cs
  15. 3 3
      src/NTMinerClient/Core/Kernels/Impl/PoolKernelSet.cs
  16. 4 4
      src/NTMinerClient/Core/MinerServer/Impl/ColumnsShowSet.cs
  17. 4 4
      src/NTMinerClient/Core/MinerServer/Impl/MineWorkSet.cs
  18. 4 4
      src/NTMinerClient/Core/MinerServer/Impl/MinerGroupSet.cs
  19. 4 4
      src/NTMinerClient/Core/MinerServer/Impl/NTMinerWalletSet.cs
  20. 4 4
      src/NTMinerClient/Core/MinerServer/Impl/OverClockDataSet.cs
  21. 3 3
      src/NTMinerClient/Core/MinerServer/Impl/ServerAppSettingSet.cs
  22. 4 4
      src/NTMinerClient/Core/MinerServer/Impl/UserSet.cs
  23. 2 2
      src/NTMinerClient/Core/Profiles/Impl/GpuProfileSet.cs
  24. 3 3
      src/NTMinerClient/Core/Profiles/Impl/WalletSet.cs
  25. 1 1
      src/NTMinerClient/NTMinerRoot.partials.MineContext.cs
  26. 3 3
      src/NTMinerHub/Hub/Cmd.cs
  27. 2 2
      src/NTMinerHub/Hub/DomainEvent`1.cs
  28. 2 2
      src/NTMinerHub/Hub/EventBase.cs
  29. 1 1
      src/NTMinerHub/Hub/IMessage.cs
  30. 1 1
      src/NTMinerHub/Hub/MessageHub.cs
  31. 3 3
      src/NTMinerRpcClient/KernelOutputKeyword/KernelOutputKeywordSet.cs
  32. 3 3
      src/NTMinerServices/Data/Impl/UserSet.cs
  33. 1 1
      src/NTMinerlib/AppSetting/LocalAppSettingSet.cs
  34. 1 1
      src/NTMinerlib/LocalMessage/LocalMessageSet.cs
  35. 26 6
      src/WebSocketServerTests/AllInOne.cs
  36. 10 8
      src/WebSocketServerTests/WSCommands.cs
  37. 0 32
      src/WebSocketServerTests/WebSocketBehaviorBase.cs
  38. 1 2
      src/WebSocketServerTests/WebSocketServerTests.csproj
  39. 6 5
      src/WebSocketServerTests/WsRoot.cs

+ 2 - 2
src/NTMinerClient/Core/Impl/CoinGroupSet.cs

@@ -24,7 +24,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<CoinGroupData>();
                     repository.Add(entity);
 
-                    VirtualRoot.RaiseEvent(new CoinGroupAddedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new CoinGroupAddedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<RemoveCoinGroupCommand>("移除币组", LogEnum.DevConsole,
                 action: (message) => {
@@ -40,7 +40,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<CoinGroupData>();
                     repository.Remove(message.EntityId);
 
-                    VirtualRoot.RaiseEvent(new CoinGroupRemovedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new CoinGroupRemovedEvent(message.MessageId, entity));
                 }, location: this.GetType());
         }
 

+ 3 - 3
src/NTMinerClient/Core/Impl/CoinSet.cs

@@ -29,7 +29,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<CoinData>();
                     repository.Add(entity);
 
-                    VirtualRoot.RaiseEvent(new CoinAddedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new CoinAddedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<UpdateCoinCommand>("更新币种", LogEnum.DevConsole,
                 action: message => {
@@ -51,7 +51,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<CoinData>();
                     repository.Update(entity);
 
-                    VirtualRoot.RaiseEvent(new CoinUpdatedEvent(message.Id, message.Input));
+                    VirtualRoot.RaiseEvent(new CoinUpdatedEvent(message.MessageId, message.Input));
                 }, location: this.GetType());
             context.AddCmdPath<RemoveCoinCommand>("移除币种", LogEnum.DevConsole,
                 action: message => {
@@ -86,7 +86,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<CoinData>();
                     repository.Remove(entity.Id);
 
-                    VirtualRoot.RaiseEvent(new CoinRemovedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new CoinRemovedEvent(message.MessageId, entity));
                 }, location: this.GetType());
         }
 

+ 3 - 3
src/NTMinerClient/Core/Impl/FileWriterSet.cs

@@ -23,7 +23,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<FileWriterData>();
                     repository.Add(entity);
 
-                    VirtualRoot.RaiseEvent(new FileWriterAddedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new FileWriterAddedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<UpdateFileWriterCommand>("更新文件书写器", LogEnum.DevConsole,
                 action: (message) => {
@@ -45,7 +45,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<FileWriterData>();
                     repository.Update(entity);
 
-                    VirtualRoot.RaiseEvent(new FileWriterUpdatedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new FileWriterUpdatedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<RemoveFileWriterCommand>("移除文件书写器", LogEnum.DevConsole,
                 action: (message) => {
@@ -61,7 +61,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<FileWriterData>();
                     repository.Remove(message.EntityId);
 
-                    VirtualRoot.RaiseEvent(new FileWriterRemovedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new FileWriterRemovedEvent(message.MessageId, entity));
                 }, location: this.GetType());
         }
 

+ 3 - 3
src/NTMinerClient/Core/Impl/FragmentWriterSet.cs

@@ -23,7 +23,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<FragmentWriterData>();
                     repository.Add(entity);
 
-                    VirtualRoot.RaiseEvent(new FragmentWriterAddedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new FragmentWriterAddedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<UpdateFragmentWriterCommand>("更新命令行片段书写器", LogEnum.DevConsole,
                 action: (message) => {
@@ -45,7 +45,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<FragmentWriterData>();
                     repository.Update(entity);
 
-                    VirtualRoot.RaiseEvent(new FragmentWriterUpdatedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new FragmentWriterUpdatedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<RemoveFragmentWriterCommand>("移除组", LogEnum.DevConsole,
                 action: (message) => {
@@ -61,7 +61,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<FragmentWriterData>();
                     repository.Remove(message.EntityId);
 
-                    VirtualRoot.RaiseEvent(new FragmentWriterRemovedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new FragmentWriterRemovedEvent(message.MessageId, entity));
                 }, location: this.GetType());
         }
 

+ 3 - 3
src/NTMinerClient/Core/Impl/GroupSet.cs

@@ -23,7 +23,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<GroupData>();
                     repository.Add(entity);
 
-                    VirtualRoot.RaiseEvent(new GroupAddedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new GroupAddedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<UpdateGroupCommand>("更新组", LogEnum.DevConsole,
                 action: (message) => {
@@ -45,7 +45,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<GroupData>();
                     repository.Update(entity);
 
-                    VirtualRoot.RaiseEvent(new GroupUpdatedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new GroupUpdatedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<RemoveGroupCommand>("移除组", LogEnum.DevConsole,
                 action: (message) => {
@@ -65,7 +65,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<GroupData>();
                     repository.Remove(message.EntityId);
 
-                    VirtualRoot.RaiseEvent(new GroupRemovedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new GroupRemovedEvent(message.MessageId, entity));
                 }, location: this.GetType());
         }
 

+ 3 - 3
src/NTMinerClient/Core/Impl/PoolSet.cs

@@ -43,7 +43,7 @@ namespace NTMiner.Core.Impl {
                         repository.Add(entity);
                     }
 
-                    VirtualRoot.RaiseEvent(new PoolAddedEvent(message.Id, 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();
@@ -94,7 +94,7 @@ namespace NTMiner.Core.Impl {
                         repository.Update(new PoolData().Update(message.Input));
                     }
 
-                    VirtualRoot.RaiseEvent(new PoolUpdatedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new PoolUpdatedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<RemovePoolCommand>("移除矿池", LogEnum.DevConsole,
                 action: (message) => {
@@ -119,7 +119,7 @@ namespace NTMiner.Core.Impl {
                         var repository = NTMinerRoot.CreateCompositeRepository<PoolData>();
                         repository.Remove(message.EntityId);
                     }
-                    VirtualRoot.RaiseEvent(new PoolRemovedEvent(message.Id, entity));
+                    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));

+ 3 - 3
src/NTMinerClient/Core/Impl/SysDicItemSet.cs

@@ -34,7 +34,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateCompositeRepository<SysDicItemData>();
                     repository.Add(entity);
 
-                    VirtualRoot.RaiseEvent(new SysDicItemAddedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new SysDicItemAddedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             _context.AddCmdPath<UpdateSysDicItemCommand>("更新系统字典项", LogEnum.DevConsole,
                 action: (message) => {
@@ -62,7 +62,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateCompositeRepository<SysDicItemData>();
                     repository.Update(entity);
 
-                    VirtualRoot.RaiseEvent(new SysDicItemUpdatedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new SysDicItemUpdatedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             _context.AddCmdPath<RemoveSysDicItemCommand>("移除系统字典项", LogEnum.DevConsole,
                 action: (message) => {
@@ -83,7 +83,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateCompositeRepository<SysDicItemData>();
                     repository.Remove(entity.Id);
 
-                    VirtualRoot.RaiseEvent(new SysDicItemRemovedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new SysDicItemRemovedEvent(message.MessageId, entity));
                 }, location: this.GetType());
         }
 

+ 3 - 3
src/NTMinerClient/Core/Impl/SysDicSet.cs

@@ -29,7 +29,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<SysDicData>();
                     repository.Add(entity);
 
-                    VirtualRoot.RaiseEvent(new SysDicAddedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new SysDicAddedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<UpdateSysDicCommand>("更新系统字典", LogEnum.DevConsole,
                 action: message => {
@@ -51,7 +51,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<SysDicData>();
                     repository.Update(entity);
 
-                    VirtualRoot.RaiseEvent(new SysDicUpdatedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new SysDicUpdatedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<RemoveSysDicCommand>("移除系统字典", LogEnum.DevConsole,
                 action: message => {
@@ -74,7 +74,7 @@ namespace NTMiner.Core.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<SysDicData>();
                     repository.Remove(entity.Id);
 
-                    VirtualRoot.RaiseEvent(new SysDicRemovedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new SysDicRemovedEvent(message.MessageId, entity));
                 }, location: this.GetType());
         }
 

+ 5 - 5
src/NTMinerClient/Core/Kernels/Impl/CoinKernelSet.cs

@@ -27,7 +27,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<CoinKernelData>();
                     repository.Add(entity);
 
-                    VirtualRoot.RaiseEvent(new CoinKernelAddedEvent(message.Id, 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();
@@ -63,7 +63,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<CoinKernelData>();
                     repository.Update(entity);
 
-                    VirtualRoot.RaiseEvent(new CoinKernelUpdatedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new CoinKernelUpdatedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<RemoveCoinKernelCommand>("移除币种内核", LogEnum.DevConsole,
                 action: (message) => {
@@ -79,7 +79,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<CoinKernelData>();
                     repository.Remove(entity.Id);
 
-                    VirtualRoot.RaiseEvent(new CoinKernelRemovedEvent(message.Id, entity));
+                    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();
@@ -100,7 +100,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     foreach (var entity in entities) {
                         entity.FileWriterIds = new List<Guid>(entity.FileWriterIds.Where(a => a != message.Target.GetId()));
                         repository.Update(entity);
-                        VirtualRoot.RaiseEvent(new CoinKernelUpdatedEvent(message.Id, entity));
+                        VirtualRoot.RaiseEvent(new CoinKernelUpdatedEvent(message.MessageId, entity));
                     }
                 }, location: this.GetType());
             context.AddEventPath<FragmentWriterRemovedEvent>("移除命令行片段书写器后移除引用关系", LogEnum.DevConsole,
@@ -110,7 +110,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     foreach (var entity in entities) {
                         entity.FragmentWriterIds = new List<Guid>(entity.FragmentWriterIds.Where(a => a != message.Target.GetId()));
                         repository.Update(entity);
-                        VirtualRoot.RaiseEvent(new CoinKernelUpdatedEvent(message.Id, entity));
+                        VirtualRoot.RaiseEvent(new CoinKernelUpdatedEvent(message.MessageId, entity));
                     }
                 }, location: this.GetType());
         }

+ 3 - 3
src/NTMinerClient/Core/Kernels/Impl/KernelInputSet.cs

@@ -21,7 +21,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<KernelInputData>();
                     repository.Add(entity);
 
-                    VirtualRoot.RaiseEvent(new KernelInputAddedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new KernelInputAddedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<UpdateKernelInputCommand>("更新内核输入组", LogEnum.DevConsole,
                 action: (message) => {
@@ -43,7 +43,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<KernelInputData>();
                     repository.Update(entity);
 
-                    VirtualRoot.RaiseEvent(new KernelInputUpdatedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new KernelInputUpdatedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<RemoveKernelInputCommand>("移除内核输入组", LogEnum.DevConsole,
                 action: (message) => {
@@ -59,7 +59,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<KernelInputData>();
                     repository.Remove(message.EntityId);
 
-                    VirtualRoot.RaiseEvent(new KernelInputRemovedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new KernelInputRemovedEvent(message.MessageId, entity));
                 }, location: this.GetType());
         }
 

+ 3 - 3
src/NTMinerClient/Core/Kernels/Impl/KernelOutputSet.cs

@@ -24,7 +24,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<KernelOutputData>();
                     repository.Add(entity);
 
-                    VirtualRoot.RaiseEvent(new KernelOutputAddedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new KernelOutputAddedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<UpdateKernelOutputCommand>("更新内核输出组", LogEnum.DevConsole,
                 action: (message) => {
@@ -46,7 +46,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<KernelOutputData>();
                     repository.Update(entity);
 
-                    VirtualRoot.RaiseEvent(new KernelOutputUpdatedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new KernelOutputUpdatedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<RemoveKernelOutputCommand>("移除内核输出组", LogEnum.DevConsole,
                 action: (message) => {
@@ -70,7 +70,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<KernelOutputData>();
                     repository.Remove(message.EntityId);
 
-                    VirtualRoot.RaiseEvent(new KernelOutputRemovedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new KernelOutputRemovedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             #endregion
         }

+ 3 - 3
src/NTMinerClient/Core/Kernels/Impl/KernelOutputTranslaterSet.cs

@@ -38,7 +38,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<KernelOutputTranslaterData>();
                     repository.Add(entity);
 
-                    VirtualRoot.RaiseEvent(new KernelOutputTranslaterAddedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new KernelOutputTranslaterAddedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<UpdateKernelOutputTranslaterCommand>("更新内核输出翻译器", LogEnum.DevConsole,
                 action: (message) => {
@@ -62,7 +62,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<KernelOutputTranslaterData>();
                     repository.Update(entity);
 
-                    VirtualRoot.RaiseEvent(new KernelOutputTranslaterUpdatedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new KernelOutputTranslaterUpdatedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<RemoveKernelOutputTranslaterCommand>("移除内核输出翻译器", LogEnum.DevConsole,
                 action: (message) => {
@@ -80,7 +80,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<KernelOutputTranslaterData>();
                     repository.Remove(entity.Id);
 
-                    VirtualRoot.RaiseEvent(new KernelOutputTranslaterRemovedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new KernelOutputTranslaterRemovedEvent(message.MessageId, entity));
                 }, location: this.GetType());
         }
 

+ 3 - 3
src/NTMinerClient/Core/Kernels/Impl/KernelSet.cs

@@ -24,7 +24,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<KernelData>();
                     repository.Add(entity);
 
-                    VirtualRoot.RaiseEvent(new KernelAddedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new KernelAddedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<UpdateKernelCommand>("更新内核", LogEnum.DevConsole,
                 action: message => {
@@ -46,7 +46,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<KernelData>();
                     repository.Update(entity);
 
-                    VirtualRoot.RaiseEvent(new KernelUpdatedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new KernelUpdatedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<RemoveKernelCommand>("移除内核", LogEnum.DevConsole,
                 action: message => {
@@ -66,7 +66,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<KernelData>();
                     repository.Remove(entity.Id);
 
-                    VirtualRoot.RaiseEvent(new KernelRemovedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new KernelRemovedEvent(message.MessageId, entity));
                 }, location: this.GetType());
         }
 

+ 3 - 3
src/NTMinerClient/Core/Kernels/Impl/PackageSet.cs

@@ -27,7 +27,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<PackageData>();
                     repository.Add(entity);
 
-                    VirtualRoot.RaiseEvent(new PackageAddedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new PackageAddedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<UpdatePackageCommand>("更新包", LogEnum.DevConsole,
                 action: message => {
@@ -52,7 +52,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<PackageData>();
                     repository.Update(entity);
 
-                    VirtualRoot.RaiseEvent(new PackageUpdatedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new PackageUpdatedEvent(message.MessageId, entity));
                 }, location: this.GetType());
             context.AddCmdPath<RemovePackageCommand>("移除包", LogEnum.DevConsole,
                 action: message => {
@@ -68,7 +68,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<PackageData>();
                     repository.Remove(entity.Id);
 
-                    VirtualRoot.RaiseEvent(new PackageRemovedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new PackageRemovedEvent(message.MessageId, entity));
                 }, location: this.GetType());
         }
 

+ 3 - 3
src/NTMinerClient/Core/Kernels/Impl/PoolKernelSet.cs

@@ -16,7 +16,7 @@ namespace NTMiner.Core.Kernels.Impl {
                         _dicById.Add(message.Input.GetId(), entity);
                         var repository = NTMinerRoot.CreateServerRepository<PoolKernelData>();
                         repository.Add(entity);
-                        VirtualRoot.RaiseEvent(new PoolKernelAddedEvent(message.Id, message.Input));
+                        VirtualRoot.RaiseEvent(new PoolKernelAddedEvent(message.MessageId, message.Input));
                     }
                 }, location: this.GetType());
             _context.AddCmdPath<RemovePoolKernelCommand>("处理移除矿池级内核命令", LogEnum.DevConsole,
@@ -26,7 +26,7 @@ namespace NTMiner.Core.Kernels.Impl {
                         _dicById.Remove(message.EntityId);
                         var repository = NTMinerRoot.CreateServerRepository<PoolKernelData>();
                         repository.Remove(message.EntityId);
-                        VirtualRoot.RaiseEvent(new PoolKernelRemovedEvent(message.Id, entity));
+                        VirtualRoot.RaiseEvent(new PoolKernelRemovedEvent(message.MessageId, entity));
                     }
                 }, location: this.GetType());
             _context.AddCmdPath<UpdatePoolKernelCommand>("更新矿池内核", LogEnum.DevConsole,
@@ -49,7 +49,7 @@ namespace NTMiner.Core.Kernels.Impl {
                     var repository = NTMinerRoot.CreateServerRepository<PoolKernelData>();
                     repository.Update(entity);
 
-                    VirtualRoot.RaiseEvent(new PoolKernelUpdatedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new PoolKernelUpdatedEvent(message.MessageId, entity));
                 }, location: this.GetType());
         }
 

+ 4 - 4
src/NTMinerClient/Core/MinerServer/Impl/ColumnsShowSet.cs

@@ -19,7 +19,7 @@ namespace NTMiner.Core.MinerServer.Impl {
                 RpcRoot.Server.ColumnsShowService.AddOrUpdateColumnsShowAsync(entity, (response, exception) => {
                     if (response.IsSuccess()) {
                         _dicById.Add(entity.Id, entity);
-                        VirtualRoot.RaiseEvent(new ColumnsShowAddedEvent(message.Id, entity));
+                        VirtualRoot.RaiseEvent(new ColumnsShowAddedEvent(message.MessageId, entity));
                     }
                     else {
                         VirtualRoot.Out.ShowError(response.ReadMessage(exception), autoHideSeconds: 4);
@@ -40,11 +40,11 @@ namespace NTMiner.Core.MinerServer.Impl {
                 RpcRoot.Server.ColumnsShowService.AddOrUpdateColumnsShowAsync(entity, (response, exception) => {
                     if (!response.IsSuccess()) {
                         entity.Update(oldValue);
-                        VirtualRoot.RaiseEvent(new ColumnsShowUpdatedEvent(message.Id, entity));
+                        VirtualRoot.RaiseEvent(new ColumnsShowUpdatedEvent(message.MessageId, entity));
                         VirtualRoot.Out.ShowError(response.ReadMessage(exception), autoHideSeconds: 4);
                     }
                 });
-                VirtualRoot.RaiseEvent(new ColumnsShowUpdatedEvent(message.Id, entity));
+                VirtualRoot.RaiseEvent(new ColumnsShowUpdatedEvent(message.MessageId, entity));
             }, location: this.GetType());
             VirtualRoot.AddCmdPath<RemoveColumnsShowCommand>(action: (message) => {
                 InitOnece();
@@ -58,7 +58,7 @@ namespace NTMiner.Core.MinerServer.Impl {
                 RpcRoot.Server.ColumnsShowService.RemoveColumnsShowAsync(entity.Id, (response, exception) => {
                     if (response.IsSuccess()) {
                         _dicById.Remove(entity.Id);
-                        VirtualRoot.RaiseEvent(new ColumnsShowRemovedEvent(message.Id, entity));
+                        VirtualRoot.RaiseEvent(new ColumnsShowRemovedEvent(message.MessageId, entity));
                     }
                     else {
                         VirtualRoot.Out.ShowError(response.ReadMessage(exception), autoHideSeconds: 4);

+ 4 - 4
src/NTMinerClient/Core/MinerServer/Impl/MineWorkSet.cs

@@ -19,7 +19,7 @@ namespace NTMiner.Core.MinerServer.Impl {
                 var response = RpcRoot.Server.MineWorkService.AddOrUpdateMineWork(entity);
                 if (response.IsSuccess()) {
                     _dicById.Add(entity.Id, entity);
-                    VirtualRoot.RaiseEvent(new MineWorkAddedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new MineWorkAddedEvent(message.MessageId, entity));
                 }
                 else {
                     VirtualRoot.Out.ShowError(response.Description, autoHideSeconds: 4);
@@ -39,11 +39,11 @@ namespace NTMiner.Core.MinerServer.Impl {
                 RpcRoot.Server.MineWorkService.AddOrUpdateMineWorkAsync(entity, (response, exception) => {
                     if (!response.IsSuccess()) {
                         entity.Update(oldValue);
-                        VirtualRoot.RaiseEvent(new MineWorkUpdatedEvent(message.Id, entity));
+                        VirtualRoot.RaiseEvent(new MineWorkUpdatedEvent(message.MessageId, entity));
                         VirtualRoot.Out.ShowError(response.ReadMessage(exception), autoHideSeconds: 4);
                     }
                 });
-                VirtualRoot.RaiseEvent(new MineWorkUpdatedEvent(message.Id, entity));
+                VirtualRoot.RaiseEvent(new MineWorkUpdatedEvent(message.MessageId, entity));
             }, location: this.GetType());
             VirtualRoot.AddCmdPath<RemoveMineWorkCommand>(action: (message) => {
                 InitOnece();
@@ -57,7 +57,7 @@ namespace NTMiner.Core.MinerServer.Impl {
                 RpcRoot.Server.MineWorkService.RemoveMineWorkAsync(entity.Id, (response, exception) => {
                     if (response.IsSuccess()) {
                         _dicById.Remove(entity.Id);
-                        VirtualRoot.RaiseEvent(new MineWorkRemovedEvent(message.Id, entity));
+                        VirtualRoot.RaiseEvent(new MineWorkRemovedEvent(message.MessageId, entity));
                     }
                     else {
                         VirtualRoot.Out.ShowError(response.ReadMessage(exception), autoHideSeconds: 4);

+ 4 - 4
src/NTMinerClient/Core/MinerServer/Impl/MinerGroupSet.cs

@@ -22,7 +22,7 @@ namespace NTMiner.Core.MinerServer.Impl {
                 RpcRoot.Server.MinerGroupService.AddOrUpdateMinerGroupAsync(entity, (response, exception) => {
                     if (response.IsSuccess()) {
                         _dicById.Add(entity.Id, entity);
-                        VirtualRoot.RaiseEvent(new MinerGroupAddedEvent(message.Id, entity));
+                        VirtualRoot.RaiseEvent(new MinerGroupAddedEvent(message.MessageId, entity));
                     }
                     else {
                         VirtualRoot.Out.ShowError(response.ReadMessage(exception), autoHideSeconds: 4);
@@ -46,11 +46,11 @@ namespace NTMiner.Core.MinerServer.Impl {
                 RpcRoot.Server.MinerGroupService.AddOrUpdateMinerGroupAsync(entity, (response, exception) => {
                     if (!response.IsSuccess()) {
                         entity.Update(oldValue);
-                        VirtualRoot.RaiseEvent(new MinerGroupUpdatedEvent(message.Id, entity));
+                        VirtualRoot.RaiseEvent(new MinerGroupUpdatedEvent(message.MessageId, entity));
                         VirtualRoot.Out.ShowError(response.ReadMessage(exception), autoHideSeconds: 4);
                     }
                 });
-                VirtualRoot.RaiseEvent(new MinerGroupUpdatedEvent(message.Id, entity));
+                VirtualRoot.RaiseEvent(new MinerGroupUpdatedEvent(message.MessageId, entity));
             }, location: this.GetType());
             VirtualRoot.AddCmdPath<RemoveMinerGroupCommand>(action: (message) => {
                 InitOnece();
@@ -64,7 +64,7 @@ namespace NTMiner.Core.MinerServer.Impl {
                 RpcRoot.Server.MinerGroupService.RemoveMinerGroupAsync(entity.Id, (response, exception) => {
                     if (response.IsSuccess()) {
                         _dicById.Remove(entity.Id);
-                        VirtualRoot.RaiseEvent(new MinerGroupRemovedEvent(message.Id, entity));
+                        VirtualRoot.RaiseEvent(new MinerGroupRemovedEvent(message.MessageId, entity));
                     }
                     else {
                         VirtualRoot.Out.ShowError(response.ReadMessage(exception), autoHideSeconds: 4);

+ 4 - 4
src/NTMinerClient/Core/MinerServer/Impl/NTMinerWalletSet.cs

@@ -21,7 +21,7 @@ namespace NTMiner.Core.MinerServer.Impl {
                 RpcRoot.OfficialServer.NTMinerWalletService.AddOrUpdateNTMinerWalletAsync(entity, (response, e) => {
                     if (response.IsSuccess()) {
                         _dicById.Add(entity.Id, entity);
-                        VirtualRoot.RaiseEvent(new NTMinerWalletAddedEvent(message.Id, entity));
+                        VirtualRoot.RaiseEvent(new NTMinerWalletAddedEvent(message.MessageId, entity));
                     }
                     else {
                         VirtualRoot.Out.ShowError(response.ReadMessage(e), autoHideSeconds: 4);
@@ -44,11 +44,11 @@ namespace NTMiner.Core.MinerServer.Impl {
                 RpcRoot.OfficialServer.NTMinerWalletService.AddOrUpdateNTMinerWalletAsync(entity, (response, e) => {
                     if (!response.IsSuccess()) {
                         entity.Update(oldValue);
-                        VirtualRoot.RaiseEvent(new NTMinerWalletUpdatedEvent(message.Id, entity));
+                        VirtualRoot.RaiseEvent(new NTMinerWalletUpdatedEvent(message.MessageId, entity));
                         VirtualRoot.Out.ShowError(response.ReadMessage(e), autoHideSeconds: 4);
                     }
                 });
-                VirtualRoot.RaiseEvent(new NTMinerWalletUpdatedEvent(message.Id, entity));
+                VirtualRoot.RaiseEvent(new NTMinerWalletUpdatedEvent(message.MessageId, entity));
             }, location: this.GetType());
             VirtualRoot.AddCmdPath<RemoveNTMinerWalletCommand>(action: (message) => {
                 if (message == null || message.EntityId == Guid.Empty) {
@@ -61,7 +61,7 @@ namespace NTMiner.Core.MinerServer.Impl {
                 RpcRoot.OfficialServer.NTMinerWalletService.RemoveNTMinerWalletAsync(entity.Id, (response, e) => {
                     if (response.IsSuccess()) {
                         _dicById.Remove(entity.Id);
-                        VirtualRoot.RaiseEvent(new NTMinerWalletRemovedEvent(message.Id, entity));
+                        VirtualRoot.RaiseEvent(new NTMinerWalletRemovedEvent(message.MessageId, entity));
                     }
                     else {
                         VirtualRoot.Out.ShowError(response.ReadMessage(e), autoHideSeconds: 4);

+ 4 - 4
src/NTMinerClient/Core/MinerServer/Impl/OverClockDataSet.cs

@@ -24,7 +24,7 @@ namespace NTMiner.Core.MinerServer.Impl {
                 RpcRoot.OfficialServer.OverClockDataService.AddOrUpdateOverClockDataAsync(entity, (response, e) => {
                     if (response.IsSuccess()) {
                         _dicById.Add(entity.Id, entity);
-                        VirtualRoot.RaiseEvent(new OverClockDataAddedEvent(message.Id, entity));
+                        VirtualRoot.RaiseEvent(new OverClockDataAddedEvent(message.MessageId, entity));
                     }
                     else {
                         VirtualRoot.Out.ShowError(response.ReadMessage(e), autoHideSeconds: 4);
@@ -47,11 +47,11 @@ namespace NTMiner.Core.MinerServer.Impl {
                 RpcRoot.OfficialServer.OverClockDataService.AddOrUpdateOverClockDataAsync(entity, (response, e) => {
                     if (!response.IsSuccess()) {
                         entity.Update(oldValue);
-                        VirtualRoot.RaiseEvent(new OverClockDataUpdatedEvent(message.Id, entity));
+                        VirtualRoot.RaiseEvent(new OverClockDataUpdatedEvent(message.MessageId, entity));
                         VirtualRoot.Out.ShowError(response.ReadMessage(e), autoHideSeconds: 4);
                     }
                 });
-                VirtualRoot.RaiseEvent(new OverClockDataUpdatedEvent(message.Id, entity));
+                VirtualRoot.RaiseEvent(new OverClockDataUpdatedEvent(message.MessageId, entity));
             }, location: this.GetType());
             VirtualRoot.AddCmdPath<RemoveOverClockDataCommand>(action: (message) => {
                 if (message == null || message.EntityId == Guid.Empty) {
@@ -64,7 +64,7 @@ namespace NTMiner.Core.MinerServer.Impl {
                 RpcRoot.OfficialServer.OverClockDataService.RemoveOverClockDataAsync(entity.Id, (response, e) => {
                     if (response.IsSuccess()) {
                         _dicById.Remove(entity.Id);
-                        VirtualRoot.RaiseEvent(new OverClockDataRemovedEvent(message.Id, entity));
+                        VirtualRoot.RaiseEvent(new OverClockDataRemovedEvent(message.MessageId, entity));
                     }
                     else {
                         VirtualRoot.Out.ShowError(response.ReadMessage(e), autoHideSeconds: 4);

+ 3 - 3
src/NTMinerClient/Core/MinerServer/Impl/ServerAppSettingSet.cs

@@ -33,10 +33,10 @@ namespace NTMiner.Core.MinerServer.Impl {
                             entity.Value = oldValue.Value;
                         }
                         VirtualRoot.Out.ShowError(response.ReadMessage(exception), autoHideSeconds: 4);
-                        VirtualRoot.RaiseEvent(new ServerAppSettingSetedEvent(message.Id, entity));
+                        VirtualRoot.RaiseEvent(new ServerAppSettingSetedEvent(message.MessageId, entity));
                     }
                 });
-                VirtualRoot.RaiseEvent(new ServerAppSettingSetedEvent(message.Id, entity));
+                VirtualRoot.RaiseEvent(new ServerAppSettingSetedEvent(message.MessageId, entity));
             }, location: this.GetType());
             VirtualRoot.AddCmdPath<SetServerAppSettingsCommand>(action: message => {
                 if (message.AppSettings == null) {
@@ -56,7 +56,7 @@ namespace NTMiner.Core.MinerServer.Impl {
                         oldValue = null;
                         _dicByKey.Add(item.Key, entity);
                     }
-                    VirtualRoot.RaiseEvent(new ServerAppSettingSetedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new ServerAppSettingSetedEvent(message.MessageId, entity));
                 }
                 RpcRoot.Server.AppSettingService.SetAppSettingsAsync(message.AppSettings.Select(a => AppSettingData.Create(a)).ToList(), (response, exception) => {
                     if (!response.IsSuccess()) {

+ 4 - 4
src/NTMinerClient/Core/MinerServer/Impl/UserSet.cs

@@ -20,7 +20,7 @@ namespace NTMiner.Core.MinerServer.Impl {
                         if (response.IsSuccess()) {
                             UserData entity = new UserData(message.User);
                             _dicByLoginName.Add(message.User.LoginName, entity);
-                            VirtualRoot.RaiseEvent(new UserAddedEvent(message.Id, entity));
+                            VirtualRoot.RaiseEvent(new UserAddedEvent(message.MessageId, entity));
                         }
                         else {
                             VirtualRoot.Out.ShowError(response.ReadMessage(exception), autoHideSeconds: 4);
@@ -41,11 +41,11 @@ namespace NTMiner.Core.MinerServer.Impl {
                     }, (response, exception) => {
                         if (!response.IsSuccess()) {
                             entity.Update(oldValue);
-                            VirtualRoot.RaiseEvent(new UserUpdatedEvent(message.Id, entity));
+                            VirtualRoot.RaiseEvent(new UserUpdatedEvent(message.MessageId, entity));
                             VirtualRoot.Out.ShowError(response.ReadMessage(exception), autoHideSeconds: 4);
                         }
                     });
-                    VirtualRoot.RaiseEvent(new UserUpdatedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new UserUpdatedEvent(message.MessageId, entity));
                 }
             }, location: this.GetType());
             VirtualRoot.AddCmdPath<RemoveUserCommand>(action: message => {
@@ -54,7 +54,7 @@ namespace NTMiner.Core.MinerServer.Impl {
                     RpcRoot.Server.UserService.RemoveUserAsync(message.LoginName, (response, exception) => {
                         if (response.IsSuccess()) {
                             _dicByLoginName.Remove(entity.LoginName);
-                            VirtualRoot.RaiseEvent(new UserRemovedEvent(message.Id, entity));
+                            VirtualRoot.RaiseEvent(new UserRemovedEvent(message.MessageId, entity));
                         }
                         else {
                             VirtualRoot.Out.ShowError(response.ReadMessage(exception), autoHideSeconds: 4);

+ 2 - 2
src/NTMinerClient/Core/Profiles/Impl/GpuProfileSet.cs

@@ -23,12 +23,12 @@ namespace NTMiner.Core.Profiles.Impl {
                     _data.GpuProfiles.Add(data);
                     Save();
                 }
-                VirtualRoot.RaiseEvent(new GpuProfileAddedOrUpdatedEvent(message.Id, data));
+                VirtualRoot.RaiseEvent(new GpuProfileAddedOrUpdatedEvent(message.MessageId, data));
             }, location: this.GetType());
             VirtualRoot.AddCmdPath<CoinOverClockCommand>(action: message => {
                 Task.Factory.StartNew(() => {
                     CoinOverClock(root, message.CoinId);
-                    VirtualRoot.RaiseEvent(new CoinOverClockDoneEvent(targetPathId: message.Id));
+                    VirtualRoot.RaiseEvent(new CoinOverClockDoneEvent(targetPathId: message.MessageId));
                 });
             }, location: this.GetType());
         }

+ 3 - 3
src/NTMinerClient/Core/Profiles/Impl/WalletSet.cs

@@ -26,7 +26,7 @@ namespace NTMiner.Core.Profiles.Impl {
                 _dicById.Add(entity.Id, entity);
                 AddWallet(entity);
 
-                VirtualRoot.RaiseEvent(new WalletAddedEvent(message.Id, entity));
+                VirtualRoot.RaiseEvent(new WalletAddedEvent(message.MessageId, entity));
             }, location: this.GetType());
             VirtualRoot.AddCmdPath<UpdateWalletCommand>(action: message => {
                 InitOnece();
@@ -49,7 +49,7 @@ namespace NTMiner.Core.Profiles.Impl {
                 entity.Update(message.Input);
                 UpdateWallet(entity);
 
-                VirtualRoot.RaiseEvent(new WalletUpdatedEvent(message.Id, entity));
+                VirtualRoot.RaiseEvent(new WalletUpdatedEvent(message.MessageId, entity));
             }, location: this.GetType());
             VirtualRoot.AddCmdPath<RemoveWalletCommand>(action: (message) => {
                 InitOnece();
@@ -63,7 +63,7 @@ namespace NTMiner.Core.Profiles.Impl {
                 _dicById.Remove(entity.GetId());
                 RemoveWallet(entity.Id);
 
-                VirtualRoot.RaiseEvent(new WalletRemovedEvent(message.Id, entity));
+                VirtualRoot.RaiseEvent(new WalletRemovedEvent(message.MessageId, entity));
             }, location: this.GetType());
         }
 

+ 1 - 1
src/NTMinerClient/NTMinerRoot.partials.MineContext.cs

@@ -585,7 +585,7 @@ namespace NTMiner {
                                     message => {
                                         // pathId是唯一的,从而可以断定该消息一定是因为该命令而引发的
                                         ContinueCreateProcess();
-                                    }, location: this.GetType(), pathId: cmd.Id);
+                                    }, location: this.GetType(), pathId: cmd.MessageId);
                                 // 超频是在另一个线程执行的,因为N卡超频当cpu性能非常差时较耗时
                                 VirtualRoot.Execute(cmd);
                             }

+ 3 - 3
src/NTMinerHub/Hub/Cmd.cs

@@ -4,13 +4,13 @@ namespace NTMiner.Hub {
 
     public abstract class Cmd : ICmd {
         protected Cmd() {
-            Id = Guid.NewGuid();
+            MessageId = Guid.NewGuid();
         }
 
         protected Cmd(Guid id) {
-            this.Id = id;
+            this.MessageId = id;
         }
 
-        public Guid Id { get; private set; }
+        public Guid MessageId { get; private set; }
     }
 }

+ 2 - 2
src/NTMinerHub/Hub/DomainEvent`1.cs

@@ -3,13 +3,13 @@
 namespace NTMiner.Hub {
     public abstract class DomainEvent<TEntity> : IEvent {
         protected DomainEvent(PathId targetPathId, TEntity source) {
-            this.Id = Guid.NewGuid();
+            this.MessageId = Guid.NewGuid();
             this.TargetPathId = targetPathId;
             this.Target = source;
             this.BornOn = DateTime.Now;
         }
 
-        public Guid Id { get; private set; }
+        public Guid MessageId { get; private set; }
         public PathId TargetPathId { get; private set; }
         public DateTime BornOn { get; private set; }
         public TEntity Target { get; private set; }

+ 2 - 2
src/NTMinerHub/Hub/EventBase.cs

@@ -3,7 +3,7 @@
 namespace NTMiner.Hub {
     public abstract class EventBase : IEvent {
         protected EventBase() {
-            this.Id = Guid.NewGuid();
+            this.MessageId = Guid.NewGuid();
             this.BornOn = DateTime.Now;
             this.TargetPathId = PathId.Empty;
         }
@@ -12,7 +12,7 @@ namespace NTMiner.Hub {
             this.TargetPathId = targetPathId;
         }
 
-        public Guid Id { get; private set; }
+        public Guid MessageId { get; private set; }
 
         public PathId TargetPathId { get; private set; }
 

+ 1 - 1
src/NTMinerHub/Hub/IMessage.cs

@@ -3,6 +3,6 @@ using System;
 
 namespace NTMiner.Hub {
     public interface IMessage {
-        Guid Id { get; }
+        Guid MessageId { get; }
     }
 }

+ 1 - 1
src/NTMinerHub/Hub/MessageHub.cs

@@ -142,7 +142,7 @@
                             canGo = true;
                         }
                         else {
-                            canGo = messagePath.PathId == cmd.Id;
+                            canGo = messagePath.PathId == cmd.MessageId;
                         }
                     }
                     if (canGo && messagePath.ViaTimesLimit > 0) {

+ 3 - 3
src/NTMinerRpcClient/KernelOutputKeyword/KernelOutputKeywordSet.cs

@@ -70,7 +70,7 @@ namespace NTMiner.KernelOutputKeyword {
                             col.Update(exist);
                         }
                         if (!isServer) {
-                            VirtualRoot.RaiseEvent(new UserKernelOutputKeywordUpdatedEvent(message.Id, exist));
+                            VirtualRoot.RaiseEvent(new UserKernelOutputKeywordUpdatedEvent(message.MessageId, exist));
                         }
                     }
                     else {
@@ -87,7 +87,7 @@ namespace NTMiner.KernelOutputKeyword {
                             col.Insert(entity);
                         }
                         if (!isServer) {
-                            VirtualRoot.RaiseEvent(new UserKernelOutputKeywordAddedEvent(message.Id, entity));
+                            VirtualRoot.RaiseEvent(new UserKernelOutputKeywordAddedEvent(message.MessageId, entity));
                         }
                     }
                 }
@@ -122,7 +122,7 @@ namespace NTMiner.KernelOutputKeyword {
                         col.Delete(message.EntityId);
                     }
                     if (!isServer) {
-                        VirtualRoot.RaiseEvent(new UserKernelOutputKeywordRemovedEvent(message.Id, entity));
+                        VirtualRoot.RaiseEvent(new UserKernelOutputKeywordRemovedEvent(message.MessageId, entity));
                     }
                 }
                 else if (DevMode.IsDevMode) {

+ 3 - 3
src/NTMinerServices/Data/Impl/UserSet.cs

@@ -18,7 +18,7 @@ namespace NTMiner.Data.Impl {
                         var col = db.GetCollection<UserData>();
                         col.Insert(entity);
                     }
-                    VirtualRoot.RaiseEvent(new UserAddedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new UserAddedEvent(message.MessageId, entity));
                 }
             }, location: this.GetType());
             VirtualRoot.AddCmdPath<UpdateUserCommand>(action: message => {
@@ -29,7 +29,7 @@ namespace NTMiner.Data.Impl {
                         var col = db.GetCollection<UserData>();
                         col.Update(entity);
                     }
-                    VirtualRoot.RaiseEvent(new UserUpdatedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new UserUpdatedEvent(message.MessageId, entity));
                 }
             }, location: this.GetType());
             VirtualRoot.AddCmdPath<RemoveUserCommand>(action: message => {
@@ -40,7 +40,7 @@ namespace NTMiner.Data.Impl {
                         var col = db.GetCollection<UserData>();
                         col.Delete(message.LoginName);
                     }
-                    VirtualRoot.RaiseEvent(new UserRemovedEvent(message.Id, entity));
+                    VirtualRoot.RaiseEvent(new UserRemovedEvent(message.MessageId, entity));
                 }
             }, location: this.GetType());
         }

+ 1 - 1
src/NTMinerlib/AppSetting/LocalAppSettingSet.cs

@@ -25,7 +25,7 @@ namespace NTMiner.AppSetting {
                     var col = db.GetCollection<AppSettingData>();
                     col.Upsert(entity);
                 }
-                VirtualRoot.RaiseEvent(new LocalAppSettingChangedEvent(message.Id, entity));
+                VirtualRoot.RaiseEvent(new LocalAppSettingChangedEvent(message.MessageId, entity));
             }, location: this.GetType());
         }
 

+ 1 - 1
src/NTMinerlib/LocalMessage/LocalMessageSet.cs

@@ -47,7 +47,7 @@ namespace NTMiner.LocalMessage {
                 catch (Exception e) {
                     Logger.ErrorDebugLine(e);
                 }
-                VirtualRoot.RaiseEvent(new LocalMessageAddedEvent(message.Id, data, removes));
+                VirtualRoot.RaiseEvent(new LocalMessageAddedEvent(message.MessageId, data, removes));
             }, location: this.GetType());
             VirtualRoot.AddCmdPath<ClearLocalMessageSetCommand>(action: message => {
                 if (string.IsNullOrEmpty(_connectionString)) {

+ 26 - 6
src/WebSocketServerTests/AllInOne.cs

@@ -1,20 +1,40 @@
 using System;
+using System.Collections.Generic;
 using WebSocketSharp;
 using WebSocketSharp.Server;
 
 namespace NTMiner {
-    public class AllInOne : WebSocketBehaviorBase {
+    public class AllInOne : WebSocketBehavior {
+        private static readonly HashSet<string> _holdSessionIds = new HashSet<string>();
+        private static bool _isFirst = true;
+        private static object _locker = new object();
+
         protected override void OnOpen() {
             base.OnOpen();
-            Write.DevWarn("ConnCount " + Sessions.Count);
+            if (_isFirst) {
+                lock (_locker) {
+                    if (_isFirst) {
+                        VirtualRoot.AddEventPath<Per10SecondEvent>("测试,周期getSpeed", LogEnum.None, action: message => {
+                            foreach (var sessionId in _holdSessionIds) {
+                                VirtualRoot.Execute(new GetSpeedWsCommand(Guid.Empty, sessionId, base.Sessions));
+                            }
+                        }, location: this.GetType());
+                        _isFirst = false;
+                    }
+                }
+            }
+            Write.DevWarn("ConnCount " + base.Sessions.Count);
+            _holdSessionIds.Add(base.ID);
         }
 
         protected override void OnClose(CloseEventArgs e) {
+            _holdSessionIds.Remove(base.ID);
             base.OnClose(e);
-            Write.DevWarn("ConnCount " + Sessions.Count);
+            Write.DevWarn("ConnCount " + base.Sessions.Count);
         }
 
         protected override void OnError(ErrorEventArgs e) {
+            _holdSessionIds.Remove(base.ID);
             base.OnError(e);
             Write.DevException(e.Exception);
         }
@@ -28,15 +48,15 @@ namespace NTMiner {
                 return;
             }
             switch (request.action) {
-                case "getSpeed":
+                case GetSpeedWsCommand.Action:
                     request.Parse(out Guid messageId);
-                    VirtualRoot.Execute(new GetSpeedWsCommand(request.action, messageId, this));
+                    VirtualRoot.Execute(new GetSpeedWsCommand(messageId, base.ID, base.Sessions));
                     break;
                 default:
                     base.Send($"invalid action: {request.action}");
                     break;
             }
-            Write.DevWarn("ConnCount " + Sessions.Count);
+            Write.DevWarn("ConnCount " + base.Sessions.Count);
         }
     }
 }

+ 10 - 8
src/WebSocketServerTests/WSCommands.cs

@@ -1,21 +1,23 @@
 using NTMiner.Hub;
 using System;
+using WebSocketSharp.Server;
 
 namespace NTMiner {
     public abstract class WsCommandBase : ICmd {
-        public WsCommandBase(string action, Guid id, WebSocketBehaviorBase ws) {
-            this.Action = action;
-            this.Id = id;
-            this.Ws = ws;
+        public WsCommandBase(Guid messageId, string sessionId, WebSocketSessionManager sessions) {
+            this.MessageId = messageId;
+            this.SessionId = sessionId;
+            this.Sessions = sessions;
         }
 
-        public string Action { get; private set; }
-        public Guid Id { get; private set; }
-        public WebSocketBehaviorBase Ws { get; private set; }
+        public Guid MessageId { get; private set; }
+        public string SessionId { get; private set; }
+        public WebSocketSessionManager Sessions { get; private set; }
     }
 
     public class GetSpeedWsCommand : WsCommandBase {
-        public GetSpeedWsCommand(string action, Guid id, WebSocketBehaviorBase ws) : base(action, id, ws) {
+        public const string Action = "getSpeed";
+        public GetSpeedWsCommand(Guid messageId, string sessionId, WebSocketSessionManager sessions) : base(messageId, sessionId, sessions) {
         }
     }
 }

+ 0 - 32
src/WebSocketServerTests/WebSocketBehaviorBase.cs

@@ -1,32 +0,0 @@
-using System;
-using System.IO;
-using WebSocketSharp.Server;
-
-namespace NTMiner {
-    public class WebSocketBehaviorBase : WebSocketBehavior {
-        public new void Error(string message, Exception exception) {
-            base.Error(message, exception);
-        }
-        public new void Send(string data) {
-            base.Send(data);
-        }
-        public new void Send(FileInfo file) {
-            base.Send(file);
-        }
-        public new void Send(byte[] data) {
-            base.Send(data);
-        }
-        public new void SendAsync(FileInfo file, Action<bool> completed) {
-            base.SendAsync(file, completed);
-        }
-        public new void SendAsync(Stream stream, int length, Action<bool> completed) {
-            base.SendAsync(stream, length, completed);
-        }
-        public new void SendAsync(byte[] data, Action<bool> completed) {
-            base.SendAsync(data, completed);
-        }
-        public new void SendAsync(string data, Action<bool> completed) {
-            base.SendAsync(data, completed);
-        }
-    }
-}

+ 1 - 2
src/WebSocketServerTests/WebSocketServerTests.csproj

@@ -47,9 +47,8 @@
   </ItemGroup>
   <ItemGroup>
     <Compile Include="AllInOne.cs" />
-    <Compile Include="Program.cs" />
+    <Compile Include="WsRoot.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="WebSocketBehaviorBase.cs" />
     <Compile Include="WsCommands.cs" />
   </ItemGroup>
   <ItemGroup>

+ 6 - 5
src/WebSocketServerTests/Program.cs → src/WebSocketServerTests/WsRoot.cs

@@ -3,28 +3,29 @@ using System.Collections.Generic;
 using WebSocketSharp.Server;
 
 namespace NTMiner {
-    class Program {
+    public class WsRoot {
         static void Main() {
             DevMode.SetDevMode();
 
             VirtualRoot.AddCmdPath<GetSpeedWsCommand>(action: message => {
-                message.Ws.Send(new JsonResponse(message.Id) {
+                message.Sessions.SendToAsync(new JsonResponse(message.MessageId) {
                     code = 200,
                     phrase = "Ok",
                     des = "成功",
-                    action = message.Action,
+                    action = GetSpeedWsCommand.Action,
                     data = new Dictionary<string, object> {
                                         {"str", "hello" },
                                         {"num", 111 },
                                         {"date", DateTime.Now }
                                     }
-                }.ToJson());
-            }, typeof(Program), logType: LogEnum.None);
+                }.ToJson(), message.SessionId, completed: null);
+            }, typeof(WsRoot), logType: LogEnum.None);
 
             var wssv = new WebSocketServer("ws://0.0.0.0:8088");
             wssv.Log.Level = WebSocketSharp.LogLevel.Trace;
             wssv.AddWebSocketService<AllInOne>("/");
             wssv.Start();
+            VirtualRoot.StartTimer();
             Windows.ConsoleHandler.Register(wssv.Stop);
             Console.ReadKey(true);
             wssv.Stop();