示例#1
0
        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);
        }
示例#2
0
        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);
            }
        }