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
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}'))
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