code: def message_loop(self) -> None:
      while not self._join_event.is_set():
          try:
              msg = self._read_message()
          except EOFError:
              # On abnormal shutdown the queue will be destroyed underneath
              # resulting in EOFError.  message_loop needs to exit..
              logger.warning("EOFError seen in message_loop")
              break
          except MessageRouterClosedError:
              logger.warning("message_loop has been closed")
              break
          if not msg:
              continue
          self._handle_msg_rcv(msg)
  
imports: import logging
  import threading
  import uuid
  from abc import abstractmethod
  from typing import TYPE_CHECKING, Dict, Optional
  from ..lib import mailbox, tracelog
  from .message_future import MessageFuture
label_desc: Use image node_id 4 for calling the MessageRouter obj's underlying member method code with example usage: obj.message_loop() without return types