package com.lutao.cloud.iot.mqtt.core.client;


import com.lutao.cloud.iot.mqtt.codec.*;
import org.tio.core.ChannelContext;

/**
 * mqtt 客户端消息处理器
 */
public interface IMqttClientProcessor {

    /**
     * 处理编解码失败
     *
     * @param context ChannelContext
     * @param message MqttMessage
     * @param ex      Throwable
     */
    void processDecodeFailure(ChannelContext context, MqttMessage message, Throwable ex);

    /**
     * 处理服务端链接 ack
     *
     * @param context ChannelContext
     * @param message MqttConnAckMessage
     */
    void processConAck(ChannelContext context, MqttConnAckMessage message);

    /**
     * 处理服务端订阅的 ack
     *
     * @param message MqttSubAckMessage
     */
    void processSubAck(MqttSubAckMessage message);

    /**
     * 处理服务端 publish 的消息
     *
     * @param context ChannelContext
     * @param message MqttPublishMessage
     */
    void processPublish(ChannelContext context, MqttPublishMessage message);

    /**
     * 处理服务端解除订阅的 ack
     *
     * @param message MqttSubAckMessage
     */
    void processUnSubAck(MqttUnsubAckMessage message);

    /**
     * 处理服务端 publish 的 ack
     *
     * @param message MqttPubAckMessage
     */
    void processPubAck(MqttPubAckMessage message);

    /**
     * 处理服务端 publish rec
     *
     * @param context ChannelContext
     * @param message MqttPubAckMessage
     */
    void processPubRec(ChannelContext context, MqttMessage message);

    /**
     * 处理服务端 publish rel
     *
     * @param context ChannelContext
     * @param message MqttPubAckMessage
     */
    void processPubRel(ChannelContext context, MqttMessage message);

    /**
     * 处理服务端 publish comp
     *
     * @param message MqttPubAckMessage
     */
    void processPubComp(MqttMessage message);
}
