class NodeIdMessage implements Message {
    /** */
    private static final long serialVersionUID = 0L;

    /** Message body size (with message type) in bytes. */
    static final int MESSAGE_SIZE = 16;

    /** Full message size (with message type) in bytes. */
    public static final int MESSAGE_FULL_SIZE = MESSAGE_SIZE + DIRECT_TYPE_SIZE;

    /** */
    private byte[] nodeIdBytes;

    /** */
    public NodeIdMessage() {
        // No-op.
    }

    /**
     * @param nodeId Node ID.
     */
    public NodeIdMessage(UUID nodeId) {
        assert nodeId != null;

        nodeIdBytes = U.uuidToBytes(nodeId);

        assert nodeIdBytes.length == MESSAGE_SIZE : "Node ID size must be " + MESSAGE_SIZE;
    }

    /**
     * @return Node ID bytes.
     */
    public byte[] nodeIdBytes() {
        return nodeIdBytes;
    }

    /**
     * @param nodeId Node ID.
     * @return Marshalled node ID bytes with direct message type.
     */
    public static byte[] nodeIdBytesWithType(UUID nodeId) {<FILL_FUNCTION_BODY>}

    /** {@inheritDoc} */
    @Override public void onAckReceived() {
        // No-op.
    }

    /** {@inheritDoc} */
    @Override public boolean writeTo(ByteBuffer buf, MessageWriter writer) {
        assert nodeIdBytes.length == MESSAGE_SIZE;

        if (buf.remaining() < MESSAGE_FULL_SIZE)
            return false;

        TcpCommunicationSpi.writeMessageType(buf, directType());

        buf.put(nodeIdBytes);

        return true;
    }

    /** {@inheritDoc} */
    @Override public boolean readFrom(ByteBuffer buf, MessageReader reader) {
        if (buf.remaining() < MESSAGE_SIZE)
            return false;

        nodeIdBytes = new byte[MESSAGE_SIZE];

        buf.get(nodeIdBytes);

        return true;
    }

    /** {@inheritDoc} */
    @Override public short directType() {
        return TcpCommunicationSpi.NODE_ID_MSG_TYPE;
    }

    /** {@inheritDoc} */
    @Override public byte fieldsCount() {
        return 0;
    }

    /** {@inheritDoc} */
    @Override public String toString() {
        return S.toString(NodeIdMessage.class, this);
    }
}

        byte[] nodeIdBytesWithType = new byte[MESSAGE_FULL_SIZE];

        nodeIdBytesWithType[0] = (byte)(TcpCommunicationSpi.NODE_ID_MSG_TYPE & 0xFF);
        nodeIdBytesWithType[1] = (byte)((TcpCommunicationSpi.NODE_ID_MSG_TYPE >> 8) & 0xFF);

        U.uuidToBytes(nodeId, nodeIdBytesWithType, 2);

        return nodeIdBytesWithType;
    
<no_super_class>