static void Sync() { var blockCount = MongoDB <Block> .Count(); //从已同步的前一个区块开始同步,避免程序强行关闭导致数据存储不全。 blockCount = blockCount > 0 ? blockCount - 1 : blockCount; Sync(blockCount); }
/// <summary> /// 修复模式 /// </summary> /// <param name="start">开始高度</param> /// <param name="end">截止高度</param> static void Fix(uint start, uint end) { end = Math.Min(end, MongoDB <Block> .Count()); for (uint i = start; i < end; i++) { #if !DEBUG try { Insert(i); } catch (Exception e) { Console.WriteLine(e); Console.ReadLine(); }; #endif #if DEBUG Insert(i); #endif //Console.Clear(); Console.WriteLine($"{i}/{end}"); } }
static void Main(string[] args) { Console.WriteLine("正在初始化数据库"); Initialize(); while (true) { Console.WriteLine("eg:>insert 0"); Console.WriteLine("eg:>sync"); Console.WriteLine("eg:>sync 10888"); Console.Write(">"); var input = Console.ReadLine(); var command = input.Split(' ')[0]; if (command == "sync") { if (input.Split(' ').Length > 1) { Sync(Convert.ToUInt32(input.Split(' ')[1])); } else { Sync(); } } if (command == "fix") { if (input.Split(' ').Length > 2 && uint.TryParse(input.Split(' ')[1], out uint start) && uint.TryParse(input.Split(' ')[2], out uint end)) { Fix(start, end); } else if (input.Split(' ').Length > 2 && uint.TryParse(input.Split(' ')[1], out uint start1)) { Fix(start1, MongoDB <Block> .Count()); } } if (command == "insert") { if (input.Split(' ').Length > 1) { var parameter = input.Split(' ')[1]; var start = uint.TryParse(parameter, out uint result); if (start) { Console.WriteLine($"存储区块 {result}"); Insert(result); } } } if (command == "address") { if (input.Split(' ').Length > 1) { var parameter = input.Split(' ')[1]; Console.WriteLine($"正在查询 {parameter}"); QueryAddress(parameter); } } Console.WriteLine("命令执行完毕"); } }