diff --git a/src/api/workmanagement/airportMaintenance.ts b/src/api/workmanagement/airportMaintenance.ts
index 219b7ca..6522fe3 100644
--- a/src/api/workmanagement/airportMaintenance.ts
+++ b/src/api/workmanagement/airportMaintenance.ts
@@ -1,11 +1,19 @@
import { defHttp } from '@/utils/http/axios';
-import { StartLiveParams, SetCameraVideoParams, ExchangeCameraParams } from './model/index';
+import {
+ StartLiveParams,
+ SetCameraVideoParams,
+ ExchangeCameraParams,
+ AddOrUpdateRedisUserParams,
+} from './model/index';
enum Api {
StartLive = '/api/AirportMaintenance/StartLive',
EndLive = '/api/AirportMaintenance/EndLive',
SetCameraVideo = '/api/AirportMaintenance/SetCameraVideo',
ExchangeCamera = '/api/AirportMaintenance/ExchangeCamera',
+ GetRedisUser = '/api/AirportMaintenance/GetRedisUser',
+ GetLockedClients = '/api/AirportMaintenance/GetLockedClients',
+ AddOrUpdateRedisUser = '/api/AirportMaintenance/AddOrUpdateRedisUser',
}
export const startLive = (params: StartLiveParams) =>
@@ -30,3 +38,16 @@ export const exchangeCamera = (params: ExchangeCameraParams) =>
url: Api.ExchangeCamera,
params,
});
+
+export function getRedisUser(id) {
+ return defHttp.get({ url: Api.GetRedisUser + '?id=' + id });
+}
+
+export function getLockedClients(params?: any) {
+ return defHttp.get({ url: Api.GetLockedClients, params });
+}
+export const addOrUpdateRedisUser = (params: AddOrUpdateRedisUserParams) =>
+ defHttp.post({
+ url: Api.AddOrUpdateRedisUser,
+ params,
+ });
diff --git a/src/api/workmanagement/model/index.ts b/src/api/workmanagement/model/index.ts
index a1ad882..c22c140 100644
--- a/src/api/workmanagement/model/index.ts
+++ b/src/api/workmanagement/model/index.ts
@@ -20,3 +20,11 @@ export interface ExchangeCameraParams {
position?: number;
camera?: string;
}
+
+export interface AddOrUpdateRedisUserParams {
+ clientId?: string;
+ userId?: string;
+ userName?: string;
+ connectTime?: string;
+ isLock?: boolean;
+}
diff --git a/src/utils/mqtt.ts b/src/utils/mqtt.ts
index 9a1b55f..28a90aa 100644
--- a/src/utils/mqtt.ts
+++ b/src/utils/mqtt.ts
@@ -1,5 +1,11 @@
import mqtt from 'mqtt';
import { useMessage } from '@/hooks/web/useMessage';
+import { getRedisUser, addOrUpdateRedisUser } from '@/api/workmanagement/airportMaintenance';
+import { useUserStore } from '@/store/modules/user';
+import { timestampToFormattedDate } from '@/utils/index';
+
+const userStore = useUserStore();
+const userInfo = userStore.getUserInfo;
const { createMessage } = useMessage();
const connection = {
@@ -12,8 +18,8 @@ const connection = {
clean: true,
connectTimeout: 30 * 1000, // ms
reconnectPeriod: 4000, // ms
- // clientId: 'mqttx_' + Math.random().toString(16).substring(2, 8),
- clientId: 'mqtt_client_1581F8HGX254V00A0BUY',
+ clientId: '',
+ // clientId: 'mqtt_client_1581F8HGX254V00A0BUY',
// auth
username: 'sdhc',
password: '',
@@ -44,32 +50,41 @@ const handleOnReConnect = () => {
};
// 创建连接函数
const createConnection = (callback?) => {
+ console.log('创建连接');
+ // 连接mqtt的时候,先用GetRedisUser查一下有没有,
+ // 然后AddOrUpdateRedisUser更新或添加,
+ // 控制的时候先查一下有没有锁定的用户GetLockedClients
try {
+ getRedisUser(userInfo.id).then((res) => {
+ console.log(res);
+ if (res) {
+ connection.clientId = res.clientId;
+ } else {
+ const clientId = 'mqttx_' + Math.random().toString(16).substring(2, 8);
+ connection.clientId = clientId;
+ const querys = {
+ clientId: clientId,
+ userId: userInfo.id,
+ userName: userInfo.name,
+ isLock: false,
+ connectTime: timestampToFormattedDate(new Date().getTime()),
+ };
+ addOrUpdateRedisUser(querys);
+ }
+ });
+ // const clientId = 'mqttx_' + Math.random().toString(16).substring(2, 8);
+ // connection.clientId = clientId;
const { protocol, host, port, endpoint, ...options } = connection;
const connectUrl = `${protocol}://${host}:${port}${endpoint}`;
client = mqtt.connect(connectUrl, options);
- client.on('connect', () => {
- // console.log('✅ 已连接');
- if(callback){
- callback()
- }
- });
- client.on('close', () => {
- // console.log('❌ 连接已关闭');
- });
- client.on('error', (err) => {
- // console.error('❌ 出错了:', err);
- });
- if (client.on) {
- }
} catch (error) {
console.log('mqtt.connect error', error);
}
};
const getClient = () => {
- if (!client || !client.connected) {
- createConnection();
- }
+ // if (!client || !client.connected) {
+ // createConnection();
+ // }
return client;
};
// 断开连接
@@ -87,20 +102,16 @@ const destroyConnection = () => {
};
// 订阅事件
const clientSubscribe = (topic: string, options?: any) => {
- console.log(client);
- if (!client || !client.connected) {
- createConnection();
- }
- getClient().subscribe(topic, { qos: 0 }, (error, res) => {
- console.log('订阅');
- console.log(error, res);
- });
+ // if (!client || !client.connected) {
+ // createConnection();
+ // }
+ getClient().subscribe(topic, { qos: 0 }, (error, res) => {});
};
// 发送消息
const clientPublish = (topic: string, querys: any) => {
- if (!client || !client.connected) {
- createConnection();
- }
+ // if (!client || !client.connected) {
+ // createConnection();
+ // }
getClient().publish(topic, JSON.stringify(querys), { qos: 0 }, (err) => {
if (err) {
console.error('Publish error:', err);
@@ -109,12 +120,11 @@ const clientPublish = (topic: string, querys: any) => {
};
// 获取连接状态
const getConnectStatus = () => {
- console.log('client',client)
if (!client.connected) {
- return false
+ return false;
}
- return true
-}
+ return true;
+};
// on 事件
// connect 连接
// reconnect 重新连接
@@ -143,18 +153,31 @@ const createSeizeConnection = () => {
console.log('mqtt.connect error', error);
}
};
-const getReizeClient = () => {
- if (!client_seize || !client_seize.connected) {
- createSeizeConnection();
+const destroySeizeConnection = () => {
+ if (client_seize.connected) {
+ try {
+ client_seize.end(false, () => {
+ client_seize = {
+ connected: false,
+ };
+ console.log('Successfully disconnected!');
+ });
+ } catch (error) {
+ console.log('Disconnect failed', error.toString());
+ }
}
+};
+const getReizeClient = () => {
+ // if (!client_seize || !client_seize.connected) {
+ // createSeizeConnection();
+ // }
return client_seize;
};
// 订阅事件
const clientReizeSubscribe = (topic: string, options?: any) => {
- console.log(client_seize);
- if (!client_seize || !client_seize.connected) {
- createConnection();
- }
+ // if (!client_seize || !client_seize.connected) {
+ // createSeizeConnection();
+ // }
getReizeClient().subscribe(topic, { qos: 0 }, (error, res) => {
console.log('订阅');
console.log(error, res);
@@ -162,9 +185,9 @@ const clientReizeSubscribe = (topic: string, options?: any) => {
};
// 发送消息
const clientReizePublish = (topic: string, querys: any) => {
- if (!client_seize || !client_seize.connected) {
- createConnection();
- }
+ // if (!client_seize || !client_seize.connected) {
+ // createSeizeConnection();
+ // }
getReizeClient().publish(topic, JSON.stringify(querys), { qos: 0 }, (err) => {
if (err) {
console.error('Publish error:', err);
@@ -179,6 +202,7 @@ export {
clientSubscribe,
clientPublish,
createSeizeConnection,
+ destroySeizeConnection,
getReizeClient,
clientReizeSubscribe,
clientReizePublish,
diff --git a/src/views/demo/workmanagement/flightoperation/index.vue b/src/views/demo/workmanagement/flightoperation/index.vue
index 9cda23f..3aae0f9 100644
--- a/src/views/demo/workmanagement/flightoperation/index.vue
+++ b/src/views/demo/workmanagement/flightoperation/index.vue
@@ -53,7 +53,7 @@