package com.zhgd.mqtt.controller;


import com.zhgd.mqtt.bean.PushPayload;
import com.zhgd.mqtt.server.MqttCustomerClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttTopic;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;


/**
 * @author
 * @date 2019/11/15$ 14:36$
 */
@RestController
public class EMQController {

    @RequestMapping("/api/hello")
    @ResponseBody
    public String sendHello(){
        /**
         * mqtt发布消息的时候，可以设置保留消息标志，保留消息会驻留在消息服务器，后来的订阅主题仍然可以接受该消息
         * 关于retain的说明：
         * 终端设备publish消息时，如果retain值是true，则会服务器一直记忆，哪怕是服务重启。因为Mnesia会本地持久化。
         * publish某主题的消息，payload为空且retain值是true，则会删除这条持久化的消息。
         *
         * publish某主题的消息，payload为空且retain值是false，则不会删除这条持久化的消息。

         QOS_AT_MOST_ONCE(0, "最多一次，有可能重复或丢失"),
         QOS_AT_LEAST_ONCE(1, "至少一次，有可能重复"),
         QOS_EXACTLY_ONCE(2, "只有一次，确保消息只到达一次");

         */
        PushPayload pushMessage = PushPayload.getPushPayloadBuider().setAccountId("1")
                .setTitle("扬尘监测设备预警")
                .setContent("扬尘监测设备检测到温度值异常，温度值50℃  请及时处理")
                .setType("1")
                .bulid();
        String kdTopic = "topic1";
        MqttTopic mqttTopic= MqttCustomerClient.getClient().getTopic(kdTopic);
        try {
            mqttTopic.publish(pushMessage);
        } catch (MqttException e) {
            throw new RuntimeException(e);
        }
        return "123";
    }

}
