예제 #1
0
    def _assign_daemon_ports(self, host_port=None, daemon_listen_port=None):
        if host_port is None:
            host_port = find_open_port()
        if daemon_listen_port is None:
            daemon_listen_port = find_open_port()
            while daemon_listen_port == host_port:
                daemon_listen_port = find_open_port()

        self._host_port, self._daemon_listen_port = host_port, daemon_listen_port
예제 #2
0
 def _initialize(self, proc_args: List[str]) -> None:
     proc_args = deepcopy(proc_args)
     proc_args.extend(self._make_process_args(
         hostAddrs=f'/ip4/0.0.0.0/tcp/{self._host_port},/ip4/0.0.0.0/udp/{self._host_port}/quic',
         listen=f'/ip4/127.0.0.1/tcp/{self._daemon_listen_port}'
     ))
     self._child = Popen(args=proc_args, encoding="utf8")
     self._alive = True
     self._client_listen_port = find_open_port()
     self._client = p2pclient.Client(
         Multiaddr(f'/ip4/127.0.0.1/tcp/{self._daemon_listen_port}'),
         Multiaddr(f'/ip4/127.0.0.1/tcp/{self._client_listen_port}'))
예제 #3
0
    async def replicate(cls, daemon_listen_port: int, host_port: int):
        """
        Connect to existing p2p daemon
        :param daemon_listen_port: port for connection daemon and client binding
        :param host_port: port for p2p network
        :return: new wrapper for existing p2p daemon
        """

        self = cls()
        # There is no child under control
        # Use external already running p2pd
        self._child = None
        self._alive = True
        self._assign_daemon_ports(host_port, daemon_listen_port)
        self._client_listen_port = find_open_port()
        self._client = p2pclient.Client(
            Multiaddr(f'/ip4/127.0.0.1/tcp/{self._daemon_listen_port}'),
            Multiaddr(f'/ip4/127.0.0.1/tcp/{self._client_listen_port}'))
        await self._wait_for_client()
        return self