code: def dispatch_submission(self, raw_msg):
      try:
          idents, msg_list = self.session.feed_identities(
              raw_msg, copy=False
          )
          msg = self.session.deserialize(
              msg_list, content=False, copy=False
          )
      except:
          self.log.error(
              f"broadcast::Invalid broadcast msg: {raw_msg}",
              exc_info=True,
          )
          return
      metadata = msg["metadata"]
      msg_id = msg["header"]["msg_id"]
      targets = metadata["targets"]
  
      is_coalescing = metadata["is_coalescing"]
  
      if "original_msg_id" not in metadata:
          metadata["original_msg_id"] = msg_id
  
      original_msg_id = metadata["original_msg_id"]
      if self.is_leaf:
          target_idents = [t[0] for t in targets]
          self.send_to_targets(
              msg, original_msg_id, target_idents, idents, is_coalescing
          )
      else:
          self.send_to_sub_schedulers(
              msg, original_msg_id, targets, idents, is_coalescing
          )
  
file_path: ipyparallel/ipyparallel/controller/broadcast_scheduler.py
imports: import logging
  import zmq
  from traitlets import Bool, Bytes, Integer, List, Unicode
  from ipyparallel import util
  from ipyparallel.controller.scheduler import Scheduler, ZMQStream, get_common_scheduler_streams
label_desc: Use image node_id 5 for calling the BroadcastScheduler obj's underlying member method code with example usage: obj.dispatch_submission(raw_msg) without return types