コード例 #1
0
        public static bool CommandLine(string command)
        {
            var splitCommand = command.Split(new char[0], StringSplitOptions.None);

            try
            {
                switch (splitCommand[0])
                {
                case ClassCommandLineEnumeration.CommandLineHelp:
                    Console.WriteLine("Command list: ");
                    Console.WriteLine(ClassCommandLineEnumeration.CommandLineStatus + " -> Get Network status of your node");
                    Console.WriteLine(ClassCommandLineEnumeration.CommandLineTransaction + " -> Get the number of transaction(s) sync.");
                    Console.WriteLine(ClassCommandLineEnumeration.CommandLineBlock + " -> Get the number of block(s) sync.");
                    Console.WriteLine(ClassCommandLineEnumeration.CommandLineLog + " -> Can set level of log to show: (default) log 0 max level 4");
                    Console.WriteLine(ClassCommandLineEnumeration.CommandLineClearSync + " -> Clear the sync of the remote node.");
                    Console.WriteLine(ClassCommandLineEnumeration.CommandLineFilterList + " -> show every incoming connections ip's and their status.");
                    Console.WriteLine(ClassCommandLineEnumeration.CommandLineBanList + " -> show every incoming connections ip's banned.");
                    Console.WriteLine(ClassCommandLineEnumeration.CommandLineSave + " -> Save sync.");
                    Console.WriteLine(ClassCommandLineEnumeration.CommandLineExit + " -> Save sync and Exit the node.");
                    break;

                case ClassCommandLineEnumeration.CommandLineStatus:
                    Console.WriteLine("Total Transaction Sync: " + (ClassRemoteNodeSync.ListOfTransaction.Count));
                    Console.WriteLine("Total Transaction in the Blockchain: " + ClassRemoteNodeSync.TotalTransaction);
                    long totalTransactionSortedPerWallet = ClassRemoteNodeSync.ListTransactionPerWallet.Count;

                    Console.WriteLine("Total Transaction Sorted for Wallet(s): " + totalTransactionSortedPerWallet);
                    Console.WriteLine("Total Block(s) Sync: " + (ClassRemoteNodeSync.ListOfBlock.Count));
                    Console.WriteLine("Total Block(s) mined in the Blockchain: " + ClassRemoteNodeSync.TotalBlockMined);
                    Console.WriteLine("Total Block(s) left to mining: " + ClassRemoteNodeSync.CurrentBlockLeft);
                    Console.WriteLine("Total pending transaction in the network: " + ClassRemoteNodeSync.TotalPendingTransaction);
                    Console.WriteLine("Total Fee in the network: " + ClassRemoteNodeSync.CurrentTotalFee, Program.GlobalCultureInfo);
                    Console.WriteLine("Current Mining Difficulty: " + ClassRemoteNodeSync.CurrentDifficulty);
                    if (ClassRemoteNodeSync.CurrentHashrate != null)
                    {
                        Console.WriteLine("Current Mining Hashrate: " + ClassUtils.GetTranslateHashrate(ClassRemoteNodeSync.CurrentHashrate.Replace(".", ","), 2).Replace(",", "."), Program.GlobalCultureInfo);
                    }
                    Console.WriteLine("Total Coin Max Supply: " + ClassRemoteNodeSync.CoinMaxSupply, Program.GlobalCultureInfo);

                    Console.WriteLine("Total Coin Circulating: " + ClassRemoteNodeSync.CoinCirculating, Program.GlobalCultureInfo);

                    if (ClassRemoteNodeSync.WantToBePublicNode)
                    {
                        string publicNodes = string.Empty;
                        for (int i = 0; i < ClassRemoteNodeSync.ListOfPublicNodes.Count; i++)
                        {
                            if (i < ClassRemoteNodeSync.ListOfPublicNodes.Count)
                            {
                                publicNodes += ClassRemoteNodeSync.ListOfPublicNodes[i] + " ";
                            }
                        }
                        Console.WriteLine("List of Public Remote Node: " + publicNodes);
                        string status = "NOT LISTED";
                        if (ClassRemoteNodeSync.ImPublicNode)
                        {
                            status = "LISTED";
                        }
                        Console.WriteLine("Public Status of the Remote Node: " + status);
                    }
                    Console.WriteLine("Trusted Key: " + ClassRemoteNodeSync.TrustedKey);
                    Console.WriteLine("Hash Transaction Key: " + ClassRemoteNodeSync.HashTransactionList);
                    Console.WriteLine("Hash Block Key: " + ClassRemoteNodeSync.HashBlockList);

                    break;

                case ClassCommandLineEnumeration.CommandLineTransaction:
                    Console.WriteLine("Total Transaction Sync: " + (ClassRemoteNodeSync.ListOfTransaction.Count));
                    Console.WriteLine("Total Transaction in the Blockchain: " + ClassRemoteNodeSync.TotalTransaction);
                    break;

                case ClassCommandLineEnumeration.CommandLineBlock:
                    Console.WriteLine("Total Block(s) Sync: " + (ClassRemoteNodeSync.ListOfBlock.Count));
                    Console.WriteLine("Total Block(s) mined in the Blockchain: " + ClassRemoteNodeSync.TotalBlockMined);
                    Console.WriteLine("Total Block(s) left to mining: " + ClassRemoteNodeSync.CurrentBlockLeft);
                    break;

                case ClassCommandLineEnumeration.CommandLineLog:
                    if (!string.IsNullOrEmpty(splitCommand[1]))
                    {
                        if (int.TryParse(splitCommand[1], out var logLevel))
                        {
                            if (logLevel < 0)
                            {
                                logLevel = 0;
                            }
                            if (logLevel > 7)
                            {
                                logLevel = 7;
                            }
                            Console.WriteLine("Log Level " + Program.LogLevel + " -> " + logLevel);
                            Program.LogLevel = logLevel;
                        }
                        else
                        {
                            Console.WriteLine("Wrong argument: " + splitCommand[1] + " should be a number.");
                        }
                    }
                    else
                    {
                        Console.WriteLine("Empty/Missing argument.");
                    }
                    break;

                case ClassCommandLineEnumeration.CommandLineClearSync:
                    if (Program.RemoteNodeObjectTransaction.RemoteNodeObjectInSyncTransaction || Program.RemoteNodeObjectBlock.RemoteNodeObjectInSyncBlock)
                    {
                        Console.WriteLine("Cannot clean remote node sync, your remote node is currently on sync.");
                        Console.WriteLine("If you absolutly want to clear your sync, close the remote node, remove the Blockchain folder and restart.");
                    }
                    else
                    {
                        ClassRemoteNodeSync.ListOfTransaction.Clear();
                        ClassRemoteNodeSync.ListOfTransactionHash.Clear();
                        ClassRemoteNodeSync.ListTransactionPerWallet.Clear();
                        ClassRemoteNodeSync.ListOfBlock.Clear();
                        ClassRemoteNodeSync.ListOfBlockHash.Clear();
                        ClassRemoteNodeSave.ClearBlockSyncSave();
                        ClassRemoteNodeSave.ClearTransactionSyncSave();
                        ClassRemoteNodeKey.DataBlockRead          = string.Empty;
                        ClassRemoteNodeKey.DataTransactionRead    = string.Empty;
                        ClassRemoteNodeSave.TotalBlockSaved       = 0;
                        ClassRemoteNodeSave.TotalTransactionSaved = 0;
                        ClassRemoteNodeSave.DataTransactionSaved  = string.Empty;
                        ClassRemoteNodeSave.DataBlockSaved        = string.Empty;


                        Console.WriteLine("Clear finish, restart sync..");
                        ClassRemoteNodeKey.StartUpdateHashTransactionList();
                        ClassRemoteNodeKey.StartUpdateHashBlockList();
                        ClassRemoteNodeKey.StartUpdateTrustedKey();
                    }
                    break;

                case ClassCommandLineEnumeration.CommandLineFilterList:
                    if (ClassApiBan.ListFilterObjects.Count > 0)
                    {
                        foreach (var objectBan in ClassApiBan.ListFilterObjects)
                        {
                            if (objectBan.Value.Banned)
                            {
                                long banDelay = objectBan.Value.LastBanDate - DateTimeOffset.Now.ToUnixTimeSeconds();
                                Console.WriteLine("IP: " + objectBan.Value.Ip + " Total Invalid Packet:" + objectBan.Value.TotalInvalidPacket + " banned pending: " + banDelay + " second(s).");
                            }
                            else
                            {
                                Console.WriteLine("IP: " + objectBan.Value.Ip + " Total Invalid Packet:" + objectBan.Value.TotalInvalidPacket + " not banned.");
                            }
                        }
                    }
                    else
                    {
                        Console.WriteLine("Their is any incoming ip on the list.");
                    }
                    break;

                case ClassCommandLineEnumeration.CommandLineBanList:
                    if (ClassApiBan.ListFilterObjects.Count > 0)
                    {
                        foreach (var objectBan in ClassApiBan.ListFilterObjects)
                        {
                            if (objectBan.Value.Banned)
                            {
                                long banDelay = objectBan.Value.LastBanDate - DateTimeOffset.Now.ToUnixTimeSeconds();
                                Console.WriteLine("IP: " + objectBan.Value.Ip + " Total Invalid Packet:" + objectBan.Value.TotalInvalidPacket + " banned pending: " + banDelay + " second(s).");
                            }
                        }
                    }
                    else
                    {
                        Console.WriteLine("Their is any incoming ip on the list.");
                    }
                    break;

                case ClassCommandLineEnumeration.CommandLineSave:
                    Console.WriteLine("Stop auto save system. Start manual save sync..");
                    while (ClassRemoteNodeSave.InSaveTransactionDatabase)
                    {
                        Thread.Sleep(1000);
                    }
                    ClassRemoteNodeSave.TotalTransactionSaved = 0;
                    ClassRemoteNodeSave.DataTransactionSaved  = string.Empty;
                    ClassRemoteNodeSave.SaveTransaction(false);
                    while (ClassRemoteNodeSave.InSaveBlockDatabase)
                    {
                        Thread.Sleep(1000);
                    }
                    ClassRemoteNodeSave.TotalBlockSaved = 0;
                    ClassRemoteNodeSave.DataBlockSaved  = string.Empty;
                    ClassRemoteNodeSave.SaveBlock(false);
                    Console.WriteLine("Sync saved.");
                    Console.WriteLine("Restart auto save system.");
                    ClassRemoteNodeSave.SaveTransaction();
                    ClassRemoteNodeSave.SaveBlock();
                    break;

                case ClassCommandLineEnumeration.CommandLineExit:
                    Program.Closed = true;
                    Console.WriteLine("Disable auto reconnect remote node..");
                    ClassCheckRemoteNodeSync.DisableCheckRemoteNodeSync();
                    Thread.Sleep(1000);
                    Console.WriteLine("Stop each connection of the remote node.");
                    Program.RemoteNodeObjectBlock.StopConnection();
                    Program.RemoteNodeObjectTransaction.StopConnection();
                    Program.RemoteNodeObjectTotalTransaction.StopConnection();
                    Program.RemoteNodeObjectCoinCirculating.StopConnection();
                    Program.RemoteNodeObjectCoinMaxSupply.StopConnection();
                    Program.RemoteNodeObjectCurrentDifficulty.StopConnection();
                    Program.RemoteNodeObjectCurrentRate.StopConnection();
                    Program.RemoteNodeObjectTotalBlockMined.StopConnection();
                    Program.RemoteNodeObjectTotalFee.StopConnection();
                    Program.RemoteNodeObjectTotalPendingTransaction.StopConnection();
                    ClassLog.StopWriteLog();

                    Thread.Sleep(1000);
                    Console.WriteLine("Stop api..");
                    ClassApi.StopApi();
                    Console.WriteLine("Starting save sync..");
                    while (ClassRemoteNodeSave.InSaveTransactionDatabase)
                    {
                        Thread.Sleep(1000);
                    }
                    ClassRemoteNodeSave.TotalTransactionSaved = 0;
                    ClassRemoteNodeSave.DataTransactionSaved  = string.Empty;
                    ClassRemoteNodeSave.SaveTransaction(false);
                    while (ClassRemoteNodeSave.InSaveBlockDatabase)
                    {
                        Thread.Sleep(1000);
                    }
                    ClassRemoteNodeSave.TotalBlockSaved = 0;
                    ClassRemoteNodeSave.DataBlockSaved  = string.Empty;
                    ClassRemoteNodeSave.SaveBlock(false);
                    Console.WriteLine("Sync saved.");
                    Process.GetCurrentProcess().Kill();
                    return(false);
                }
            }
            catch (Exception error)
            {
                Console.WriteLine("Command line error: " + error.Message);
            }
            return(true);
        }