@Override
    protected void writeRequest(final int protocolVersion, final FlushableDataOutput output)
        throws IOException {
      try {
        log.tracef("Client writing request %d", getBatchId());
        activeRequests.put(getBatchId(), executeRequestContext);

        output.write(ModelControllerProtocol.PARAM_OPERATION);
        operation.writeExternal(output);
        output.write(ModelControllerProtocol.PARAM_INPUTSTREAMS_LENGTH);
        int inputStreamLength = 0;
        if (executeRequestContext.getAttachments() != null) {
          List<InputStream> streams = executeRequestContext.getAttachments().getInputStreams();
          if (streams != null) {
            inputStreamLength = streams.size();
          }
        }
        output.writeInt(inputStreamLength);
        log.tracef("Client wrote request %d successfully", getBatchId());
      } catch (Exception e) {
        log.tracef(e, "Client wrote request %d with error", getBatchId());
        setError(e);
        if (e instanceof IOException) {
          throw (IOException) e;
        }
        if (e instanceof RuntimeException) {
          throw (RuntimeException) e;
        }
        throw new IOException(e);
      }
    }
 @Override
 protected void writeResponse(final FlushableDataOutput output) throws IOException {
   output.write(ModelControllerProtocol.PARAM_INPUTSTREAM_LENGTH);
   output.writeInt(bytes.length);
   output.write(ModelControllerProtocol.PARAM_INPUTSTREAM_CONTENTS);
   output.write(bytes);
   log.tracef("Client handled inputstream request %d", getHeader().getBatchId());
 }
 @Override
 protected void sendRequest(
     ActiveOperation.ResultHandler<Void> resultHandler,
     ManagementRequestContext<Void> voidManagementRequestContext,
     FlushableDataOutput output)
     throws IOException {
   output.write(DomainControllerProtocol.PARAM_HOST_ID);
   output.writeUTF(localHostName);
 }
 @Override
 protected void sendRequest(
     final ActiveOperation.ResultHandler<Void> resultHandler,
     final ManagementRequestContext<Void> context,
     final FlushableDataOutput output)
     throws IOException {
   output.writeByte(outcome);
   output.writeUTF(message);
 }
 @Override
 protected void sendRequest(
     final ActiveOperation.ResultHandler<Void> resultHandler,
     final ManagementRequestContext<Void> context,
     final FlushableDataOutput output)
     throws IOException {
   output.write(DomainControllerProtocol.PARAM_HOST_ID);
   output.writeUTF(localHostName);
   ModelNode hostInfo = localHostInfo.clone();
   hostInfo
       .get(RemoteDomainConnectionService.DOMAIN_CONNECTION_ID)
       .set(pongHandler.getConnectionId());
   hostInfo.writeExternal(output);
 }
 @Override
 protected void sendRequest(
     ActiveOperation.ResultHandler<Void> registrationResultResultHandler,
     ManagementRequestContext<Void> voidManagementRequestContext,
     FlushableDataOutput output)
     throws IOException {
   output.writeByte(DomainControllerProtocol.PARAM_OK);
   subsystems.writeExternal(output);
 }
 protected static void writeHeader(final ManagementProtocolHeader header, final OutputStream os)
     throws IOException {
   final FlushableDataOutput output = ProtocolUtils.wrapAsDataOutput(os);
   header.write(output);
   output.flush();
 }