react - mqtt封装

18 篇文章 0 订阅
6 篇文章 0 订阅
import { useState, useEffect } from 'react';
import * as mqtt from "mqtt/dist/mqtt.min";

function useMqtt() {
    const [client, setClient] = useState(null);
    const [payload, setPayload] = useState({});
    const [connectStatus, setConnectStatus] = useState('Connect');
    const [isSubed, setIsSub] = useState(false);

    useEffect(() => {
        if (client) {
            client.on('connect', () => {
                setConnectStatus('Connected');
            });
            client.on('error', (err) => {
                console.error('Connection error: ', err);
                client.end();
            });
            client.on('reconnect', () => {
                setConnectStatus('Reconnecting');
            });
            client.on('message', (topic, message) => {
                const payload = { topic, message: JSON.parse(message.toString()) };
                setPayload(payload);
            });
        }
    }, [client]);

    // 连接mqtt
    const mqttConnect = (host, mqttOption) => {
        setConnectStatus('Connecting');
        setClient(mqtt.connect(host, mqttOption));
      };

    // 断开连接
    const mqttDisconnect = () => {
        if (client) {
            client.end(() => {
                console.log('断开连接成功!!');
            });
        }
    }

    // 订阅消息
    const mqttSub = (subscription) => {
        if (client) {
            const { topic, qos } = subscription;
            client.subscribe(topic, { qos }, (error) => {
                if (error) {
                    console.log('Subscribe to topics error', error)
                    return
                }
                console.log('订阅消息===>',  topic, qos);
            });
        }
    };

    // 取消订阅
    const mqttUnSub = (subscription) => {
        if (client) {
            const { topic } = subscription;
            client.unsubscribe(topic, error => {
                if (error) {
                    console.log('Unsubscribe error', error)
                    return
                }
                console.log('取消订阅成功!!');
            });
        }
    };

    return {
        mqttConnect,
        payload,
        connectStatus,
        mqttSub,
        mqttUnSub,
        mqttDisconnect,
        client,
        setPayload
    }

}

export default useMqtt;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值