void ContinueStart(BlockSyncInfo blockSyncInfo) { InitWalletSataus(); var accountResult = AccountsService.Default.GetDefaultAccount(); if (!accountResult.IsFail) { DefaultAccount = accountResult.Value; } Registers(); if (InitializedInvoke != null) { InitializedInvoke.Invoke(new InitMsgEvent(true)); } if (blockSyncInfo.BlockLeft > 0 && blockSyncInfo.Progress < 100) { Messenger.Default.Send(Pages.SynchroDataPage, MessageTopic.UpdatePopupView); Messenger.Default.Send(true, MessageTopic.ChangedPopupViewState); } TxSettingMonitor.Default.Start(1000); TradeRecodesMonitor.Default.Start(10000); PayAddressBookMonitor.Default.Start(3000); ReceiveAddressBookMonitor.Default.Start(3000); }
void OnNetWorkClick(bool isactive) { NetWorkService.Default.SetNetworkActive(!isactive); NetToolTip = null; if (!isactive) { BlockSyncInfo blockSyncInfo = new BlockSyncInfo(); blockSyncInfo.AllBlockHeight = BlockSyncInfo.AllBlockHeight; blockSyncInfo.StartTimeOffset = DateTimeUtil.GetDateTimeStamp(DateTime.Now); BlockSyncInfo = blockSyncInfo; } }
void OnNetWorkClick(bool isactive) { NetWorkService.Default.SetNetworkActive(!isactive); NetToolTip = null; if (!isactive) { BlockSyncInfo blockSyncInfo = new BlockSyncInfo(); blockSyncInfo.IsStartSync = false; blockSyncInfo.Progress = 0; blockSyncInfo.TimeLeft = 0; BlockSyncInfo = blockSyncInfo; } }
void UpdateBlocksCallBack(BlockSyncInfo blockSyncInfo) { Application.Current.Dispatcher.Invoke(() => { if (blockSyncInfo.IsSyncStart()) { UpdateBlocksMonitor.Default.MonitorCallBack -= UpdateBlocksCallBack; ContinueStart(blockSyncInfo); return; } if (blockSyncCount >= 20 && InitializedInvoke != null && blockSyncInfo.ConnectCount < 2) { InitializedInvoke.Invoke(new InitMsgEvent(false, LanguageService.Default.GetLanguageValue("Error_NoNet"))); } blockSyncCount++; }); }
void SetTaskInfos() { UpdateBlocksMonitor.Default.MonitorCallBack += x => { Application.Current.Dispatcher.Invoke(() => { if (x.IsSyncComplete()) { Messenger.Default.Send(Pages.SynchroDataPage, MessageTopic.ClosePopUpWindow); UpdateBlocksMonitor.Default.Stop(); IsSyncComplete = true; AmountMonitor.Default.Start(3000); } else { IsSyncComplete = false; } BlockSyncInfo = x; var formatter = LanguageService.Default.GetLanguageValue("netTooltipFormat"); var msg = string.Format(formatter, x.ConnectCount, Environment.NewLine); NetToolTip = msg; }); }; }
void OnGetRequest(BlockSyncInfo info) { BlockSyncInfo = info; }
public Result <BlockSyncInfo> GetBlockChainInfoSync(BlockSyncInfo block) { Result <BlockSyncInfo> result = new Result <BlockSyncInfo>(); ApiResponse response = NetworkApi.GetBlockChainInfo().Result; result.IsFail = response.HasError; result.Value = block; result.ApiResponse = response; if (!response.HasError) { BlockChainInfo info = response.GetResult <BlockChainInfo>(); if (!info.IsRunning) { return(result); } block.ConnectCount = info.Connections; //当前区块高度+缓存的区块高度 var localBlockHeight = info.LocalLastBlockHeight; //剩余的区块高度 block.BlockLeft = info.RemoteLatestBlockHeight - localBlockHeight; if (block.BlockLeft < 0) { block.BlockLeft = 0; } if (localBlockHeight < 0 || info.RemoteLatestBlockHeight < 0 || info.Connections < 2) { return(result); } if (!block.IsStartSync && block.BlockLeft > 0) { block.IsStartSync = true; block.beforeLocalLastBlockHeight = localBlockHeight; block.StartTimeOffset = DateTimeUtil.GetDateTimeStamp(DateTime.Now); } //BehindTime if (info.LocalLastBlockTime > 0 && info.LocalLastBlockHeight < info.RemoteLatestBlockHeight) { var content = GetTimeBehindContent(info.LocalLastBlockTime); if (!string.IsNullOrEmpty(content)) { block.BehindTime = content; } } else { block.BehindTime = ""; } //已经更新的区块高度 var syncedHeight = localBlockHeight - block.beforeLocalLastBlockHeight; //更新区块花了多长时间 var syncedTime = DateTimeUtil.GetDateTimeStamp(DateTime.Now) - block.StartTimeOffset; //当前更新进度 if ((info.RemoteLatestBlockHeight - block.beforeLocalLastBlockHeight) != 0) { var progress = (Convert.ToDouble(syncedHeight) / (info.RemoteLatestBlockHeight - block.beforeLocalLastBlockHeight)) * 100; block.Progress = progress; } //剩余更新时间 if (syncedHeight > 0) { block.TimeLeft = (syncedTime / syncedHeight) * block.BlockLeft; } } return(result); }
public Result <BlockSyncInfo> GetBlockChainInfoSync(BlockSyncInfo block) { Result <BlockSyncInfo> result = new Result <BlockSyncInfo>(); ApiResponse response = NetworkApi.GetBlockChainInfo().Result; result.IsFail = false; result.Value = block; result.ApiResponse = response; if (!response.HasError) { BlockChainInfo info = response.GetResult <BlockChainInfo>(); if (!info.IsRunning) { return(result);; } block.ConnectCount = info.Connections; if (block.AllBlockHeight < 0) { //远程没同步的时候 block.Progress = 100; block.AllBlockHeight = 0; block.beforeLocalLastBlockHeight = info.LocalLastBlockHeight; } if (block.AllBlockHeight == 0) { //第一次获取数据,远程区块高度 block.AllBlockHeight = info.RemoteLatestBlockHeight; //本地更新之前区块的高度 block.beforeLocalLastBlockHeight = info.LocalLastBlockHeight; //刚开始时剩余区块高度 block.BlockLeft = block.AllBlockHeight - block.beforeLocalLastBlockHeight; if (block.AllBlockHeight < 0 || block.BlockLeft < 0) { block.Progress = 100; } else { //本次更新开始时间 block.StartTimeOffset = DateTimeUtil.GetDateTimeStamp(DateTime.Now); block.needUpdateBlocksHeight = block.BlockLeft; if (block.AllBlockHeight == info.LocalLastBlockHeight) { block.Progress = 100; } else { block.Progress = 0; } } } else { if (info.TimeOffset == -1) { return(result); } //不是第一次,开始组织数据 block.BlockLeft = block.AllBlockHeight - info.LocalLastBlockHeight - info.TempBlockCount; var doubleValue = Convert.ToDouble(info.LocalLastBlockHeight + info.TempBlockCount - block.beforeLocalLastBlockHeight); if (block.AllBlockHeight <= info.LocalLastBlockHeight) { if (info.TempBlockCount > 5) { block.Progress = 99; } block.Progress = 100; block.TimeLeft = 0; } else { block.Progress = (doubleValue / block.needUpdateBlocksHeight) * 100; } //剩余时间 = 当前更新时间 / 进度 if (block.Progress > 0 && block.Progress < 100) { block.TimeLeft = Convert.ToInt64((DateTimeUtil.GetDateTimeStamp(DateTime.Now) - block.StartTimeOffset) / block.Progress) * 100; } if (block.BlockLeft < 0) { block.BlockLeft = 0; } } } return(result); }