class StatusMessage extends WebSocketMessage {

  private static final byte ERROR_CHANNEL_STREAM_ID = 3;

  /**
   * Create websocket message that returns {@link Status} on the error channel.
   * 
   * @param status status response
   */
  public StatusMessage(Status status) {
    super(0L, getBodyBytes(ERROR_CHANNEL_STREAM_ID, status), true, true);
  }

  /**
   * Create websocket message that returns a {@link Status} with the given status code
   * on the error channel.
   * 
   * @param exitCode exit code
   */
  public StatusMessage(int exitCode) {
    this(new StatusBuilder()
        .withCode(exitCode)
        .withStatus(exitCode == 0 ? "Success" : "Failure")
        .build());
  }

  private static byte[] getBodyBytes(byte prefix, Status status) {<FILL_FUNCTION_BODY>}
}

    byte[] original = Serialization.asJson(status).getBytes(StandardCharsets.UTF_8);
    byte[] prefixed = new byte[original.length + 1];
    prefixed[0] = prefix;
    System.arraycopy(original, 0, prefixed, 1, original.length);
    return prefixed;
  
<methods>public void <init>(java.lang.String) ,public void <init>(byte[]) ,public void <init>(java.lang.String, boolean) ,public void <init>(byte[], boolean) ,public void <init>(java.lang.Long, java.lang.String, boolean) ,public void <init>(java.lang.Long, byte[], boolean) ,public void <init>(java.lang.Long, java.lang.String, boolean, boolean) ,public void <init>(java.lang.Long, byte[], boolean, boolean) ,public java.lang.String getBody() ,public byte[] getBytes() ,public java.lang.Long getDelay() ,public boolean isBinary() ,public boolean isToBeRemoved() <variables>private final non-sealed boolean binary,private final non-sealed byte[] body,private final non-sealed java.lang.Long delay,private final non-sealed boolean toBeRemoved