/**
  * Generates a multi-line string representation of an {@link IonMessage}
  *
  * @param title a title (description) for this message. This text will be at the beginning of the
  *     multi-line output string.
  * @param msg the {@link IonMessage} to represent as a string.
  * @return a multi-line string representation of the message
  */
 public static String printMessage(String title, IonMessage msg) {
   StringBuilder sb = new StringBuilder("\t\n" + title + "\n");
   sb.append("Headers: ").append("\n");
   java.util.HashMap<String, Object> headers =
       (java.util.HashMap<String, Object>) msg.getIonHeaders();
   for (String s : headers.keySet()) {
     sb.append("\t").append(s).append(" :: ").append(headers.get(s)).append("\n");
   }
   sb.append("CONTENT: ").append("\n");
   sb.append("\t").append(msg.getContent()).append("\n");
   return sb.toString();
 }
      @Override
      public void messageReceived(ion.core.messaging.IonMessage msg) {
        /* Acknowledge receipt of the message*/
        //                log.debug("Ack Message");
        this.ackMessage(msg);

        log.debug(printMessage("**Control Message Received**", msg));

        String op = msg.getIonHeaders().get("op").toString();
        log.debug("OP: " + op);
        String repTo = msg.getIonHeaders().get("reply-to").toString();
        if (op.equalsIgnoreCase("op_shutdown")) {
          log.debug("Shutdown Request Received");
          //                    this.send(new MessagingName(repTo), "op_shutdown_ack", "Shutdown
          // initiated");
          clistener.controlEvent(new ControlEvent(this, ControlEventType.SHUTDOWN, msg));
        } else if (op.equalsIgnoreCase("op_update")) {
          log.debug("Update Request Received");
          clistener.controlEvent(new ControlEvent(this, ControlEventType.UPDATE, msg));
        }
      }