Files
xk-doctor-wx/utils/ws/initWebSocket.js

119 lines
2.8 KiB
JavaScript
Raw Permalink Normal View History

2026-03-06 13:59:22 +08:00
/**
* WebSocket初始化工具
* 统一管理WebSocket的初始化连接断开等操作
*/
import { webSocketManager } from './websocket.js';
/**
* 检查是否已登录
* @returns {boolean} 是否已登录
*/
function checkLoginStatus() {
const token = uni.getStorageSync('token');
const doctorId = uni.getStorageSync('doctor_id') || uni.getStorageSync('user_id');
return !!(token && doctorId);
}
/**
* 初始化WebSocket
* 职责检查登录状态如果已登录则连接WebSocket并绑定用户
* @returns {boolean} 是否初始化成功
*/
export function initWebSocket() {
// 检查登录状态
if (!checkLoginStatus()) {
console.log('未登录跳过WebSocket初始化');
return false;
}
// 如果已经连接,不需要重复连接
if (webSocketManager.isConnected) {
console.log('WebSocket已连接跳过初始化');
return true;
}
try {
console.log('开始初始化WebSocket...');
webSocketManager.connect();
return true;
} catch (error) {
console.error('WebSocket初始化失败:', error);
return false;
}
}
/**
* 断开WebSocket连接
* 职责断开WebSocket连接清理资源
*/
export function disconnectWebSocket() {
try {
console.log('断开WebSocket连接...');
webSocketManager.disconnect();
} catch (error) {
console.error('断开WebSocket失败:', error);
}
}
/**
* 重新绑定用户
* 职责在token刷新或用户信息变更后重新绑定用户
* @returns {boolean} 是否绑定成功
*/
export function rebindUser() {
if (!checkLoginStatus()) {
console.warn('未登录,无法重新绑定用户');
return false;
}
try {
console.log('重新绑定WebSocket用户...');
return webSocketManager.rebindUser();
} catch (error) {
console.error('重新绑定用户失败:', error);
return false;
}
}
/**
* 获取WebSocket连接状态
* @returns {boolean} 是否已连接
*/
export function isWebSocketConnected() {
return webSocketManager.isConnected;
}
/**
* 获取WebSocket认证状态
* @returns {boolean} 是否已认证
*/
export function isWebSocketAuthenticated() {
return webSocketManager.isAuthenticated;
}
/**
* 添加消息处理器
* @param {Function} handler - 消息处理函数
*/
export function addMessageHandler(handler) {
webSocketManager.addMessageHandler(handler);
}
/**
* 移除消息处理器
* @param {Function} handler - 消息处理函数
*/
export function removeMessageHandler(handler) {
webSocketManager.removeMessageHandler(handler);
}
/**
* 发送WebSocket消息
* @param {Object} message - 消息对象
* @param {boolean} requireAuth - 是否需要认证
* @returns {boolean} 是否发送成功
*/
export function sendWebSocketMessage(message, requireAuth = true) {
return webSocketManager.send(message, requireAuth);
}