KernelProfileSet.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using NTMiner.Core.Kernels;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. namespace NTMiner.Core.Profiles.Impl {
  6. public class KernelProfileSet : IKernelProfileSet {
  7. private readonly Dictionary<Guid, KernelProfile> _dicByKernelId = new Dictionary<Guid, KernelProfile>();
  8. private readonly INTMinerRoot _root;
  9. private readonly object _locker = new object();
  10. public KernelProfileSet(INTMinerRoot root) {
  11. _root = root;
  12. }
  13. public IKernelProfile EmptyKernelProfile {
  14. get {
  15. return KernelProfile.Empty;
  16. }
  17. }
  18. public IKernelProfile GetKernelProfile(Guid kernelId) {
  19. if (_dicByKernelId.ContainsKey(kernelId)) {
  20. return _dicByKernelId[kernelId];
  21. }
  22. lock (_locker) {
  23. if (_dicByKernelId.ContainsKey(kernelId)) {
  24. return _dicByKernelId[kernelId];
  25. }
  26. var kernelProfile = new KernelProfile() {
  27. KernelId = kernelId
  28. };
  29. _dicByKernelId.Add(kernelId, kernelProfile);
  30. return kernelProfile;
  31. }
  32. }
  33. private class KernelProfile : IKernelProfile {
  34. public static readonly KernelProfile Empty = new KernelProfile();
  35. public KernelProfile() { }
  36. public Guid KernelId { get; set; }
  37. private IKernel _kernel;
  38. public IKernel Kernel {
  39. get {
  40. if (_kernel == null) {
  41. NTMinerRoot.Instance.ServerContext.KernelSet.TryGetKernel(this.KernelId, out _kernel);
  42. }
  43. return _kernel;
  44. }
  45. }
  46. public InstallStatus InstallStatus {
  47. get {
  48. if (this.KernelId == Guid.Empty || this.Kernel == null) {
  49. return InstallStatus.Installed;
  50. }
  51. if (string.IsNullOrEmpty(this.Kernel.Package)) {
  52. return InstallStatus.Uninstalled;
  53. }
  54. string packageFullName = this.Kernel.GetPackageFileFullName();
  55. if (string.IsNullOrEmpty(packageFullName)) {
  56. return InstallStatus.Uninstalled;
  57. }
  58. if (File.Exists(packageFullName)) {
  59. return InstallStatus.Installed;
  60. }
  61. return InstallStatus.Uninstalled;
  62. }
  63. }
  64. }
  65. }
  66. }