public void ParseDidICatchUp(DidICatchUpRequest request, Peer from) { var catcherUp = new CatcherUpRequest() { EndOfLongestChain = _blockChainService.Info.EndOfLongestChain, Invs = new List <InvitationRequest>() }; foreach (var trans in _minerService.MemPool) { var inv = new InvitationRequest() { DataId = trans.Body.TransactionId, IsBlock = false }; catcherUp.Invs.Add(inv); } if (request.LastKnownEnd != _blockChainService.Info.EndOfLongestChain) { var newBs = _blockChainService.GetNewerBlockInfos(request.LastOnline, request.LastKnownEnd); foreach (var blockInfo in newBs) { var inv = new InvitationRequest() { DataId = blockInfo.Id, IsBlock = true }; catcherUp.Invs.Add(inv); } } Console.WriteLine("Response to didI {0} {1}", catcherUp.EndOfLongestChain, catcherUp.Invs.Count); _server.SendResponse(catcherUp, from); }
public void CheckUpChecker() { while (!CaughtUp) { var req = new DidICatchUpRequest() { LastKnownEnd = _blockChainService.Info.EndOfLongestChain, LastOnline = _blockChainService.Info.EditTime.AddMilliseconds(1) }; _mappingService.Peers.Shuffle(); for (int ii = 0; ii < (_mappingService.Peers.Count >= Configurations.CATCHUP_N ? Configurations.CATCHUP_N : _mappingService.Peers.Count); ii++) { _server.SendResponse(req, _mappingService.Peers[ii]); } if ((DateTime.UtcNow - LastGotResponse).TotalSeconds >= Configurations.MAX_TIME_BETWEEN_CATCHUP_RESP) { CaughtUp = true; _logger.Log("Ketchup timed out, ketchup."); break; } Thread.Sleep(1000 * Configurations.Config.SecondsToWaitBetweenCatchUpLoops); } }