예제 #1
0
 def setUp(self):
     self.num_blobs = 10
     self.blobs_to_announce = []
     for i in range(0, self.num_blobs):
         self.blobs_to_announce.append(binascii.b2a_hex(os.urandom(32)))
     self.clock = task.Clock()
     self.dht_node = MocDHTNode()
     utils.call_later = self.clock.callLater
     from lbrynet.core.server.DHTHashAnnouncer import DHTHashAnnouncer, DHTHashSupplier
     self.announcer = DHTHashAnnouncer(self.dht_node, peer_port=3333)
     self.supplier = MocSupplier(self.blobs_to_announce)
     self.announcer.add_supplier(self.supplier)
예제 #2
0
    def start(self):
        if self.peer_manager is None:
            self.peer_manager = PeerManager()

        def match_port(h, p):
            return h, p

        def join_resolved_addresses(result):
            addresses = []
            for success, value in result:
                if success is True:
                    addresses.append(value)
            return addresses

        def start_dht(addresses):
            log.info("Starting the dht")
            log.info("lbry id: %s",
                     base64.encodestring(self.lbryid).strip("\n"))
            self.dht_node.joinNetwork(addresses)
            self.peer_finder.run_manage_loop()
            self.hash_announcer.run_manage_loop()

        ds = []

        for host, port in self.known_dht_nodes:
            d = reactor.resolve(host)
            d.addCallback(match_port, port)
            ds.append(d)

        if self.dht_node is None:
            self.dht_node = Node(udpPort=self.dht_node_port,
                                 lbryid=self.lbryid,
                                 externalIP=self.external_ip)
        if self.peer_finder is None:
            self.peer_finder = DHTPeerFinder(self.dht_node, self.peer_manager)
        if self.hash_announcer is None:
            self.hash_announcer = DHTHashAnnouncer(self.dht_node,
                                                   self.peer_port)
        if self.blob_manager is None:
            self.blob_manager = DiskBlobManager(self.hash_announcer,
                                                self.blob_dir,
                                                self.blob_data_dir)

        d1 = defer.DeferredList(ds)
        d1.addCallback(join_resolved_addresses)
        d1.addCallback(start_dht)
        d2 = self.blob_manager.setup()
        dl = defer.DeferredList([d1, d2],
                                fireOnOneErrback=True,
                                consumeErrors=True)
        return dl
예제 #3
0
파일: Session.py 프로젝트: RafaelMri/lbry
    def _setup_dht(self):
        log.info("Starting DHT")

        def start_dht(join_network_result):
            self.hash_announcer.run_manage_loop()
            return True

        self.dht_node = self.dht_node_class(udpPort=self.dht_node_port,
                                            node_id=self.node_id,
                                            externalIP=self.external_ip,
                                            peerPort=self.peer_port)
        self.peer_finder = DHTPeerFinder(self.dht_node, self.peer_manager)
        if self.hash_announcer is None:
            self.hash_announcer = DHTHashAnnouncer(self.dht_node,
                                                   self.peer_port)

        self.dht_node.startNetwork()

        # pass start_dht() as callback to start the remaining components after joining the DHT
        return self.join_dht(start_dht)
예제 #4
0
    def _setup_dht(self):

        from twisted.internet import reactor

        log.debug("Starting the dht")

        def match_port(h, p):
            return h, p

        def join_resolved_addresses(result):
            addresses = []
            for success, value in result:
                if success is True:
                    addresses.append(value)
            return addresses

        def start_dht(addresses):
            self.dht_node.joinNetwork(addresses)
            self.peer_finder.run_manage_loop()
            self.hash_announcer.run_manage_loop()
            return True

        ds = []
        for host, port in self.known_dht_nodes:
            d = reactor.resolve(host)
            d.addCallback(match_port, port)
            ds.append(d)

        self.dht_node = self.dht_node_class(
            udpPort=self.dht_node_port,
            lbryid=self.lbryid,
            externalIP=self.external_ip
        )
        self.peer_finder = DHTPeerFinder(self.dht_node, self.peer_manager)
        if self.hash_announcer is None:
            self.hash_announcer = DHTHashAnnouncer(self.dht_node, self.peer_port)

        dl = defer.DeferredList(ds)
        dl.addCallback(join_resolved_addresses)
        dl.addCallback(start_dht)
        return dl
예제 #5
0
파일: Session.py 프로젝트: CAOLINAN/lbry
    def _setup_dht(self):
        """DHT相关功能入口"""
        from twisted.internet import reactor

        log.info("Starting DHT")

        def join_resolved_addresses(result):
            addresses = []
            for success, value in result:
                if success is True:
                    addresses.append(value)
            return addresses

        def start_dht(join_network_result):
            self.peer_finder.run_manage_loop()
            self.hash_announcer.run_manage_loop()
            return True

        ds = []
        for host, port in self.known_dht_nodes:
            d = reactor.resolve(host)  #reactor.resolve函数负责将将主机名转化为IP地址,该方法返回了一个已经激活的deferred
            d.addCallback(lambda h: (h, port))  # match host to port
            ds.append(d)

        self.dht_node = self.dht_node_class(
            udpPort=self.dht_node_port,
            node_id=self.node_id,
            externalIP=self.external_ip,
            peerPort=self.peer_port
        )
        self.peer_finder = DHTPeerFinder(self.dht_node, self.peer_manager)
        if self.hash_announcer is None:
            self.hash_announcer = DHTHashAnnouncer(self.dht_node, self.peer_port)  # 这个类告诉DHT网络, 这个peer有哪些blobs

        dl = defer.DeferredList(ds)
        dl.addCallback(join_resolved_addresses)
        dl.addCallback(self.dht_node.joinNetwork)
        dl.addCallback(start_dht)
        return dl