code: def __init__(
      self,
      daemon_connector: DaemonConnector,
      listen_maddr: Multiaddr = Multiaddr(DEFAULT_LISTEN_MADDR),
      *,
      _initialized_with_create: bool = False,
      persistent_conn_max_msg_size: int = DEFAULT_MAX_MSG_SIZE,
  ) -> None:
      assert (
          _initialized_with_create
      ), "Please use ControlClient.create coroutine to spawn new control instances"
  
      self.persistent_conn_max_msg_size = persistent_conn_max_msg_size
  
      self.listen_maddr = listen_maddr
      self.daemon_connector = daemon_connector
      self.handlers: Dict[str, StreamHandler] = {}
  
      self.unary_handlers: Dict[str, TUnaryHandler] = {}
  
      self._pending_messages: asyncio.Queue[
          p2pd_pb.PersistentConnectionRequest
      ] = asyncio.Queue()
      self._pending_calls: Dict[CallID, asyncio.Future[bytes]] = {}
      self._handler_tasks: Dict[CallID, asyncio.Task] = {}
  
      self._read_task: Optional[asyncio.Task] = None
      self._write_task: Optional[asyncio.Task] = None
  
file_path: hivemind/hivemind/p2p/p2p_daemon_bindings/control.py
imports: import asyncio
  from contextlib import asynccontextmanager, closing
  from typing import AsyncIterator, Awaitable, Callable, Dict, Iterable, Optional, Sequence, Tuple
  from uuid import UUID, uuid4
  from multiaddr import Multiaddr, protocols
  from hivemind.p2p.p2p_daemon_bindings.datastructures import PeerID, PeerInfo, StreamInfo
  from hivemind.p2p.p2p_daemon_bindings.utils import DispatchFailure, P2PDaemonError, P2PHandlerError, raise_if_failed, read_pbmsg_safe, write_pbmsg
  from hivemind.proto import p2pd_pb2
  from hivemind.utils.logging import get_logger
label_desc: Use image node_id 1 to create a new ControlClient object  with example: obj = ControlClient(daemon_connector, listen_maddr)