ntminer 5 lat temu
rodzic
commit
4b44ac4dd4

+ 4 - 4
src/MinerClientSelfHost/MinerClientController.cs

@@ -82,9 +82,9 @@ namespace NTMiner {
 
 
         [HttpPost]
         [HttpPost]
         [HttpGet]
         [HttpGet]
-        public SpeedData GetSpeed() {
+        public SpeedDto GetSpeed() {
             try {
             try {
-                return NTMinerContext.Instance.ReporterDataProvider.CreateSpeedData();
+                return NTMinerContext.Instance.ReporterDataProvider.CreateSpeedDto();
             }
             }
             catch (Exception e) {
             catch (Exception e) {
                 Logger.ErrorDebugLine(e);
                 Logger.ErrorDebugLine(e);
@@ -94,11 +94,11 @@ namespace NTMiner {
 
 
         [HttpPost]
         [HttpPost]
         [HttpGet]
         [HttpGet]
-        public SpeedData WsGetSpeed() {
+        public SpeedDto WsGetSpeed() {
             try {
             try {
                 var dataProvider = NTMinerContext.Instance.ReporterDataProvider;
                 var dataProvider = NTMinerContext.Instance.ReporterDataProvider;
                 dataProvider.WsGetSpeedOn = DateTime.Now;
                 dataProvider.WsGetSpeedOn = DateTime.Now;
-                return dataProvider.CreateSpeedData();
+                return dataProvider.CreateSpeedDto();
             }
             }
             catch (Exception e) {
             catch (Exception e) {
                 Logger.ErrorDebugLine(e);
                 Logger.ErrorDebugLine(e);

+ 2 - 2
src/NTMiner.Controllers/IMinerClientController.cs

@@ -13,8 +13,8 @@ namespace NTMiner.Controllers {
         ResponseBase CloseNTMiner(object request);
         ResponseBase CloseNTMiner(object request);
         ResponseBase StartMine(WorkRequest request);
         ResponseBase StartMine(WorkRequest request);
         ResponseBase StopMine(object request);
         ResponseBase StopMine(object request);
-        SpeedData GetSpeed();
-        SpeedData WsGetSpeed();
+        SpeedDto GetSpeed();
+        SpeedDto WsGetSpeed();
         List<ConsoleOutLine> GetConsoleOutLines(long afterTime);
         List<ConsoleOutLine> GetConsoleOutLines(long afterTime);
         List<LocalMessageDto> GetLocalMessages(long afterTime);
         List<LocalMessageDto> GetLocalMessages(long afterTime);
         void RefreshAutoBootStart();
         void RefreshAutoBootStart();

+ 1 - 1
src/NTMiner.Controllers/IReportController.cs

@@ -2,7 +2,7 @@
 
 
 namespace NTMiner.Controllers {
 namespace NTMiner.Controllers {
     public interface IReportController {
     public interface IReportController {
-        ReportResponse ReportSpeed(SpeedData speedData);
+        ReportResponse ReportSpeed(SpeedDto speedDto);
         void ReportState(ReportState request);
         void ReportState(ReportState request);
     }
     }
 }
 }

+ 1 - 1
src/NTMinerClient/Report/IReportDataProvider.cs

@@ -3,6 +3,6 @@
 namespace NTMiner.Report {
 namespace NTMiner.Report {
     public interface IReportDataProvider {
     public interface IReportDataProvider {
         DateTime WsGetSpeedOn { get; set; }
         DateTime WsGetSpeedOn { get; set; }
-        SpeedData CreateSpeedData();
+        SpeedDto CreateSpeedDto();
     }
     }
 }
 }

+ 35 - 35
src/NTMinerClient/Report/ReportDataProvider.cs

@@ -44,7 +44,7 @@ namespace NTMiner.Report {
 
 
         private ICoin _sLastSpeedMainCoin;
         private ICoin _sLastSpeedMainCoin;
         private ICoin _sLastSpeedDualCoin;
         private ICoin _sLastSpeedDualCoin;
-        public SpeedData CreateSpeedData() {
+        public SpeedDto CreateSpeedDto() {
             INTMinerContext root = NTMinerContext.Instance;
             INTMinerContext root = NTMinerContext.Instance;
             IWorkProfile workProfile = root.MinerProfile;
             IWorkProfile workProfile = root.MinerProfile;
             string localIps = VirtualRoot.FormatLocalIps(out string macAddress);
             string localIps = VirtualRoot.FormatLocalIps(out string macAddress);
@@ -52,7 +52,7 @@ namespace NTMiner.Report {
             if (root.CurrentMineContext != null) {
             if (root.CurrentMineContext != null) {
                 mineContextId = root.CurrentMineContext.Id;
                 mineContextId = root.CurrentMineContext.Id;
             }
             }
-            SpeedData data = new SpeedData {
+            SpeedDto speedDto = new SpeedDto {
                 MineContextId = mineContextId,
                 MineContextId = mineContextId,
                 MainCoinSpeedOn = DateTime.MinValue,
                 MainCoinSpeedOn = DateTime.MinValue,
                 DualCoinSpeedOn = DateTime.MinValue,
                 DualCoinSpeedOn = DateTime.MinValue,
@@ -131,54 +131,54 @@ namespace NTMiner.Report {
                 GpuTable = root.GpusSpeed.AsEnumerable().Where(a => a.Gpu.Index != NTMinerContext.GpuAllId).Select(a => a.ToGpuSpeedData()).ToArray()
                 GpuTable = root.GpusSpeed.AsEnumerable().Where(a => a.Gpu.Index != NTMinerContext.GpuAllId).Select(a => a.ToGpuSpeedData()).ToArray()
             };
             };
             if (workProfile.MineWork != null) {
             if (workProfile.MineWork != null) {
-                data.MineWorkId = workProfile.MineWork.GetId();
-                data.MineWorkName = workProfile.MineWork.Name;
+                speedDto.MineWorkId = workProfile.MineWork.GetId();
+                speedDto.MineWorkName = workProfile.MineWork.Name;
             }
             }
             #region 当前选中的币种是什么
             #region 当前选中的币种是什么
             if (root.ServerContext.CoinSet.TryGetCoin(workProfile.CoinId, out ICoin mainCoin)) {
             if (root.ServerContext.CoinSet.TryGetCoin(workProfile.CoinId, out ICoin mainCoin)) {
-                data.MainCoinCode = mainCoin.Code;
+                speedDto.MainCoinCode = mainCoin.Code;
                 ICoinProfile coinProfile = workProfile.GetCoinProfile(mainCoin.GetId());
                 ICoinProfile coinProfile = workProfile.GetCoinProfile(mainCoin.GetId());
-                data.MainCoinWallet = coinProfile.Wallet;
+                speedDto.MainCoinWallet = coinProfile.Wallet;
                 if (root.ServerContext.PoolSet.TryGetPool(coinProfile.PoolId, out IPool mainCoinPool)) {
                 if (root.ServerContext.PoolSet.TryGetPool(coinProfile.PoolId, out IPool mainCoinPool)) {
-                    data.MainCoinPool = mainCoinPool.Server;
+                    speedDto.MainCoinPool = mainCoinPool.Server;
                     if (root.IsMining) {
                     if (root.IsMining) {
-                        data.MainCoinPoolDelay = root.ServerContext.PoolSet.GetPoolDelayText(mainCoinPool.GetId(), isDual: false);
+                        speedDto.MainCoinPoolDelay = root.ServerContext.PoolSet.GetPoolDelayText(mainCoinPool.GetId(), isDual: false);
                     }
                     }
                     if (mainCoinPool.IsUserMode) {
                     if (mainCoinPool.IsUserMode) {
                         IPoolProfile mainCoinPoolProfile = workProfile.GetPoolProfile(coinProfile.PoolId);
                         IPoolProfile mainCoinPoolProfile = workProfile.GetPoolProfile(coinProfile.PoolId);
-                        data.MainCoinWallet = mainCoinPoolProfile.UserName;
+                        speedDto.MainCoinWallet = mainCoinPoolProfile.UserName;
                     }
                     }
                 }
                 }
                 else {
                 else {
-                    data.MainCoinPool = string.Empty;
+                    speedDto.MainCoinPool = string.Empty;
                 }
                 }
                 if (root.ServerContext.CoinKernelSet.TryGetCoinKernel(coinProfile.CoinKernelId, out ICoinKernel coinKernel)) {
                 if (root.ServerContext.CoinKernelSet.TryGetCoinKernel(coinProfile.CoinKernelId, out ICoinKernel coinKernel)) {
                     if (root.ServerContext.KernelSet.TryGetKernel(coinKernel.KernelId, out IKernel kernel)) {
                     if (root.ServerContext.KernelSet.TryGetKernel(coinKernel.KernelId, out IKernel kernel)) {
-                        data.Kernel = kernel.GetFullName();
+                        speedDto.Kernel = kernel.GetFullName();
                         if (root.ServerContext.KernelOutputSet.TryGetKernelOutput(kernel.KernelOutputId, out IKernelOutput kernelOutput)) {
                         if (root.ServerContext.KernelOutputSet.TryGetKernelOutput(kernel.KernelOutputId, out IKernelOutput kernelOutput)) {
-                            data.IsFoundOneGpuShare = !string.IsNullOrEmpty(kernelOutput.FoundOneShare);
-                            data.IsGotOneIncorrectGpuShare = !string.IsNullOrEmpty(kernelOutput.GpuGotOneIncorrectShare);
-                            data.IsRejectOneGpuShare = !string.IsNullOrEmpty(kernelOutput.RejectOneShare);
+                            speedDto.IsFoundOneGpuShare = !string.IsNullOrEmpty(kernelOutput.FoundOneShare);
+                            speedDto.IsGotOneIncorrectGpuShare = !string.IsNullOrEmpty(kernelOutput.GpuGotOneIncorrectShare);
+                            speedDto.IsRejectOneGpuShare = !string.IsNullOrEmpty(kernelOutput.RejectOneShare);
                         }
                         }
                         ICoinKernelProfile coinKernelProfile = workProfile.GetCoinKernelProfile(coinProfile.CoinKernelId);
                         ICoinKernelProfile coinKernelProfile = workProfile.GetCoinKernelProfile(coinProfile.CoinKernelId);
-                        data.IsDualCoinEnabled = coinKernelProfile.IsDualCoinEnabled;
+                        speedDto.IsDualCoinEnabled = coinKernelProfile.IsDualCoinEnabled;
                         if (coinKernelProfile.IsDualCoinEnabled) {
                         if (coinKernelProfile.IsDualCoinEnabled) {
                             if (root.ServerContext.CoinSet.TryGetCoin(coinKernelProfile.DualCoinId, out ICoin dualCoin)) {
                             if (root.ServerContext.CoinSet.TryGetCoin(coinKernelProfile.DualCoinId, out ICoin dualCoin)) {
-                                data.DualCoinCode = dualCoin.Code;
+                                speedDto.DualCoinCode = dualCoin.Code;
                                 ICoinProfile dualCoinProfile = workProfile.GetCoinProfile(dualCoin.GetId());
                                 ICoinProfile dualCoinProfile = workProfile.GetCoinProfile(dualCoin.GetId());
-                                data.DualCoinWallet = dualCoinProfile.DualCoinWallet;
+                                speedDto.DualCoinWallet = dualCoinProfile.DualCoinWallet;
                                 if (root.ServerContext.PoolSet.TryGetPool(dualCoinProfile.DualCoinPoolId, out IPool dualCoinPool)) {
                                 if (root.ServerContext.PoolSet.TryGetPool(dualCoinProfile.DualCoinPoolId, out IPool dualCoinPool)) {
-                                    data.DualCoinPool = dualCoinPool.Server;
+                                    speedDto.DualCoinPool = dualCoinPool.Server;
                                     if (root.IsMining) {
                                     if (root.IsMining) {
-                                        data.DualCoinPoolDelay = root.ServerContext.PoolSet.GetPoolDelayText(dualCoinPool.GetId(), isDual: true);
+                                        speedDto.DualCoinPoolDelay = root.ServerContext.PoolSet.GetPoolDelayText(dualCoinPool.GetId(), isDual: true);
                                     }
                                     }
                                     if (dualCoinPool.IsUserMode) {
                                     if (dualCoinPool.IsUserMode) {
                                         IPoolProfile dualCoinPoolProfile = workProfile.GetPoolProfile(dualCoinProfile.DualCoinPoolId);
                                         IPoolProfile dualCoinPoolProfile = workProfile.GetPoolProfile(dualCoinProfile.DualCoinPoolId);
-                                        data.DualCoinWallet = dualCoinPoolProfile.UserName;
+                                        speedDto.DualCoinWallet = dualCoinPoolProfile.UserName;
                                     }
                                     }
                                 }
                                 }
                                 else {
                                 else {
-                                    data.DualCoinPool = string.Empty;
+                                    speedDto.DualCoinPool = string.Empty;
                                 }
                                 }
                             }
                             }
                         }
                         }
@@ -190,11 +190,11 @@ namespace NTMiner.Report {
             if (root.IsMining) {
             if (root.IsMining) {
                 var mineContext = root.LockedMineContext;
                 var mineContext = root.LockedMineContext;
                 if (mineContext != null) {
                 if (mineContext != null) {
-                    data.KernelSelfRestartCount = mineContext.KernelSelfRestartCount;
+                    speedDto.KernelSelfRestartCount = mineContext.KernelSelfRestartCount;
                     if (mineContext.MineStartedOn != DateTime.MinValue) {
                     if (mineContext.MineStartedOn != DateTime.MinValue) {
-                        data.MineStartedOn = mineContext.MineStartedOn;
+                        speedDto.MineStartedOn = mineContext.MineStartedOn;
                     }
                     }
-                    data.KernelCommandLine = mineContext.CommandLine;
+                    speedDto.KernelCommandLine = mineContext.CommandLine;
                 }
                 }
                 // 判断上次报告的算力币种和本次报告的是否相同,否则说明刚刚切换了币种默认第一次报告0算力
                 // 判断上次报告的算力币种和本次报告的是否相同,否则说明刚刚切换了币种默认第一次报告0算力
                 if (_sLastSpeedMainCoin == null || _sLastSpeedMainCoin == root.LockedMineContext.MainCoin) {
                 if (_sLastSpeedMainCoin == null || _sLastSpeedMainCoin == root.LockedMineContext.MainCoin) {
@@ -202,11 +202,11 @@ namespace NTMiner.Report {
                     Guid coinId = root.LockedMineContext.MainCoin.GetId();
                     Guid coinId = root.LockedMineContext.MainCoin.GetId();
                     IGpusSpeed gpuSpeeds = root.GpusSpeed;
                     IGpusSpeed gpuSpeeds = root.GpusSpeed;
                     IGpuSpeed totalSpeed = gpuSpeeds.CurrentSpeed(NTMinerContext.GpuAllId);
                     IGpuSpeed totalSpeed = gpuSpeeds.CurrentSpeed(NTMinerContext.GpuAllId);
-                    data.MainCoinSpeed = totalSpeed.MainCoinSpeed.Value;
-                    data.MainCoinSpeedOn = totalSpeed.MainCoinSpeed.SpeedOn;
+                    speedDto.MainCoinSpeed = totalSpeed.MainCoinSpeed.Value;
+                    speedDto.MainCoinSpeedOn = totalSpeed.MainCoinSpeed.SpeedOn;
                     ICoinShare share = root.CoinShareSet.GetOrCreate(coinId);
                     ICoinShare share = root.CoinShareSet.GetOrCreate(coinId);
-                    data.MainCoinTotalShare = share.TotalShareCount;
-                    data.MainCoinRejectShare = share.RejectShareCount;
+                    speedDto.MainCoinTotalShare = share.TotalShareCount;
+                    speedDto.MainCoinRejectShare = share.RejectShareCount;
                 }
                 }
                 else {
                 else {
                     _sLastSpeedMainCoin = root.LockedMineContext.MainCoin;
                     _sLastSpeedMainCoin = root.LockedMineContext.MainCoin;
@@ -218,24 +218,24 @@ namespace NTMiner.Report {
                         Guid coinId = dualMineContext.DualCoin.GetId();
                         Guid coinId = dualMineContext.DualCoin.GetId();
                         IGpusSpeed gpuSpeeds = root.GpusSpeed;
                         IGpusSpeed gpuSpeeds = root.GpusSpeed;
                         IGpuSpeed totalSpeed = gpuSpeeds.CurrentSpeed(NTMinerContext.GpuAllId);
                         IGpuSpeed totalSpeed = gpuSpeeds.CurrentSpeed(NTMinerContext.GpuAllId);
-                        data.DualCoinSpeed = totalSpeed.DualCoinSpeed.Value;
-                        data.DualCoinSpeedOn = totalSpeed.DualCoinSpeed.SpeedOn;
+                        speedDto.DualCoinSpeed = totalSpeed.DualCoinSpeed.Value;
+                        speedDto.DualCoinSpeedOn = totalSpeed.DualCoinSpeed.SpeedOn;
                         ICoinShare share = root.CoinShareSet.GetOrCreate(coinId);
                         ICoinShare share = root.CoinShareSet.GetOrCreate(coinId);
-                        data.DualCoinTotalShare = share.TotalShareCount;
-                        data.DualCoinRejectShare = share.RejectShareCount;
+                        speedDto.DualCoinTotalShare = share.TotalShareCount;
+                        speedDto.DualCoinRejectShare = share.RejectShareCount;
                     }
                     }
                     else {
                     else {
                         _sLastSpeedDualCoin = dualMineContext.DualCoin;
                         _sLastSpeedDualCoin = dualMineContext.DualCoin;
                     }
                     }
                 }
                 }
             }
             }
-            return data;
+            return speedDto;
         }
         }
 
 
         private void ReportSpeed() {
         private void ReportSpeed() {
             try {
             try {
-                SpeedData data = CreateSpeedData();
-                RpcRoot.OfficialServer.ReportBinaryService.ReportSpeedAsync(data, (response, e) => {
+                SpeedDto speedDto = CreateSpeedDto();
+                RpcRoot.OfficialServer.ReportBinaryService.ReportSpeedAsync(speedDto, (response, e) => {
                     if (response.IsSuccess()) {
                     if (response.IsSuccess()) {
                         AppVersionChangedEvent.PublishIfNewVersion(response.ServerState.MinerClientVersion);
                         AppVersionChangedEvent.PublishIfNewVersion(response.ServerState.MinerClientVersion);
                         if (response.NewServerMessages.Count != 0) {
                         if (response.NewServerMessages.Count != 0) {

+ 176 - 176
src/NTMinerDataSchemas/Core/MinerServer/ClientData.cs

@@ -7,7 +7,7 @@ using System.Collections.Generic;
 using System.Reflection;
 using System.Reflection;
 
 
 namespace NTMiner.Core.MinerServer {
 namespace NTMiner.Core.MinerServer {
-    public class ClientData : SpeedData, IClientData {
+    public class ClientData : SpeedDto, IClientData {
         private static readonly Dictionary<string, PropertyInfo> _reflectionUpdateProperties = new Dictionary<string, PropertyInfo>();
         private static readonly Dictionary<string, PropertyInfo> _reflectionUpdateProperties = new Dictionary<string, PropertyInfo>();
 
 
         public static bool TryGetReflectionUpdateProperty(string propertyName, out PropertyInfo propertyInfo) {
         public static bool TryGetReflectionUpdateProperty(string propertyName, out PropertyInfo propertyInfo) {
@@ -245,7 +245,7 @@ namespace NTMiner.Core.MinerServer {
         /// 从给定的speedData中提取出主币矿池延时,辅币矿池延时,主币拒绝率,辅币拒绝率。
         /// 从给定的speedData中提取出主币矿池延时,辅币矿池延时,主币拒绝率,辅币拒绝率。
         /// </summary>
         /// </summary>
         private static void Extract(
         private static void Extract(
-            ISpeedData speedData, 
+            ISpeedDto speedDto, 
             out int mainCoinPoolDelayNumber, 
             out int mainCoinPoolDelayNumber, 
             out int dualCoinPoolDelayNumber, 
             out int dualCoinPoolDelayNumber, 
             out double mainCoinRejectPercent, 
             out double mainCoinRejectPercent, 
@@ -255,8 +255,8 @@ namespace NTMiner.Core.MinerServer {
             dualCoinPoolDelayNumber = 0;
             dualCoinPoolDelayNumber = 0;
             mainCoinRejectPercent = 0.0;
             mainCoinRejectPercent = 0.0;
             dualCoinRejectPercent = 0.0;
             dualCoinRejectPercent = 0.0;
-            if (!string.IsNullOrEmpty(speedData.MainCoinPoolDelay)) {
-                string text = speedData.MainCoinPoolDelay.Trim();
+            if (!string.IsNullOrEmpty(speedDto.MainCoinPoolDelay)) {
+                string text = speedDto.MainCoinPoolDelay.Trim();
                 int count = 0;
                 int count = 0;
                 for (int i = 0; i < text.Length; i++) {
                 for (int i = 0; i < text.Length; i++) {
                     if (!char.IsNumber(text[i])) {
                     if (!char.IsNumber(text[i])) {
@@ -268,8 +268,8 @@ namespace NTMiner.Core.MinerServer {
                     mainCoinPoolDelayNumber = int.Parse(text.Substring(0, count));
                     mainCoinPoolDelayNumber = int.Parse(text.Substring(0, count));
                 }
                 }
             }
             }
-            if (!string.IsNullOrEmpty(speedData.DualCoinPoolDelay)) {
-                string text = speedData.DualCoinPoolDelay.Trim();
+            if (!string.IsNullOrEmpty(speedDto.DualCoinPoolDelay)) {
+                string text = speedDto.DualCoinPoolDelay.Trim();
                 int count = 0;
                 int count = 0;
                 for (int i = 0; i < text.Length; i++) {
                 for (int i = 0; i < text.Length; i++) {
                     if (!char.IsNumber(text[i])) {
                     if (!char.IsNumber(text[i])) {
@@ -281,25 +281,25 @@ namespace NTMiner.Core.MinerServer {
                     dualCoinPoolDelayNumber = int.Parse(text.Substring(0, count));
                     dualCoinPoolDelayNumber = int.Parse(text.Substring(0, count));
                 }
                 }
             }
             }
-            if (speedData.MainCoinTotalShare != 0) {
-                mainCoinRejectPercent = (speedData.MainCoinRejectShare * 100.0) / speedData.MainCoinTotalShare;
+            if (speedDto.MainCoinTotalShare != 0) {
+                mainCoinRejectPercent = (speedDto.MainCoinRejectShare * 100.0) / speedDto.MainCoinTotalShare;
             }
             }
-            if (speedData.DualCoinTotalShare != 0) {
-                dualCoinRejectPercent = (speedData.DualCoinRejectShare * 100.0) / speedData.DualCoinTotalShare;
+            if (speedDto.DualCoinTotalShare != 0) {
+                dualCoinRejectPercent = (speedDto.DualCoinRejectShare * 100.0) / speedDto.DualCoinTotalShare;
             }
             }
         }
         }
 
 
-        public static ClientData Create(ISpeedData speedData, string minerIp) {
+        public static ClientData Create(ISpeedDto speedDto, string minerIp) {
             Extract(
             Extract(
-                speedData, 
+                speedDto, 
                 out int mainCoinPoolDelayNumber, 
                 out int mainCoinPoolDelayNumber, 
                 out int dualCoinPoolDelayNumber, 
                 out int dualCoinPoolDelayNumber, 
                 out double mainCoinRejectPercent, 
                 out double mainCoinRejectPercent, 
                 out double dualCoinRejectPercent);
                 out double dualCoinRejectPercent);
             return new ClientData() {
             return new ClientData() {
                 Id = ObjectId.NewObjectId().ToString(),
                 Id = ObjectId.NewObjectId().ToString(),
-                MineContextId = speedData.MineContextId,
-                MinerName = speedData.MinerName,
+                MineContextId = speedDto.MineContextId,
+                MinerName = speedDto.MinerName,
                 MinerIp = minerIp,
                 MinerIp = minerIp,
                 CreatedOn = DateTime.Now,
                 CreatedOn = DateTime.Now,
                 MinerActiveOn = DateTime.Now,
                 MinerActiveOn = DateTime.Now,
@@ -307,85 +307,85 @@ namespace NTMiner.Core.MinerServer {
                 WorkId = Guid.Empty,// 这是服务端指定的作业,不受客户端的影响
                 WorkId = Guid.Empty,// 这是服务端指定的作业,不受客户端的影响
                 WindowsLoginName = string.Empty,
                 WindowsLoginName = string.Empty,
                 WindowsPassword = string.Empty,
                 WindowsPassword = string.Empty,
-                MACAddress = speedData.MACAddress,
-                LocalIp = speedData.LocalIp,
-                ClientId = speedData.ClientId,
-                IsAutoBoot = speedData.IsAutoBoot,
-                IsAutoStart = speedData.IsAutoStart,
-                AutoStartDelaySeconds = speedData.AutoStartDelaySeconds,
-                IsAutoRestartKernel = speedData.IsAutoRestartKernel,
-                AutoRestartKernelTimes = speedData.AutoRestartKernelTimes,
-                IsNoShareRestartKernel = speedData.IsNoShareRestartKernel,
-                NoShareRestartKernelMinutes = speedData.NoShareRestartKernelMinutes,
-                IsNoShareRestartComputer = speedData.IsNoShareRestartComputer,
-                NoShareRestartComputerMinutes = speedData.NoShareRestartComputerMinutes,
-                IsPeriodicRestartKernel = speedData.IsPeriodicRestartKernel,
-                PeriodicRestartKernelHours = speedData.PeriodicRestartKernelHours,
-                IsPeriodicRestartComputer = speedData.IsPeriodicRestartComputer,
-                PeriodicRestartComputerHours = speedData.PeriodicRestartComputerHours,
-                PeriodicRestartComputerMinutes = speedData.PeriodicRestartComputerMinutes,
-                PeriodicRestartKernelMinutes = speedData.PeriodicRestartKernelMinutes,
-                IsAutoStopByCpu = speedData.IsAutoStopByCpu,
-                IsAutoStartByCpu = speedData.IsAutoStartByCpu,
-                CpuStopTemperature = speedData.CpuStopTemperature,
-                CpuStartTemperature = speedData.CpuStartTemperature,
-                CpuLETemperatureSeconds = speedData.CpuLETemperatureSeconds,
-                CpuGETemperatureSeconds = speedData.CpuGETemperatureSeconds,
-                CpuTemperature = speedData.CpuTemperature,
-                CpuPerformance = speedData.CpuPerformance,
-                IsRaiseHighCpuEvent = speedData.IsRaiseHighCpuEvent,
-                HighCpuPercent = speedData.HighCpuPercent,
-                HighCpuSeconds = speedData.HighCpuSeconds,
-                GpuDriver = speedData.GpuDriver,
-                GpuType = speedData.GpuType,
-                OSName = speedData.OSName,
-                OSVirtualMemoryMb = speedData.OSVirtualMemoryMb,
-                TotalPhysicalMemoryMb = speedData.TotalPhysicalMemoryMb,
-                GpuInfo = speedData.GpuInfo,
-                Version = speedData.Version,
-                IsMining = speedData.IsMining,
-                BootOn = speedData.BootOn,
-                MineStartedOn = speedData.MineStartedOn,
-                MainCoinCode = speedData.MainCoinCode,
-                MainCoinTotalShare = speedData.MainCoinTotalShare,
-                MainCoinRejectShare = speedData.MainCoinRejectShare,
-                MainCoinSpeed = speedData.MainCoinSpeed,
-                MainCoinPool = speedData.MainCoinPool,
-                MainCoinWallet = speedData.MainCoinWallet,
-                Kernel = speedData.Kernel,
-                IsDualCoinEnabled = speedData.IsDualCoinEnabled,
-                DualCoinPool = speedData.DualCoinPool,
-                DualCoinWallet = speedData.DualCoinWallet,
-                DualCoinCode = speedData.DualCoinCode,
-                DualCoinTotalShare = speedData.DualCoinTotalShare,
-                DualCoinRejectShare = speedData.DualCoinRejectShare,
-                DualCoinSpeed = speedData.DualCoinSpeed,
-                KernelCommandLine = speedData.KernelCommandLine,
-                MainCoinSpeedOn = speedData.MainCoinSpeedOn,
-                DualCoinSpeedOn = speedData.DualCoinSpeedOn,
-                GpuTable = speedData.GpuTable,
-                MineWorkId = speedData.MineWorkId,
-                MineWorkName = speedData.MineWorkName,
-                DiskSpace = speedData.DiskSpace,
-                MainCoinPoolDelay = speedData.MainCoinPoolDelay,
-                DualCoinPoolDelay = speedData.DualCoinPoolDelay,
-                IsFoundOneGpuShare = speedData.IsFoundOneGpuShare,
-                IsRejectOneGpuShare = speedData.IsRejectOneGpuShare,
-                IsGotOneIncorrectGpuShare = speedData.IsGotOneIncorrectGpuShare,
-                KernelSelfRestartCount = speedData.KernelSelfRestartCount - 1,// 需要减1
-                LocalServerMessageTimestamp = speedData.LocalServerMessageTimestamp,
+                MACAddress = speedDto.MACAddress,
+                LocalIp = speedDto.LocalIp,
+                ClientId = speedDto.ClientId,
+                IsAutoBoot = speedDto.IsAutoBoot,
+                IsAutoStart = speedDto.IsAutoStart,
+                AutoStartDelaySeconds = speedDto.AutoStartDelaySeconds,
+                IsAutoRestartKernel = speedDto.IsAutoRestartKernel,
+                AutoRestartKernelTimes = speedDto.AutoRestartKernelTimes,
+                IsNoShareRestartKernel = speedDto.IsNoShareRestartKernel,
+                NoShareRestartKernelMinutes = speedDto.NoShareRestartKernelMinutes,
+                IsNoShareRestartComputer = speedDto.IsNoShareRestartComputer,
+                NoShareRestartComputerMinutes = speedDto.NoShareRestartComputerMinutes,
+                IsPeriodicRestartKernel = speedDto.IsPeriodicRestartKernel,
+                PeriodicRestartKernelHours = speedDto.PeriodicRestartKernelHours,
+                IsPeriodicRestartComputer = speedDto.IsPeriodicRestartComputer,
+                PeriodicRestartComputerHours = speedDto.PeriodicRestartComputerHours,
+                PeriodicRestartComputerMinutes = speedDto.PeriodicRestartComputerMinutes,
+                PeriodicRestartKernelMinutes = speedDto.PeriodicRestartKernelMinutes,
+                IsAutoStopByCpu = speedDto.IsAutoStopByCpu,
+                IsAutoStartByCpu = speedDto.IsAutoStartByCpu,
+                CpuStopTemperature = speedDto.CpuStopTemperature,
+                CpuStartTemperature = speedDto.CpuStartTemperature,
+                CpuLETemperatureSeconds = speedDto.CpuLETemperatureSeconds,
+                CpuGETemperatureSeconds = speedDto.CpuGETemperatureSeconds,
+                CpuTemperature = speedDto.CpuTemperature,
+                CpuPerformance = speedDto.CpuPerformance,
+                IsRaiseHighCpuEvent = speedDto.IsRaiseHighCpuEvent,
+                HighCpuPercent = speedDto.HighCpuPercent,
+                HighCpuSeconds = speedDto.HighCpuSeconds,
+                GpuDriver = speedDto.GpuDriver,
+                GpuType = speedDto.GpuType,
+                OSName = speedDto.OSName,
+                OSVirtualMemoryMb = speedDto.OSVirtualMemoryMb,
+                TotalPhysicalMemoryMb = speedDto.TotalPhysicalMemoryMb,
+                GpuInfo = speedDto.GpuInfo,
+                Version = speedDto.Version,
+                IsMining = speedDto.IsMining,
+                BootOn = speedDto.BootOn,
+                MineStartedOn = speedDto.MineStartedOn,
+                MainCoinCode = speedDto.MainCoinCode,
+                MainCoinTotalShare = speedDto.MainCoinTotalShare,
+                MainCoinRejectShare = speedDto.MainCoinRejectShare,
+                MainCoinSpeed = speedDto.MainCoinSpeed,
+                MainCoinPool = speedDto.MainCoinPool,
+                MainCoinWallet = speedDto.MainCoinWallet,
+                Kernel = speedDto.Kernel,
+                IsDualCoinEnabled = speedDto.IsDualCoinEnabled,
+                DualCoinPool = speedDto.DualCoinPool,
+                DualCoinWallet = speedDto.DualCoinWallet,
+                DualCoinCode = speedDto.DualCoinCode,
+                DualCoinTotalShare = speedDto.DualCoinTotalShare,
+                DualCoinRejectShare = speedDto.DualCoinRejectShare,
+                DualCoinSpeed = speedDto.DualCoinSpeed,
+                KernelCommandLine = speedDto.KernelCommandLine,
+                MainCoinSpeedOn = speedDto.MainCoinSpeedOn,
+                DualCoinSpeedOn = speedDto.DualCoinSpeedOn,
+                GpuTable = speedDto.GpuTable,
+                MineWorkId = speedDto.MineWorkId,
+                MineWorkName = speedDto.MineWorkName,
+                DiskSpace = speedDto.DiskSpace,
+                MainCoinPoolDelay = speedDto.MainCoinPoolDelay,
+                DualCoinPoolDelay = speedDto.DualCoinPoolDelay,
+                IsFoundOneGpuShare = speedDto.IsFoundOneGpuShare,
+                IsRejectOneGpuShare = speedDto.IsRejectOneGpuShare,
+                IsGotOneIncorrectGpuShare = speedDto.IsGotOneIncorrectGpuShare,
+                KernelSelfRestartCount = speedDto.KernelSelfRestartCount - 1,// 需要减1
+                LocalServerMessageTimestamp = speedDto.LocalServerMessageTimestamp,
                 AESPassword = string.Empty,
                 AESPassword = string.Empty,
                 AESPasswordOn = DateTime.MinValue,
                 AESPasswordOn = DateTime.MinValue,
-                IsAutoDisableWindowsFirewall = speedData.IsAutoDisableWindowsFirewall,
-                IsDisableAntiSpyware = speedData.IsDisableAntiSpyware,
-                IsDisableUAC = speedData.IsDisableUAC,
-                IsDisableWAU = speedData.IsDisableWAU,
+                IsAutoDisableWindowsFirewall = speedDto.IsAutoDisableWindowsFirewall,
+                IsDisableAntiSpyware = speedDto.IsDisableAntiSpyware,
+                IsDisableUAC = speedDto.IsDisableUAC,
+                IsDisableWAU = speedDto.IsDisableWAU,
                 IsOnline = false,
                 IsOnline = false,
                 NetActiveOn = DateTime.MinValue,
                 NetActiveOn = DateTime.MinValue,
                 LoginName = string.Empty,
                 LoginName = string.Empty,
-                IsOuterUserEnabled = speedData.IsOuterUserEnabled,
+                IsOuterUserEnabled = speedDto.IsOuterUserEnabled,
                 OuterUserId = string.Empty,
                 OuterUserId = string.Empty,
-                ReportOuterUserId = speedData.ReportOuterUserId,
+                ReportOuterUserId = speedDto.ReportOuterUserId,
                 WorkerName = string.Empty,
                 WorkerName = string.Empty,
                 DualCoinPoolDelayNumber = dualCoinPoolDelayNumber,
                 DualCoinPoolDelayNumber = dualCoinPoolDelayNumber,
                 MainCoinPoolDelayNumber = mainCoinPoolDelayNumber,
                 MainCoinPoolDelayNumber = mainCoinPoolDelayNumber,
@@ -415,8 +415,8 @@ namespace NTMiner.Core.MinerServer {
             this.AESPasswordOn = minerSign.AESPasswordOn;
             this.AESPasswordOn = minerSign.AESPasswordOn;
         }
         }
 
 
-        public SpeedData ToSpeedData() {
-            return new SpeedData {
+        public SpeedDto ToSpeedData() {
+            return new SpeedDto {
                 AutoRestartKernelTimes = this.AutoRestartKernelTimes,
                 AutoRestartKernelTimes = this.AutoRestartKernelTimes,
                 AutoStartDelaySeconds = this.AutoStartDelaySeconds,
                 AutoStartDelaySeconds = this.AutoStartDelaySeconds,
                 BootOn = this.BootOn,
                 BootOn = this.BootOn,
@@ -500,11 +500,11 @@ namespace NTMiner.Core.MinerServer {
         /// 上报算力时。
         /// 上报算力时。
         /// 因为只有MinerData具有的成员发生了变化时才需要持久化所以该非法输出isMinerDataChanged参数以表示MinerData的成员是否发生了变化。
         /// 因为只有MinerData具有的成员发生了变化时才需要持久化所以该非法输出isMinerDataChanged参数以表示MinerData的成员是否发生了变化。
         /// </summary>
         /// </summary>
-        /// <param name="speedData"></param>
+        /// <param name="speedDto"></param>
         /// <param name="minerIp"></param>
         /// <param name="minerIp"></param>
         /// <param name="isMinerDataChanged"></param>
         /// <param name="isMinerDataChanged"></param>
-        public void Update(ISpeedData speedData, string minerIp, out bool isMinerDataChanged) {
-            Update(speedData, out isMinerDataChanged);
+        public void Update(ISpeedDto speedDto, string minerIp, out bool isMinerDataChanged) {
+            Update(speedDto, out isMinerDataChanged);
             if (!isMinerDataChanged && minerIp != this.MinerIp) {
             if (!isMinerDataChanged && minerIp != this.MinerIp) {
                 isMinerDataChanged = true;
                 isMinerDataChanged = true;
             }
             }
@@ -538,11 +538,11 @@ namespace NTMiner.Core.MinerServer {
         /// 上报算力时和拉取算力时。
         /// 上报算力时和拉取算力时。
         /// 因为只有MinerData具有的成员发生了变化时才需要持久化所以该非法输出isMinerDataChanged参数以表示MinerData的成员是否发生了变化。
         /// 因为只有MinerData具有的成员发生了变化时才需要持久化所以该非法输出isMinerDataChanged参数以表示MinerData的成员是否发生了变化。
         /// </summary>
         /// </summary>
-        /// <param name="speedData"></param>
+        /// <param name="speedDto"></param>
         /// <param name="isMinerDataChanged"></param>
         /// <param name="isMinerDataChanged"></param>
-        public void Update(ISpeedData speedData, out bool isMinerDataChanged) {
+        public void Update(ISpeedDto speedDto, out bool isMinerDataChanged) {
             isMinerDataChanged = false;
             isMinerDataChanged = false;
-            if (speedData == null) {
+            if (speedDto == null) {
                 return;
                 return;
             }
             }
             _preUpdateOn = DateTime.Now;
             _preUpdateOn = DateTime.Now;
@@ -566,99 +566,99 @@ namespace NTMiner.Core.MinerServer {
             _preDualCoin = this.DualCoinCode;
             _preDualCoin = this.DualCoinCode;
             #region MinerData
             #region MinerData
             if (!isMinerDataChanged) {
             if (!isMinerDataChanged) {
-                isMinerDataChanged = this.ClientId != speedData.ClientId;
+                isMinerDataChanged = this.ClientId != speedDto.ClientId;
             }
             }
-            this.ClientId = speedData.ClientId;
+            this.ClientId = speedDto.ClientId;
             if (!isMinerDataChanged) {
             if (!isMinerDataChanged) {
-                isMinerDataChanged = this.MACAddress != speedData.MACAddress;
+                isMinerDataChanged = this.MACAddress != speedDto.MACAddress;
             }
             }
-            this.MACAddress = speedData.MACAddress;
+            this.MACAddress = speedDto.MACAddress;
             if (!isMinerDataChanged) {
             if (!isMinerDataChanged) {
-                isMinerDataChanged = this.LocalIp != speedData.LocalIp;
+                isMinerDataChanged = this.LocalIp != speedDto.LocalIp;
             }
             }
-            this.LocalIp = speedData.LocalIp;
+            this.LocalIp = speedDto.LocalIp;
             if (!isMinerDataChanged) {
             if (!isMinerDataChanged) {
-                isMinerDataChanged = this.MinerName != speedData.MinerName;
+                isMinerDataChanged = this.MinerName != speedDto.MinerName;
             }
             }
-            this.MinerName = speedData.MinerName;
+            this.MinerName = speedDto.MinerName;
             if (!isMinerDataChanged) {
             if (!isMinerDataChanged) {
-                isMinerDataChanged = this.IsOuterUserEnabled != speedData.IsOuterUserEnabled;
+                isMinerDataChanged = this.IsOuterUserEnabled != speedDto.IsOuterUserEnabled;
             }
             }
-            this.IsOuterUserEnabled = speedData.IsOuterUserEnabled;
-            this.ReportOuterUserId = speedData.ReportOuterUserId;
+            this.IsOuterUserEnabled = speedDto.IsOuterUserEnabled;
+            this.ReportOuterUserId = speedDto.ReportOuterUserId;
             #endregion
             #endregion
-            this.MineContextId = speedData.MineContextId;
-            this.IsAutoBoot = speedData.IsAutoBoot;
-            this.IsAutoStart = speedData.IsAutoStart;
-            this.AutoStartDelaySeconds = speedData.AutoStartDelaySeconds;
-            this.IsAutoRestartKernel = speedData.IsAutoRestartKernel;
-            this.AutoRestartKernelTimes = speedData.AutoRestartKernelTimes;
-            this.IsNoShareRestartKernel = speedData.IsNoShareRestartKernel;
-            this.NoShareRestartKernelMinutes = speedData.NoShareRestartKernelMinutes;
-            this.IsNoShareRestartComputer = speedData.IsNoShareRestartComputer;
-            this.NoShareRestartComputerMinutes = speedData.NoShareRestartComputerMinutes;
-            this.IsPeriodicRestartKernel = speedData.IsPeriodicRestartKernel;
-            this.PeriodicRestartKernelHours = speedData.PeriodicRestartKernelHours;
-            this.IsPeriodicRestartComputer = speedData.IsPeriodicRestartComputer;
-            this.PeriodicRestartComputerHours = speedData.PeriodicRestartComputerHours;
-            this.PeriodicRestartComputerMinutes = speedData.PeriodicRestartComputerMinutes;
-            this.PeriodicRestartKernelMinutes = speedData.PeriodicRestartKernelMinutes;
-            this.IsAutoStopByCpu = speedData.IsAutoStopByCpu;
-            this.IsAutoStartByCpu = speedData.IsAutoStartByCpu;
-            this.CpuStopTemperature = speedData.CpuStopTemperature;
-            this.CpuStartTemperature = speedData.CpuStartTemperature;
-            this.CpuLETemperatureSeconds = speedData.CpuLETemperatureSeconds;
-            this.CpuGETemperatureSeconds = speedData.CpuGETemperatureSeconds;
-            this.CpuPerformance = speedData.CpuPerformance;
-            this.CpuTemperature = speedData.CpuTemperature;
-            this.IsRaiseHighCpuEvent = speedData.IsRaiseHighCpuEvent;
-            this.HighCpuPercent = speedData.HighCpuPercent;
-            this.HighCpuSeconds = speedData.HighCpuSeconds;
-            this.GpuDriver = speedData.GpuDriver;
-            this.GpuType = speedData.GpuType;
-            this.OSName = speedData.OSName;
-            this.OSVirtualMemoryMb = speedData.OSVirtualMemoryMb;
-            this.GpuInfo = speedData.GpuInfo;
-            this.Version = speedData.Version;
-            this.IsMining = speedData.IsMining;
-            this.BootOn = speedData.BootOn;
-            this.MineStartedOn = speedData.MineStartedOn;
-            this.DiskSpace = speedData.DiskSpace;
-            this.MainCoinCode = speedData.MainCoinCode;
-            this.MainCoinTotalShare = speedData.MainCoinTotalShare;
-            this.MainCoinRejectShare = speedData.MainCoinRejectShare;
-            this.MainCoinSpeed = speedData.MainCoinSpeed;
-            this.MainCoinPool = speedData.MainCoinPool;
-            this.MainCoinWallet = speedData.MainCoinWallet;
-            this.Kernel = speedData.Kernel;
-            this.IsDualCoinEnabled = speedData.IsDualCoinEnabled;
-            this.DualCoinPool = speedData.DualCoinPool;
-            this.DualCoinWallet = speedData.DualCoinWallet;
-            this.DualCoinCode = speedData.DualCoinCode;
-            this.DualCoinTotalShare = speedData.DualCoinTotalShare;
-            this.DualCoinRejectShare = speedData.DualCoinRejectShare;
-            this.DualCoinSpeed = speedData.DualCoinSpeed;
-            this.KernelCommandLine = speedData.KernelCommandLine;
-            this.MainCoinSpeedOn = speedData.MainCoinSpeedOn;
-            this.DualCoinSpeedOn = speedData.DualCoinSpeedOn;
-            this.GpuTable = speedData.GpuTable;
-            this.MainCoinPoolDelay = speedData.MainCoinPoolDelay;
-            this.DualCoinPoolDelay = speedData.DualCoinPoolDelay;
-            this.IsFoundOneGpuShare = speedData.IsFoundOneGpuShare;
-            this.IsRejectOneGpuShare = speedData.IsRejectOneGpuShare;
-            this.IsGotOneIncorrectGpuShare = speedData.IsGotOneIncorrectGpuShare;
-            this.MineWorkId = speedData.MineWorkId;
-            this.MineWorkName = speedData.MineWorkName;
-            this.KernelSelfRestartCount = speedData.KernelSelfRestartCount - 1;// 需要减1
-            this.LocalServerMessageTimestamp = speedData.LocalServerMessageTimestamp;
-            this.TotalPhysicalMemoryMb = speedData.TotalPhysicalMemoryMb;
+            this.MineContextId = speedDto.MineContextId;
+            this.IsAutoBoot = speedDto.IsAutoBoot;
+            this.IsAutoStart = speedDto.IsAutoStart;
+            this.AutoStartDelaySeconds = speedDto.AutoStartDelaySeconds;
+            this.IsAutoRestartKernel = speedDto.IsAutoRestartKernel;
+            this.AutoRestartKernelTimes = speedDto.AutoRestartKernelTimes;
+            this.IsNoShareRestartKernel = speedDto.IsNoShareRestartKernel;
+            this.NoShareRestartKernelMinutes = speedDto.NoShareRestartKernelMinutes;
+            this.IsNoShareRestartComputer = speedDto.IsNoShareRestartComputer;
+            this.NoShareRestartComputerMinutes = speedDto.NoShareRestartComputerMinutes;
+            this.IsPeriodicRestartKernel = speedDto.IsPeriodicRestartKernel;
+            this.PeriodicRestartKernelHours = speedDto.PeriodicRestartKernelHours;
+            this.IsPeriodicRestartComputer = speedDto.IsPeriodicRestartComputer;
+            this.PeriodicRestartComputerHours = speedDto.PeriodicRestartComputerHours;
+            this.PeriodicRestartComputerMinutes = speedDto.PeriodicRestartComputerMinutes;
+            this.PeriodicRestartKernelMinutes = speedDto.PeriodicRestartKernelMinutes;
+            this.IsAutoStopByCpu = speedDto.IsAutoStopByCpu;
+            this.IsAutoStartByCpu = speedDto.IsAutoStartByCpu;
+            this.CpuStopTemperature = speedDto.CpuStopTemperature;
+            this.CpuStartTemperature = speedDto.CpuStartTemperature;
+            this.CpuLETemperatureSeconds = speedDto.CpuLETemperatureSeconds;
+            this.CpuGETemperatureSeconds = speedDto.CpuGETemperatureSeconds;
+            this.CpuPerformance = speedDto.CpuPerformance;
+            this.CpuTemperature = speedDto.CpuTemperature;
+            this.IsRaiseHighCpuEvent = speedDto.IsRaiseHighCpuEvent;
+            this.HighCpuPercent = speedDto.HighCpuPercent;
+            this.HighCpuSeconds = speedDto.HighCpuSeconds;
+            this.GpuDriver = speedDto.GpuDriver;
+            this.GpuType = speedDto.GpuType;
+            this.OSName = speedDto.OSName;
+            this.OSVirtualMemoryMb = speedDto.OSVirtualMemoryMb;
+            this.GpuInfo = speedDto.GpuInfo;
+            this.Version = speedDto.Version;
+            this.IsMining = speedDto.IsMining;
+            this.BootOn = speedDto.BootOn;
+            this.MineStartedOn = speedDto.MineStartedOn;
+            this.DiskSpace = speedDto.DiskSpace;
+            this.MainCoinCode = speedDto.MainCoinCode;
+            this.MainCoinTotalShare = speedDto.MainCoinTotalShare;
+            this.MainCoinRejectShare = speedDto.MainCoinRejectShare;
+            this.MainCoinSpeed = speedDto.MainCoinSpeed;
+            this.MainCoinPool = speedDto.MainCoinPool;
+            this.MainCoinWallet = speedDto.MainCoinWallet;
+            this.Kernel = speedDto.Kernel;
+            this.IsDualCoinEnabled = speedDto.IsDualCoinEnabled;
+            this.DualCoinPool = speedDto.DualCoinPool;
+            this.DualCoinWallet = speedDto.DualCoinWallet;
+            this.DualCoinCode = speedDto.DualCoinCode;
+            this.DualCoinTotalShare = speedDto.DualCoinTotalShare;
+            this.DualCoinRejectShare = speedDto.DualCoinRejectShare;
+            this.DualCoinSpeed = speedDto.DualCoinSpeed;
+            this.KernelCommandLine = speedDto.KernelCommandLine;
+            this.MainCoinSpeedOn = speedDto.MainCoinSpeedOn;
+            this.DualCoinSpeedOn = speedDto.DualCoinSpeedOn;
+            this.GpuTable = speedDto.GpuTable;
+            this.MainCoinPoolDelay = speedDto.MainCoinPoolDelay;
+            this.DualCoinPoolDelay = speedDto.DualCoinPoolDelay;
+            this.IsFoundOneGpuShare = speedDto.IsFoundOneGpuShare;
+            this.IsRejectOneGpuShare = speedDto.IsRejectOneGpuShare;
+            this.IsGotOneIncorrectGpuShare = speedDto.IsGotOneIncorrectGpuShare;
+            this.MineWorkId = speedDto.MineWorkId;
+            this.MineWorkName = speedDto.MineWorkName;
+            this.KernelSelfRestartCount = speedDto.KernelSelfRestartCount - 1;// 需要减1
+            this.LocalServerMessageTimestamp = speedDto.LocalServerMessageTimestamp;
+            this.TotalPhysicalMemoryMb = speedDto.TotalPhysicalMemoryMb;
             this.MinerActiveOn = DateTime.Now;// 现在时间
             this.MinerActiveOn = DateTime.Now;// 现在时间
-            this.IsAutoDisableWindowsFirewall = speedData.IsAutoDisableWindowsFirewall;
-            this.IsDisableAntiSpyware = speedData.IsDisableAntiSpyware;
-            this.IsDisableUAC = speedData.IsDisableUAC;
-            this.IsDisableWAU = speedData.IsDisableWAU;
+            this.IsAutoDisableWindowsFirewall = speedDto.IsAutoDisableWindowsFirewall;
+            this.IsDisableAntiSpyware = speedDto.IsDisableAntiSpyware;
+            this.IsDisableUAC = speedDto.IsDisableUAC;
+            this.IsDisableWAU = speedDto.IsDisableWAU;
             Extract(
             Extract(
-                speedData, 
+                speedDto, 
                 out int mainCoinPoolDelayNumber, 
                 out int mainCoinPoolDelayNumber, 
                 out int dualCoinPoolDelayNumber, 
                 out int dualCoinPoolDelayNumber, 
                 out double mainCoinRejectPercent, 
                 out double mainCoinRejectPercent, 

+ 1 - 1
src/NTMinerDataSchemas/Core/MinerServer/IClientData.cs

@@ -2,7 +2,7 @@
 using System;
 using System;
 
 
 namespace NTMiner.Core.MinerServer {
 namespace NTMiner.Core.MinerServer {
-    public interface IClientData : IMinerData, ISpeedData {
+    public interface IClientData : IMinerData, ISpeedDto {
         /// <summary>
         /// <summary>
         /// 该属性只应被来自挖矿端的ReportSpeed和ReportState写,不应被别人写。
         /// 该属性只应被来自挖矿端的ReportSpeed和ReportState写,不应被别人写。
         /// </summary>
         /// </summary>

+ 2 - 2
src/NTMinerDataSchemas/NTMinerDataSchemas.csproj

@@ -158,7 +158,7 @@
     <Compile Include="Ws\WsMessage.cs" />
     <Compile Include="Ws\WsMessage.cs" />
     <Compile Include="Core\MinerClient\IGpuSpeedData.cs" />
     <Compile Include="Core\MinerClient\IGpuSpeedData.cs" />
     <Compile Include="Core\MinerClient\ILocalIp.cs" />
     <Compile Include="Core\MinerClient\ILocalIp.cs" />
-    <Compile Include="Report\ISpeedData.cs" />
+    <Compile Include="Report\ISpeedDto.cs" />
     <Compile Include="Core\MinerClient\LocalIpDto.cs" />
     <Compile Include="Core\MinerClient\LocalIpDto.cs" />
     <Compile Include="Core\MinerServer\IMinerData.cs" />
     <Compile Include="Core\MinerServer\IMinerData.cs" />
     <Compile Include="Core\MinerServer\INTMinerWallet.cs" />
     <Compile Include="Core\MinerServer\INTMinerWallet.cs" />
@@ -239,7 +239,7 @@
     <Compile Include="ResponseBase.cs" />
     <Compile Include="ResponseBase.cs" />
     <Compile Include="ResponseBaseExtension.cs" />
     <Compile Include="ResponseBaseExtension.cs" />
     <Compile Include="Core\MinerServer\SaveCalcConfigsRequest.cs" />
     <Compile Include="Core\MinerServer\SaveCalcConfigsRequest.cs" />
-    <Compile Include="Report\SpeedData.cs" />
+    <Compile Include="Report\SpeedDto.cs" />
     <Compile Include="Timestamp.cs" />
     <Compile Include="Timestamp.cs" />
     <Compile Include="Core\MinerServer\UpdateClientRequest.cs" />
     <Compile Include="Core\MinerServer\UpdateClientRequest.cs" />
     <Compile Include="Core\WalletData.cs" />
     <Compile Include="Core\WalletData.cs" />

+ 1 - 1
src/NTMinerDataSchemas/Report/ISpeedData.cs → src/NTMinerDataSchemas/Report/ISpeedDto.cs

@@ -3,7 +3,7 @@ using NTMiner.Core.MinerClient;
 using System;
 using System;
 
 
 namespace NTMiner.Report {
 namespace NTMiner.Report {
-    public interface ISpeedData : IMinerIp {
+    public interface ISpeedDto : IMinerIp {
         Guid MineContextId { get; }
         Guid MineContextId { get; }
         DateTime LocalServerMessageTimestamp { get; }
         DateTime LocalServerMessageTimestamp { get; }
         int AutoRestartKernelTimes { get; }
         int AutoRestartKernelTimes { get; }

+ 2 - 3
src/NTMinerDataSchemas/Report/SpeedData.cs → src/NTMinerDataSchemas/Report/SpeedDto.cs

@@ -5,13 +5,12 @@ using System;
 namespace NTMiner.Report {
 namespace NTMiner.Report {
     /// <summary>
     /// <summary>
     /// 向服务器上报算力时的算力类型
     /// 向服务器上报算力时的算力类型
-    /// TODO:考虑加个压缩逻辑,只上报变更的字段
     /// </summary>
     /// </summary>
-    public class SpeedData : ISpeedData {
+    public class SpeedDto : ISpeedDto {
         private string _dualCoinCode;
         private string _dualCoinCode;
         private int _totalPhysicalMemoryMb;
         private int _totalPhysicalMemoryMb;
 
 
-        public SpeedData() {
+        public SpeedDto() {
             GpuTable = new GpuSpeedData[0];
             GpuTable = new GpuSpeedData[0];
         }
         }
 
 

+ 2 - 2
src/NTMinerRpcClient/Services/Client/NTMinerClientService.cs

@@ -49,11 +49,11 @@ namespace NTMiner.Services.Client {
             }, timeountMilliseconds: 2000);
             }, timeountMilliseconds: 2000);
         }
         }
 
 
-        public void GetSpeedAsync(IMinerData client, Action<SpeedData, Exception> callback) {
+        public void GetSpeedAsync(IMinerData client, Action<SpeedDto, Exception> callback) {
             JsonRpcRoot.GetAsync(client.GetLocalIp(), NTKeyword.MinerClientPort, _controllerName, nameof(IMinerClientController.GetSpeed), null, callback, timeountMilliseconds: 3000);
             JsonRpcRoot.GetAsync(client.GetLocalIp(), NTKeyword.MinerClientPort, _controllerName, nameof(IMinerClientController.GetSpeed), null, callback, timeountMilliseconds: 3000);
         }
         }
 
 
-        public void WsGetSpeedAsync(Action<SpeedData, Exception> callback) {
+        public void WsGetSpeedAsync(Action<SpeedDto, Exception> callback) {
             JsonRpcRoot.GetAsync(NTKeyword.Localhost, NTKeyword.MinerClientPort, _controllerName, nameof(IMinerClientController.WsGetSpeed), null, callback, timeountMilliseconds: 3000);
             JsonRpcRoot.GetAsync(NTKeyword.Localhost, NTKeyword.MinerClientPort, _controllerName, nameof(IMinerClientController.WsGetSpeed), null, callback, timeountMilliseconds: 3000);
         }
         }
 
 

+ 2 - 2
src/NTMinerRpcClient/Services/Official/ReportBinaryService.cs

@@ -9,8 +9,8 @@ namespace NTMiner.Services.Official {
         public ReportBinaryService() {
         public ReportBinaryService() {
         }
         }
 
 
-        public void ReportSpeedAsync(SpeedData data, Action<ReportResponse, Exception> callback) {
-            BinaryRequestJsonResponseRpcRoot.PostAsync(RpcRoot.OfficialServerHost, RpcRoot.OfficialServerPort, _controllerName, nameof(IReportBinaryController.ReportSpeed), query: null, data, callback, timeountMilliseconds: 5000);
+        public void ReportSpeedAsync(SpeedDto speedDto, Action<ReportResponse, Exception> callback) {
+            BinaryRequestJsonResponseRpcRoot.PostAsync(RpcRoot.OfficialServerHost, RpcRoot.OfficialServerPort, _controllerName, nameof(IReportBinaryController.ReportSpeed), query: null, speedDto, callback, timeountMilliseconds: 5000);
         }
         }
     }
     }
 }
 }

+ 2 - 2
src/NTMinerRpcClient/Services/Official/ReportService.cs

@@ -9,8 +9,8 @@ namespace NTMiner.Services.Official {
         public ReportService() {
         public ReportService() {
         }
         }
 
 
-        public void ReportSpeedAsync(SpeedData data, Action<ReportResponse, Exception> callback) {
-            JsonRpcRoot.PostAsync(RpcRoot.OfficialServerHost, RpcRoot.OfficialServerPort, _controllerName, nameof(IReportController.ReportSpeed), data, callback, timeountMilliseconds: 5000);
+        public void ReportSpeedAsync(SpeedDto speedDto, Action<ReportResponse, Exception> callback) {
+            JsonRpcRoot.PostAsync(RpcRoot.OfficialServerHost, RpcRoot.OfficialServerPort, _controllerName, nameof(IReportController.ReportSpeed), speedDto, callback, timeountMilliseconds: 5000);
         }
         }
 
 
         public void ReportStateAsync(Guid clientId, bool isMining) {
         public void ReportStateAsync(Guid clientId, bool isMining) {

+ 3 - 3
src/NTMinerServer/Core/Redis/ISpeedDataRedis.cs

@@ -5,9 +5,9 @@ using System.Threading.Tasks;
 
 
 namespace NTMiner.Core.Redis {
 namespace NTMiner.Core.Redis {
     public interface ISpeedDataRedis {
     public interface ISpeedDataRedis {
-        Task<List<SpeedData>> GetAllAsync();
-        Task<SpeedData> GetByClientIdAsync(Guid clientId);
-        Task SetAsync(SpeedData data);
+        Task<List<SpeedDto>> GetAllAsync();
+        Task<SpeedDto> GetByClientIdAsync(Guid clientId);
+        Task SetAsync(SpeedDto speedDto);
         Task DeleteByClientIdAsync(Guid clientId);
         Task DeleteByClientIdAsync(Guid clientId);
     }
     }
 }
 }

+ 9 - 9
src/NTMinerServer/Core/Redis/Impl/SpeedDataRedis.cs

@@ -13,13 +13,13 @@ namespace NTMiner.Core.Redis.Impl {
             _connection = connection;
             _connection = connection;
         }
         }
 
 
-        public Task<List<SpeedData>> GetAllAsync() {
+        public Task<List<SpeedDto>> GetAllAsync() {
             var db = _connection.GetDatabase();
             var db = _connection.GetDatabase();
             return db.HashGetAllAsync(_redisKeySpeedDataByClientId).ContinueWith(t => {
             return db.HashGetAllAsync(_redisKeySpeedDataByClientId).ContinueWith(t => {
-                List<SpeedData> list = new List<SpeedData>();
+                List<SpeedDto> list = new List<SpeedDto>();
                 foreach (var item in t.Result) {
                 foreach (var item in t.Result) {
                     if (item.Value.HasValue) {
                     if (item.Value.HasValue) {
-                        SpeedData data = VirtualRoot.JsonSerializer.Deserialize<SpeedData>(item.Value);
+                        SpeedDto data = VirtualRoot.JsonSerializer.Deserialize<SpeedDto>(item.Value);
                         if (data != null) {
                         if (data != null) {
                             list.Add(data);
                             list.Add(data);
                         }
                         }
@@ -29,14 +29,14 @@ namespace NTMiner.Core.Redis.Impl {
             });
             });
         }
         }
 
 
-        public Task<SpeedData> GetByClientIdAsync(Guid clientId) {
+        public Task<SpeedDto> GetByClientIdAsync(Guid clientId) {
             if (clientId == Guid.Empty) {
             if (clientId == Guid.Empty) {
-                return Task.FromResult<SpeedData>(null);
+                return Task.FromResult<SpeedDto>(null);
             }
             }
             var db = _connection.GetDatabase();
             var db = _connection.GetDatabase();
             return db.HashGetAsync(_redisKeySpeedDataByClientId, clientId.ToString()).ContinueWith(t => {
             return db.HashGetAsync(_redisKeySpeedDataByClientId, clientId.ToString()).ContinueWith(t => {
                 if (t.Result.HasValue) {
                 if (t.Result.HasValue) {
-                    return VirtualRoot.JsonSerializer.Deserialize<SpeedData>(t.Result);
+                    return VirtualRoot.JsonSerializer.Deserialize<SpeedDto>(t.Result);
                 }
                 }
                 else {
                 else {
                     return null;
                     return null;
@@ -44,12 +44,12 @@ namespace NTMiner.Core.Redis.Impl {
             });
             });
         }
         }
 
 
-        public Task SetAsync(SpeedData data) {
-            if (data == null || data.ClientId == Guid.Empty) {
+        public Task SetAsync(SpeedDto speedDto) {
+            if (speedDto == null || speedDto.ClientId == Guid.Empty) {
                 return TaskEx.CompletedTask;
                 return TaskEx.CompletedTask;
             }
             }
             var db = _connection.GetDatabase();
             var db = _connection.GetDatabase();
-            return db.HashSetAsync(_redisKeySpeedDataByClientId, data.ClientId.ToString(), VirtualRoot.JsonSerializer.Serialize(data));
+            return db.HashSetAsync(_redisKeySpeedDataByClientId, speedDto.ClientId.ToString(), VirtualRoot.JsonSerializer.Serialize(speedDto));
         }
         }
 
 
         public Task DeleteByClientIdAsync(Guid clientId) {
         public Task DeleteByClientIdAsync(Guid clientId) {

+ 6 - 6
src/UnitTests/WsMessageTests.cs

@@ -10,20 +10,20 @@ namespace NTMiner {
     public class WsMessageTests {
     public class WsMessageTests {
         [TestMethod]
         [TestMethod]
         public void Test1() {
         public void Test1() {
-            SpeedData speedData1 = VirtualRoot.JsonSerializer.Deserialize<SpeedData>(File.ReadAllText(Path.Combine(TestUtil.DataDirFullName, "speedData.json")));
+            SpeedDto speedDto1 = VirtualRoot.JsonSerializer.Deserialize<SpeedDto>(File.ReadAllText(Path.Combine(TestUtil.DataDirFullName, "speedData.json")));
             WsMessage message = new WsMessage(Guid.NewGuid(), WsMessage.Speed) {
             WsMessage message = new WsMessage(Guid.NewGuid(), WsMessage.Speed) {
-                Data = speedData1
+                Data = speedDto1
             };
             };
             byte[] data = Encoding.UTF8.GetBytes(VirtualRoot.JsonSerializer.Serialize(message));
             byte[] data = Encoding.UTF8.GetBytes(VirtualRoot.JsonSerializer.Serialize(message));
             double dataSize = data.Length / 1024.0;
             double dataSize = data.Length / 1024.0;
             Console.WriteLine($"原始大小 {dataSize.ToString()} kb");
             Console.WriteLine($"原始大小 {dataSize.ToString()} kb");
             data = message.SignToBytes(HashUtil.Sha1("password1"));
             data = message.SignToBytes(HashUtil.Sha1("password1"));
-            dataSize = data.Length / 1024.0;
+            double dataNewSize = data.Length / 1024.0;
             Assert.IsTrue(VirtualRoot.BinarySerializer.IsGZipped(data));
             Assert.IsTrue(VirtualRoot.BinarySerializer.IsGZipped(data));
-            Console.WriteLine($"序列化后大小 {dataSize.ToString()} kb");
+            Console.WriteLine($"序列化后大小 {dataNewSize.ToString()} kb,是原来大小的 {(dataNewSize * 100 / dataSize).ToString()} %");
             message = VirtualRoot.BinarySerializer.Deserialize<WsMessage>(data);
             message = VirtualRoot.BinarySerializer.Deserialize<WsMessage>(data);
-            Assert.IsTrue(message.TryGetData(out SpeedData speedData2));
-            Assert.AreEqual(speedData1.ClientId, speedData2.ClientId);
+            Assert.IsTrue(message.TryGetData(out SpeedDto speedDto2));
+            Assert.AreEqual(speedDto1.ClientId, speedDto2.ClientId);
         }
         }
     }
     }
 }
 }

+ 2 - 2
src/WebApiServer/Controllers/ReportBinaryController.cs

@@ -6,8 +6,8 @@ namespace NTMiner.Controllers {
         [HttpPost]
         [HttpPost]
         public ReportResponse ReportSpeed() {
         public ReportResponse ReportSpeed() {
             byte[] bytes = Request.Content.ReadAsByteArrayAsync().Result;
             byte[] bytes = Request.Content.ReadAsByteArrayAsync().Result;
-            SpeedData speedData = VirtualRoot.BinarySerializer.Deserialize<SpeedData>(bytes);
-            return ReportController.DoReportSpeed(speedData, MinerIp);
+            SpeedDto speedDto = VirtualRoot.BinarySerializer.Deserialize<SpeedDto>(bytes);
+            return ReportController.DoReportSpeed(speedDto, MinerIp);
         }
         }
     }
     }
 }
 }

+ 8 - 8
src/WebApiServer/Controllers/ReportController.cs

@@ -5,17 +5,17 @@ using System.Web.Http;
 namespace NTMiner.Controllers {
 namespace NTMiner.Controllers {
     // 注意该控制器不能重命名
     // 注意该控制器不能重命名
     public class ReportController : ApiControllerBase, IReportController {
     public class ReportController : ApiControllerBase, IReportController {
-        public static ReportResponse DoReportSpeed(SpeedData speedData, string minerIp) {
+        public static ReportResponse DoReportSpeed(SpeedDto speedDto, string minerIp) {
             try {
             try {
-                if (speedData == null) {
+                if (speedDto == null) {
                     return ResponseBase.InvalidInput<ReportResponse>();
                     return ResponseBase.InvalidInput<ReportResponse>();
                 }
                 }
-                WebApiRoot.ClientDataSet.ReportSpeed(speedData, minerIp, isFromWsServerNode: false);
-                if (Version.TryParse(speedData.Version, out Version version)) {
+                WebApiRoot.ClientDataSet.ReportSpeed(speedDto, minerIp, isFromWsServerNode: false);
+                if (Version.TryParse(speedDto.Version, out Version version)) {
                     string jsonVersionKey = HomePath.GetServerJsonVersion(version);
                     string jsonVersionKey = HomePath.GetServerJsonVersion(version);
                     var response = ReportResponse.Ok(WebApiRoot.GetServerStateResponse(jsonVersionKey));
                     var response = ReportResponse.Ok(WebApiRoot.GetServerStateResponse(jsonVersionKey));
-                    if (speedData.LocalServerMessageTimestamp.AddSeconds(1) < WebApiRoot.ServerMessageTimestamp) {
-                        var list = WebApiRoot.ServerMessageSet.GetServerMessages(speedData.LocalServerMessageTimestamp);
+                    if (speedDto.LocalServerMessageTimestamp.AddSeconds(1) < WebApiRoot.ServerMessageTimestamp) {
+                        var list = WebApiRoot.ServerMessageSet.GetServerMessages(speedDto.LocalServerMessageTimestamp);
                         // 如果服务器新消息少于10条直接在上报算力时的响应消息中携带上,如果较多就算了推迟到用户切换到消息界面查看时再获取
                         // 如果服务器新消息少于10条直接在上报算力时的响应消息中携带上,如果较多就算了推迟到用户切换到消息界面查看时再获取
                         if (list.Count < 10) {
                         if (list.Count < 10) {
                             response.NewServerMessages.AddRange(list);
                             response.NewServerMessages.AddRange(list);
@@ -31,8 +31,8 @@ namespace NTMiner.Controllers {
         }
         }
 
 
         [HttpPost]
         [HttpPost]
-        public ReportResponse ReportSpeed([FromBody]SpeedData speedData) {
-            return DoReportSpeed(speedData, MinerIp);
+        public ReportResponse ReportSpeed([FromBody]SpeedDto speedDto) {
+            return DoReportSpeed(speedDto, MinerIp);
         }
         }
 
 
         [HttpPost]
         [HttpPost]

+ 1 - 1
src/WebApiServer/Core/IClientDataSet.cs

@@ -6,7 +6,7 @@ namespace NTMiner.Core {
         /// 该集合的成员是异步从redis中加载数据初始化的,所以有了这个IsReadied属性。
         /// 该集合的成员是异步从redis中加载数据初始化的,所以有了这个IsReadied属性。
         /// </summary>
         /// </summary>
         bool IsReadied { get; }
         bool IsReadied { get; }
-        void ReportSpeed(SpeedData speedData, string clientIp, bool isFromWsServerNode);
+        void ReportSpeed(SpeedDto speedDto, string clientIp, bool isFromWsServerNode);
         void ReportState(ReportState state, string clientIp, bool isFromWsServerNode);
         void ReportState(ReportState state, string clientIp, bool isFromWsServerNode);
     }
     }
 }
 }

+ 6 - 6
src/WebApiServer/Core/Impl/ClientDataSet.cs

@@ -114,26 +114,26 @@ namespace NTMiner.Core.Impl {
             return false;
             return false;
         }
         }
 
 
-        public void ReportSpeed(SpeedData speedData, string minerIp, bool isFromWsServerNode) {
+        public void ReportSpeed(SpeedDto speedDto, string minerIp, bool isFromWsServerNode) {
             if (!IsReadied) {
             if (!IsReadied) {
                 return;
                 return;
             }
             }
-            if (speedData == null || speedData.ClientId == Guid.Empty) {
+            if (speedDto == null || speedDto.ClientId == Guid.Empty) {
                 return;
                 return;
             }
             }
             if (string.IsNullOrEmpty(minerIp)) {
             if (string.IsNullOrEmpty(minerIp)) {
                 return;
                 return;
             }
             }
             if (!isFromWsServerNode) {
             if (!isFromWsServerNode) {
-                _speedDataRedis.SetAsync(speedData);
+                _speedDataRedis.SetAsync(speedDto);
             }
             }
-            ClientData clientData = GetByClientId(speedData.ClientId);
+            ClientData clientData = GetByClientId(speedDto.ClientId);
             if (clientData == null) {
             if (clientData == null) {
-                clientData = ClientData.Create(speedData, minerIp);
+                clientData = ClientData.Create(speedDto, minerIp);
                 Add(clientData);
                 Add(clientData);
             }
             }
             else {
             else {
-                clientData.Update(speedData, minerIp, out bool isMinerDataChanged);
+                clientData.Update(speedDto, minerIp, out bool isMinerDataChanged);
                 if (isMinerDataChanged) {
                 if (isMinerDataChanged) {
                     DoUpdateSave(MinerData.Create(clientData));
                     DoUpdateSave(MinerData.Create(clientData));
                 }
                 }

+ 3 - 3
src/WsServer/MinerClientWsMessageHandler.cs

@@ -52,9 +52,9 @@ namespace NTMiner {
             },
             },
             {WsMessage.Speed,
             {WsMessage.Speed,
                 (wsBehavior, loginName, clientId, message) => {
                 (wsBehavior, loginName, clientId, message) => {
-                    if (message.TryGetData(out SpeedData speedData)) {
-                        WsRoot.SpeedDataRedis.SetAsync(speedData).ContinueWith(t => {
-                            WsRoot.MinerClientMqSender.SendSpeed(loginName, speedData.ClientId, wsBehavior.Context.UserEndPoint.ToString());
+                    if (message.TryGetData(out SpeedDto speedDto)) {
+                        WsRoot.SpeedDataRedis.SetAsync(speedDto).ContinueWith(t => {
+                            WsRoot.MinerClientMqSender.SendSpeed(loginName, speedDto.ClientId, wsBehavior.Context.UserEndPoint.ToString());
                         });
                         });
                     }
                     }
                 }
                 }