Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 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;
     }
 }
Ejemplo n.º 3
0
 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;
     }
 }
Ejemplo n.º 4
0
 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++;
     });
 }
Ejemplo n.º 5
0
        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;
                });
            };
        }
Ejemplo n.º 6
0
 void OnGetRequest(BlockSyncInfo info)
 {
     BlockSyncInfo = info;
 }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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);
        }