#if Java
import io.moquette.interception.InterceptHandler;
import io.moquette.interception.messages.*;
import io.netty.buffer.ByteBuf;
import anywheresoftware.b4a.BA;
public static class MyHandler implements InterceptHandler {
    BA ba;
    public MyHandler(B4AClass parent) {
        this.ba = parent.getBA();
    }
    @Override
    public String getID() {
        return "handler";
    }
    @Override
    public Class<?>[] getInterceptedMessageTypes() {
        return ALL_MESSAGE_TYPES;
    }
    @Override
    public void onConnect(InterceptConnectMessage msg) {
        this.ba.raiseEventFromUI(this, "broker_connect", msg);
    }
    @Override
    public void onDisconnect(InterceptDisconnectMessage msg) {
        this.ba.raiseEventFromUI(this, "broker_disconnect", msg);
    }
    @Override
    public void onConnectionLost(InterceptConnectionLostMessage msg) {
        this.ba.raiseEventFromUI(this, "broker_connectionlost", msg);
    }
    @Override
    public void onPublish(InterceptPublishMessage msg) {
        String topic = msg.getTopicName();
        String clientId = msg.getClientID();
        ByteBuf buf = msg.getPayload();
        byte[] payload = new byte[buf.readableBytes()];
        int readerIndex = buf.readerIndex();
        buf.getBytes(readerIndex, payload);
        PublishEvent event = new PublishEvent(topic, payload, clientId);
        this.ba.raiseEventFromUI(this, "broker_publish", event);
    }
    @Override
    public void onSubscribe(InterceptSubscribeMessage msg) {
        this.ba.raiseEventFromUI(this, "broker_subscribe", msg);
    }
    @Override
    public void onUnsubscribe(InterceptUnsubscribeMessage msg) {
        this.ba.raiseEventFromUI(this, "broker_unsubscribe", msg);
    }
    @Override
    public void onMessageAcknowledged(InterceptAcknowledgedMessage msg) {
        this.ba.raiseEventFromUI(this, "broker_messageacknowledged", msg);
    }
    public static class PublishEvent {
        public String topic;
        public byte[] payload;
        public String clientId;
        public PublishEvent(String topic, byte[] payload, String clientId) {
            this.topic = topic;
            this.payload = payload;
            this.clientId = clientId;
        }
    }
}
#End If