Ejemplo n.º 1
0
 /// <summary>
 /// Initialize the public static object of the interface for share the object with every class.
 /// </summary>
 /// <param name="wallet"></param>
 public static void InitializeMainInterface(WalletXiropht wallet)
 {
     WalletXiropht = wallet;
     WalletXiropht.SwitchForm(ClassFormPhaseEnumeration.Main);
 }
        /// <summary>
        ///     Start update block sync.
        /// </summary>
        public void StartUpdateBlockSync(WalletXiropht walletXiropht)
        {
            if (!ClassBlockCache.OnLoad)
            {
                try
                {
                    if (!walletXiropht.ClassWalletObject.InSyncBlock || ClassBlockCache.ListBlock.Count >= walletXiropht.ClassWalletObject.TotalBlockInSync)
                    {
                        if (this.IsShowed)
                        {
                            this.HideWaitingSyncBlockPanel();

                            var minShow = (walletXiropht.CurrentBlockExplorerPage - 1) * walletXiropht.MaxBlockPerPage;
                            var maxShow = walletXiropht.CurrentBlockExplorerPage * walletXiropht.MaxBlockPerPage;

                            for (var i = minShow; i < maxShow; i++)
                            {
                                if (i < ClassBlockCache.ListBlockIndex.Count)
                                {
                                    var blockTarget = ClassBlockCache.ListBlock.Count - 1 - i;

                                    if (ClassBlockCache.ListBlockIndex.ContainsKey(blockTarget))
                                    {
                                        if (ClassBlockCache.ListBlock.ContainsKey(ClassBlockCache.ListBlockIndex[blockTarget]))
                                        {
                                            var blockObject = ClassBlockCache.ListBlock[ClassBlockCache.ListBlockIndex[blockTarget]];
                                            var blockId     = int.Parse(blockObject.BlockHeight);
                                            if (!walletXiropht.ListBlockHashShowed.ContainsKey(blockId))
                                            {
                                                walletXiropht.ListBlockHashShowed.Add(blockId, blockObject.BlockHash);

                                                var dateTimeCreate = new DateTime(1970, 1, 1, 0, 0, 0, 0);
                                                dateTimeCreate =
                                                    dateTimeCreate.AddSeconds(
                                                        int.Parse(blockObject.BlockTimestampCreate));
                                                dateTimeCreate = dateTimeCreate.ToLocalTime();
                                                var dateTimeFound = new DateTime(1970, 1, 1, 0, 0, 0, 0);
                                                dateTimeFound =
                                                    dateTimeFound.AddSeconds(
                                                        int.Parse(blockObject.BlockTimestampFound));
                                                dateTimeFound = dateTimeFound.ToLocalTime();

                                                string[] row =
                                                {
                                                    blockObject.BlockHeight,                               blockObject.BlockHash,
                                                    blockObject.BlockReward,                               blockObject.BlockDifficulty,
                                                    dateTimeCreate.ToString(CultureInfo.InvariantCulture),
                                                    dateTimeFound.ToString(CultureInfo.InvariantCulture),
                                                    blockObject.BlockTransactionHash
                                                };
                                                var listViewItem = new ListViewItem(row);


                                                if (walletXiropht.TotalBlockRead < maxShow)
                                                {
                                                    void Invoker()
                                                    {
                                                        this.listViewBlockExplorer.Items.Add(
                                                            listViewItem);
                                                    }

                                                    BeginInvoke((MethodInvoker)Invoker);
                                                    walletXiropht.TotalBlockRead++;
                                                }
                                                else
                                                {
                                                    void Invoker()
                                                    {
                                                        this.listViewBlockExplorer.Items.Insert(
                                                            0,
                                                            listViewItem);
                                                    }

                                                    BeginInvoke((MethodInvoker)Invoker);
                                                    walletXiropht.TotalBlockRead++;
                                                }
                                            }
                                        }
                                    }
                                }

                                if (ClassFormPhase.FormPhase ==
                                    ClassFormPhaseEnumeration.BlockExplorer)
                                {
                                    if (walletXiropht.ClassWalletObject.InSyncBlock)
                                    {
                                        walletXiropht.UpdateLabelSyncInformation(
                                            "Total blocks synced: " +
                                            ClassBlockCache.ListBlock.Count + "/" + walletXiropht.ClassWalletObject.TotalBlockInSync + ".");
                                    }
                                    else
                                    {
                                        walletXiropht.UpdateLabelSyncInformation(
                                            "Total blocks loaded: " +
                                            ClassBlockCache.ListBlock.Count +
                                            "/" + walletXiropht.ClassWalletObject.TotalBlockInSync + ".");
                                    }
                                }
                            }

                            if (this.IsShowed)
                            {
                                if (this.listViewBlockExplorer.Items.Count > 0)
                                {
                                    this.SortingBlockExplorer();
                                }
                            }
                        }
                    }
                    else
                    {
                        if (this.IsShowed)
                        {
                            this.ShowWaitingSyncBlockPanel();
                        }
                    }
                }
                catch (Exception error)
                {
#if DEBUG
                    Log.WriteLine("Error loading blocks: " + error.Message);
#endif
                    Console.WriteLine("Error loading blocks: " + error.Message);
                }

                try
                {
                    if (ClassFormPhase.FormPhase == ClassFormPhaseEnumeration.BlockExplorer)
                    {
                        if (walletXiropht.ClassWalletObject.InSyncBlock)
                        {
                            walletXiropht.UpdateLabelSyncInformation(
                                "Total blocks synced: " + ClassBlockCache.ListBlock.Count + "/" + walletXiropht.ClassWalletObject.TotalBlockInSync + ".");
                        }
                        else
                        {
                            walletXiropht.UpdateLabelSyncInformation(
                                "Total blocks loaded: " + ClassBlockCache.ListBlock.Count + "/" + walletXiropht.ClassWalletObject.TotalBlockInSync + ".");
                        }
                    }

                    if (ClassFormPhase.FormPhase == ClassFormPhaseEnumeration.Overview)
                    {
                        if (walletXiropht.ClassWalletObject.InSyncBlock &&
                            !walletXiropht.ClassWalletObject.InSyncTransactionAnonymity &&
                            !walletXiropht.ClassWalletObject.InSyncTransaction)
                        {
                            try
                            {
                                if (ClassConnectorSetting.SeedNodeIp.ContainsKey(walletXiropht.ClassWalletObject
                                                                                 .ListWalletConnectToRemoteNode[9].RemoteNodeHost))
                                {
                                    walletXiropht.UpdateLabelSyncInformation(
                                        "Total blocks synced: " + ClassBlockCache.ListBlock.Count +
                                        "/" + walletXiropht.ClassWalletObject.TotalBlockInSync + " from Seed Node: " + walletXiropht.ClassWalletObject.ListWalletConnectToRemoteNode[9]
                                        .RemoteNodeHost +
                                        " | " + ClassConnectorSetting
                                        .SeedNodeIp[walletXiropht.ClassWalletObject.ListWalletConnectToRemoteNode[0]
                                                    .RemoteNodeHost].Item1 + ".");
                                }
                                else
                                {
                                    walletXiropht.UpdateLabelSyncInformation(
                                        "Total blocks synced: " + ClassBlockCache.ListBlock.Count +
                                        "/" + walletXiropht.ClassWalletObject.TotalBlockInSync + " from node: " + walletXiropht.ClassWalletObject.ListWalletConnectToRemoteNode[0]
                                        .RemoteNodeHost +
                                        ".");
                                }
                            }
                            catch
                            {
                            }
                        }
                    }
                }
                catch
                {
                }
            }
        }