feat: enhance WebSocket management with connection status logging, error handling, and improved data parsing

This commit is contained in:
wonfen
2025-05-04 20:47:50 +08:00
parent d8df283e93
commit e2ad2d23f8
2 changed files with 111 additions and 18 deletions

View File

@@ -138,6 +138,7 @@ export const AppDataProvider = ({ children }: { children: React.ReactNode }) =>
const { server = "", secret = "" } = clashInfo;
if (!server) return () => {};
console.log(`[Connections][${AppDataProvider.name}] 正在连接: ${server}/connections`);
const socket = createAuthSockette(`${server}/connections`, secret, {
timeout: 5000,
onmessage(event) {
@@ -167,15 +168,29 @@ export const AppDataProvider = ({ children }: { children: React.ReactNode }) =>
};
});
} catch (err) {
console.error("[Connections] 解析数据错误:", err);
console.error(`[Connections][${AppDataProvider.name}] 解析数据错误:`, err, event.data);
}
},
onerror() {
onopen: (event) => {
console.log(`[Connections][${AppDataProvider.name}] WebSocket 连接已建立`, event);
},
onerror(event) {
console.error(`[Connections][${AppDataProvider.name}] WebSocket 连接错误或达到最大重试次数`, event);
next(null, { connections: [], uploadTotal: 0, downloadTotal: 0 });
},
onclose: (event) => {
console.log(`[Connections][${AppDataProvider.name}] WebSocket 连接关闭`, event.code, event.reason);
if (event.code !== 1000 && event.code !== 1001) {
console.warn(`[Connections][${AppDataProvider.name}] 连接非正常关闭,重置数据`);
next(null, { connections: [], uploadTotal: 0, downloadTotal: 0 });
}
}
});
return () => socket.close();
return () => {
console.log(`[Connections][${AppDataProvider.name}] 清理WebSocket连接`);
socket.close();
};
}
);
@@ -188,18 +203,40 @@ export const AppDataProvider = ({ children }: { children: React.ReactNode }) =>
const { server = "", secret = "" } = clashInfo;
if (!server) return () => {};
console.log(`[Traffic][${AppDataProvider.name}] 正在连接: ${server}/traffic`);
const socket = createAuthSockette(`${server}/traffic`, secret, {
onmessage(event) {
try {
const data = JSON.parse(event.data);
next(null, data);
if (data && typeof data.up === 'number' && typeof data.down === 'number') {
next(null, data);
} else {
console.warn(`[Traffic][${AppDataProvider.name}] 收到无效数据:`, data);
}
} catch (err) {
console.error("[Traffic] 解析数据错误:", err);
console.error(`[Traffic][${AppDataProvider.name}] 解析数据错误:`, err, event.data);
}
},
onopen: (event) => {
console.log(`[Traffic][${AppDataProvider.name}] WebSocket 连接已建立`, event);
},
onerror(event) {
console.error(`[Traffic][${AppDataProvider.name}] WebSocket 连接错误或达到最大重试次数`, event);
next(null, { up: 0, down: 0 });
},
onclose: (event) => {
console.log(`[Traffic][${AppDataProvider.name}] WebSocket 连接关闭`, event.code, event.reason);
if (event.code !== 1000 && event.code !== 1001) {
console.warn(`[Traffic][${AppDataProvider.name}] 连接非正常关闭,重置数据`);
next(null, { up: 0, down: 0 });
}
}
});
return () => socket.close();
return () => {
console.log(`[Traffic][${AppDataProvider.name}] 清理WebSocket连接`);
socket.close();
};
}
);
@@ -211,18 +248,40 @@ export const AppDataProvider = ({ children }: { children: React.ReactNode }) =>
const { server = "", secret = "" } = clashInfo;
if (!server) return () => {};
console.log(`[Memory][${AppDataProvider.name}] 正在连接: ${server}/memory`);
const socket = createAuthSockette(`${server}/memory`, secret, {
onmessage(event) {
try {
const data = JSON.parse(event.data);
next(null, data);
if (data && typeof data.inuse === 'number') {
next(null, data);
} else {
console.warn(`[Memory][${AppDataProvider.name}] 收到无效数据:`, data);
}
} catch (err) {
console.error("[Memory] 解析数据错误:", err);
console.error(`[Memory][${AppDataProvider.name}] 解析数据错误:`, err, event.data);
}
},
onopen: (event) => {
console.log(`[Memory][${AppDataProvider.name}] WebSocket 连接已建立`, event);
},
onerror(event) {
console.error(`[Memory][${AppDataProvider.name}] WebSocket 连接错误或达到最大重试次数`, event);
next(null, { inuse: 0 });
},
onclose: (event) => {
console.log(`[Memory][${AppDataProvider.name}] WebSocket 连接关闭`, event.code, event.reason);
if (event.code !== 1000 && event.code !== 1001) {
console.warn(`[Memory][${AppDataProvider.name}] 连接非正常关闭,重置数据`);
next(null, { inuse: 0 });
}
}
});
return () => socket.close();
return () => {
console.log(`[Memory][${AppDataProvider.name}] 清理WebSocket连接`);
socket.close();
};
}
);