PackageSet.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. namespace NTMiner.Core.Kernels.Impl {
  5. public class PackageSet : SetBase, IPackageSet {
  6. private readonly Dictionary<Guid, PackageData> _dicById = new Dictionary<Guid, PackageData>();
  7. private readonly IServerContext _context;
  8. public PackageSet(IServerContext context) {
  9. _context = context;
  10. context.AddCmdPath<AddPackageCommand>("添加包", LogEnum.DevConsole,
  11. action: message => {
  12. InitOnece();
  13. if (message == null || message.Input == null || message.Input.GetId() == Guid.Empty) {
  14. throw new ArgumentNullException();
  15. }
  16. if (string.IsNullOrEmpty(message.Input.Name)) {
  17. throw new ValidationException($"{nameof(message.Input.Name)} can't be null or empty");
  18. }
  19. if (_dicById.Values.Any(a => string.Equals(message.Input.Name, a.Name, StringComparison.OrdinalIgnoreCase))) {
  20. throw new ValidationException("包名重复");
  21. }
  22. if (_dicById.ContainsKey(message.Input.GetId())) {
  23. return;
  24. }
  25. PackageData entity = new PackageData().Update(message.Input);
  26. _dicById.Add(entity.Id, entity);
  27. var repository = context.CreateServerRepository<PackageData>();
  28. repository.Add(entity);
  29. VirtualRoot.RaiseEvent(new PackageAddedEvent(message.MessageId, entity));
  30. }, location: this.GetType());
  31. context.AddCmdPath<UpdatePackageCommand>("更新包", LogEnum.DevConsole,
  32. action: message => {
  33. InitOnece();
  34. if (message == null || message.Input == null || message.Input.GetId() == Guid.Empty) {
  35. throw new ArgumentNullException();
  36. }
  37. if (string.IsNullOrEmpty(message.Input.Name)) {
  38. throw new ValidationException($"{nameof(message.Input.Name)} can't be null or empty");
  39. }
  40. if (!_dicById.TryGetValue(message.Input.GetId(), out PackageData entity)) {
  41. return;
  42. }
  43. if (_dicById.Values.Any(a => a.Id != message.Input.Id && string.Equals(message.Input.Name, a.Name, StringComparison.OrdinalIgnoreCase))) {
  44. throw new ValidationException("包名重复");
  45. }
  46. if (ReferenceEquals(entity, message.Input)) {
  47. return;
  48. }
  49. entity.Update(message.Input);
  50. var repository = context.CreateServerRepository<PackageData>();
  51. repository.Update(entity);
  52. VirtualRoot.RaiseEvent(new PackageUpdatedEvent(message.MessageId, entity));
  53. }, location: this.GetType());
  54. context.AddCmdPath<RemovePackageCommand>("移除包", LogEnum.DevConsole,
  55. action: message => {
  56. InitOnece();
  57. if (message == null || message.EntityId == Guid.Empty) {
  58. throw new ArgumentNullException();
  59. }
  60. if (!_dicById.ContainsKey(message.EntityId)) {
  61. return;
  62. }
  63. PackageData entity = _dicById[message.EntityId];
  64. _dicById.Remove(entity.Id);
  65. var repository = context.CreateServerRepository<PackageData>();
  66. repository.Remove(entity.Id);
  67. VirtualRoot.RaiseEvent(new PackageRemovedEvent(message.MessageId, entity));
  68. }, location: this.GetType());
  69. }
  70. public int Count {
  71. get {
  72. InitOnece();
  73. return _dicById.Count;
  74. }
  75. }
  76. protected override void Init() {
  77. var repository = _context.CreateServerRepository<PackageData>();
  78. foreach (var item in repository.GetAll()) {
  79. if (!_dicById.ContainsKey(item.GetId())) {
  80. _dicById.Add(item.GetId(), item);
  81. }
  82. }
  83. }
  84. public bool Contains(Guid packageId) {
  85. InitOnece();
  86. return _dicById.ContainsKey(packageId);
  87. }
  88. public bool TryGetPackage(Guid packageId, out IPackage package) {
  89. InitOnece();
  90. var r = _dicById.TryGetValue(packageId, out PackageData pkg);
  91. package = pkg;
  92. return r;
  93. }
  94. public IEnumerable<IPackage> AsEnumerable() {
  95. InitOnece();
  96. return _dicById.Values;
  97. }
  98. }
  99. }