feat(websocket): 重构WebSocket连接逻辑并添加初始化命令

- 重构WebSocket连接逻辑,使用新的URL参数构建方式
- 添加初始化连接时的CmdSignIn和CmdRequestWechatAccountsAliveStatus命令
- 修改WebSocket消息类型定义,简化消息结构
- 从CkChatStore获取accountId用于连接参数
- 移除Login页面中与WebSocket相关的冗余代码
This commit is contained in:
超级老白兔
2025-08-21 17:44:47 +08:00
parent 8e89c5ba73
commit d0bd7d4cd7
8 changed files with 179 additions and 148 deletions

View File

@@ -44,7 +44,7 @@ export const useCkChatStore = createPersistStore<CkChatState>(
// 获取账户ID
getAccountId: () => {
const state = useCkChatStore.getState();
return state.userInfo?.account?.id || null;
return Number(state.userInfo?.account?.id) || null;
},
// 获取租户ID

View File

@@ -80,7 +80,6 @@ export const useUserStore = createPersistStore<UserState>(
},
login2: token2 => {
localStorage.setItem("token2", token2);
console.log(token2);
set({ token2, isLoggedIn: true });
},

View File

@@ -1,15 +1,15 @@
import { createPersistStore } from "@/store/createPersistStore";
import { Toast } from "antd-mobile";
import { useUserStore } from "./user";
import { useCkChatStore } from "@/store/module/ckchat";
const { getAccountId } = useCkChatStore.getState();
// WebSocket消息类型
export interface WebSocketMessage {
id: string;
type: string;
content: any;
timestamp: number;
sender?: string;
receiver?: string;
cmdType?: string;
seq?: number;
wechatAccountIds?: string[];
[key: string]: any;
}
// WebSocket连接状态
@@ -25,9 +25,11 @@ export enum WebSocketStatus {
interface WebSocketConfig {
url: string;
client: string;
accountId: string;
accountId: number;
accessToken: string;
autoReconnect: boolean;
cmdType: string;
seq: number;
reconnectInterval: number;
maxReconnectAttempts: number;
}
@@ -68,11 +70,13 @@ interface WebSocketState {
// 默认配置
const DEFAULT_CONFIG: WebSocketConfig = {
url: (import.meta as any).env?.VITE_API_WS_URL || "ws://localhost:8080",
url: (import.meta as any).env?.VITE_API_WS_URL,
client: "kefu-client",
accountId: "",
accountId: 0,
accessToken: "",
autoReconnect: true,
cmdType: "", // 添加默认的命令类型
seq: 0, // 添加默认的序列号
reconnectInterval: 3000,
maxReconnectAttempts: 5,
};
@@ -103,24 +107,24 @@ export const useWebSocketStore = createPersistStore<WebSocketState>(
};
// 获取用户信息
const { token, token2, user } = useUserStore.getState();
const accessToken = fullConfig.accessToken || token2 || token;
const { token2 } = useUserStore.getState();
if (!accessToken) {
if (!token2) {
Toast.show({ content: "未找到有效的访问令牌", position: "top" });
return;
}
// 构建WebSocket URL
const params = {
client: fullConfig.client,
accountId: fullConfig.accountId || user?.s2_accountId || "",
accessToken: accessToken,
t: Date.now().toString(),
};
console.log("获取connect参数", getAccountId());
const wsUrl =
fullConfig.url + "?" + new URLSearchParams(params).toString();
// 构建WebSocket URL
const params = new URLSearchParams({
client: fullConfig.client.toString(),
accountId: getAccountId().toString(),
accessToken: token2,
t: Date.now().toString(),
});
const wsUrl = fullConfig.url + "?" + params;
set({
status: WebSocketStatus.CONNECTING,
@@ -166,7 +170,7 @@ export const useWebSocketStore = createPersistStore<WebSocketState>(
},
// 发送消息
sendMessage: (message: Omit<WebSocketMessage, "id" | "timestamp">) => {
sendMessage: message => {
const currentState = get();
if (
@@ -179,8 +183,6 @@ export const useWebSocketStore = createPersistStore<WebSocketState>(
const fullMessage: WebSocketMessage = {
...message,
id: Date.now().toString(),
timestamp: Date.now(),
};
try {
@@ -204,16 +206,8 @@ export const useWebSocketStore = createPersistStore<WebSocketState>(
return;
}
const { user } = useUserStore.getState();
const { token, token2 } = useUserStore.getState();
const accessToken = token2 || token;
const command = {
accessToken: accessToken,
accountId: user?.s2_accountId,
client: currentState.config?.client || "kefu-client",
cmdType: cmdType,
seq: Date.now(),
cmdType,
...data,
};
@@ -255,10 +249,20 @@ export const useWebSocketStore = createPersistStore<WebSocketState>(
});
console.log("WebSocket连接成功");
const { token2 } = useUserStore.getState();
// 发送登录命令
if (currentState.config) {
currentState.sendCommand("CmdSignIn");
currentState.sendCommand("CmdSignIn", {
accessToken: token2,
accountId: Number(getAccountId()),
client: currentState.config?.client || "kefu-client",
seq: currentState.config?.seq || 1,
});
//获取UserId
currentState.sendCommand("CmdRequestWechatAccountsAliveStatus", {
wechatAccountIds: ["300745", "4880930", "32686452"],
seq: 2,
});
}
Toast.show({ content: "WebSocket连接成功", position: "top" });