code: def unpackClientMsg(self, msg, frm):
          
  
          if isinstance(msg, Batch):
              for m in msg.messages:
                  # This check is done since Client uses NodeStack (which can
                  # send and receive BATCH) to talk to nodes but Node uses
                  # ClientStack (which cannot send or receive BATCH).
                  # TODO: The solution is to have both kind of stacks be able to
                  # parse BATCH messages
                  if m in (ZStack.pingMessage, ZStack.pongMessage):
                      continue
                  m = self.clientstack.deserializeMsg(m)
                  self.handleOneClientMsg((m, frm))
          else:
              msg_dict = msg.as_dict if isinstance(msg, Request) else msg
              if isinstance(msg_dict, dict):
                  if self.view_changer.view_change_in_progress and self.is_request_need_quorum(msg_dict):
                      self.discard(msg_dict,
                                   reason="view change in progress",
                                   logMethod=logger.debug)
                      self.send_nack_to_client((idr_from_req_data(msg_dict),
                                                msg_dict.get(f.REQ_ID.nm, None)),
                                               "Client request is discarded since view "
                                               "change is in progress", frm)
                      return
              self.postToClientInBox(msg, frm)
docs: If the message is a batch message validate each message in the batch,
          otherwise add the message to the node's clientInBox.
          But node return a Nack message if View Change in progress
          :param msg: a client message
          :param frm: the name of the client that sent this `msg`