コード例 #1
0
ファイル: test_Fetcher.py プロジェクト: youmark/pycoinnet
 def run_peer2():
     r = []
     yield from standards.initial_handshake(peer2, VERSION_MSG_2)
     tx_fetcher = Fetcher(peer2)
     tx = yield from tx_fetcher.fetch(mi(TX_LIST[0].hash()), timeout=2)
     r.append(tx)
     return r
コード例 #2
0
 def create_protocol_callback():
     peer = BitcoinPeerProtocol(MAINNET["MAGIC_HEADER"])
     install_pingpong_manager(peer)
     fetcher = Fetcher(peer)
     peer.add_task(run_peer(
         peer, fetcher, fast_forward_add_peer,
         blockfetcher, inv_collector, blockhandler))
     return peer
コード例 #3
0
ファイル: spvclient.py プロジェクト: youmark/pycoinnet
 def create_protocol_callback():
     peer = BitcoinPeerProtocol(network["MAGIC_HEADER"])
     install_pingpong_manager(peer)
     fetcher = Fetcher(peer)
     peer.add_task(
         run_peer(peer, fetcher, self.getheaders_add_peer,
                  self.blockfetcher, self.inv_collector))
     return peer
コード例 #4
0
ファイル: InvCollector.py プロジェクト: youmark/pycoinnet
    def add_peer(self, peer):
        """
        Add a peer whose inv messages we want to monitor.
        """
        self.fetchers_by_peer[peer] = Fetcher(peer)
        q = asyncio.Queue()
        self.advertise_queues.add(q)

        @asyncio.coroutine
        def _advertise_to_peer(peer, q):
            while True:
                items = []
                while True:
                    inv_item = yield from q.get()
                    if peer not in self.inv_item_db.get(inv_item.data, []):
                        items.append(inv_item)
                    if q.qsize() == 0:
                        break
                # advertise the presence of the item!
                if len(items) > 0:
                    peer.send_msg("inv", items=items)

        @asyncio.coroutine
        def _watch_peer(peer, next_message, advertise_task):
            try:
                while True:
                    name, data = yield from next_message()
                    if name == 'inv':
                        for inv_item in data["items"]:
                            logging.debug("noting %s available from %s",
                                          inv_item, peer)
                            self._register_inv_item(inv_item, peer)
                    if name == 'notfound':
                        for inv_item in data["items"]:
                            logging.debug("noting %s not available from %s",
                                          inv_item, peer)
                            self._unregister_inv_item(inv_item, peer)
            except EOFError:
                del self.fetchers_by_peer[peer]
                advertise_task.cancel()
                for q in self.inv_item_queues:
                    q.put_nowait(None)

        advertise_task = asyncio.Task(_advertise_to_peer(peer, q))

        next_message = peer.new_get_next_message_f(lambda name, data: name in
                                                   ("inv", "notfound"))
        peer.add_task(_watch_peer(peer, next_message, advertise_task))
コード例 #5
0
ファイル: test_Fetcher.py プロジェクト: youmark/pycoinnet
    def run_peer2():
        r = []
        yield from standards.initial_handshake(peer2, VERSION_MSG_2)
        tx_fetcher = Fetcher(peer2)

        tx = yield from tx_fetcher.fetch(mi(TX_LIST[0].hash()), timeout=5)
        r.append(tx)

        tx = yield from tx_fetcher.fetch(mi(TX_LIST[1].hash()))
        r.append(tx)

        tx = yield from tx_fetcher.fetch(mi(TX_LIST[2].hash()))
        r.append(tx)

        f1 = asyncio.Task(tx_fetcher.fetch(mi(TX_LIST[3].hash())))
        f2 = asyncio.Task(tx_fetcher.fetch(mi(TX_LIST[4].hash())))
        f3 = asyncio.Task(tx_fetcher.fetch(mi(TX_LIST[5].hash())))
        yield from asyncio.wait([f1, f2, f3])

        r.append(f1.result())
        r.append(f2.result())
        r.append(f3.result())

        return r