hik-map
Version:
- 提炼自浙江海康智联科技有限公司中后台产品的交互语言和视觉风格。 - 开箱即用的高质量 Vue 组件。
81 lines (75 loc) • 2.19 kB
text/typescript
import mqtt from 'mqtt';
const subscription = {
topic: '/mec/+/objectlist/up',
qos: 0,
};
export function useMqtt() {
function shuttleMqtt() {
const options = {
//认证信息
clientId: 'mqttjs_' + Math.random().toString(16).substr(2, 8),
username: 'obu',
password: 'obu&mqtt',
connectTimeout: 4000, // 超时时间
reconnectPeriod: 4000, // 重连时间间隔
clean: true, // 保留会话
};
let client: any = undefined;
const createConnection = (callback: any) => {
try {
client = mqtt.connect('ws://121.196.25.48:8083/mqtt', options);
} catch (error) {
console.log('mqtt.connect error', error);
}
client.on('connect', () => {
console.log('Connection succeeded!');
doSubscribe();
});
client.on('reconnect', (error: any) => {
console.log('Reconnection:', error);
});
client.on('error', (error: any) => {
console.log('Connection failed', error);
});
client.on('message', (topic: string, message: any) => {
callback && callback(JSON.parse(message));
});
};
const doSubscribe = () => {
const { topic, qos } = subscription;
client.subscribe(topic, qos, (error: any, res: any) => {
if (error) {
console.log('Subscribe to topics error', error);
return;
}
console.log('Subscribe to topics res', res);
});
};
const doUnSubscribe = () => {
const { topic } = subscription;
client.unsubscribe(topic, (error: any) => {
if (error) {
console.log('Unsubscribe error', error);
}
});
};
const destroyConnection = () => {
if (client.connected) {
try {
client = { connected: false };
console.log('Successfully disconnected!');
} catch (error) {
console.log('Disconnect failed', (error as any).toString());
}
}
};
return {
createConnection,
destroyConnection,
doUnSubscribe,
};
}
return {
shuttleMqtt,
};
}