MCPcopy Create free account
hub / github.com/TeleBoxOrg/TeleBox_Plugins / quickPingTest

Function quickPingTest

speedtest/speedtest.ts:812–865  ·  view source on GitHub ↗

* 轻量级服务器ping测试

(serverId: number)

Source from the content-addressed store, hash-verified

810 * 轻量级服务器ping测试
811 */
812async function quickPingTest(serverId: number): Promise<{ available: boolean; ping?: number; error?: string }> {
813 try {
814 if (!fs.existsSync(SPEEDTEST_PATH)) {
815 await downloadCli();
816 }
817
818 // 只进行ping测试,不执行完整的速度测试
819 const command = `"${SPEEDTEST_PATH}" --accept-license --accept-gdpr -f json -s ${serverId} --progress=no --selection-details`;
820 const { stdout, stderr } = await execAsync(command, {
821 timeout: 8000 // 8秒超时,只需要ping测试
822 });
823
824 if (stderr) {
825 if (stderr.includes("NoServersException") || stderr.includes("Server not found")) {
826 return { available: false, error: "服务器不存在" };
827 }
828 if (stderr.includes("Timeout") || stderr.includes("timeout")) {
829 return { available: false, error: "连接超时" };
830 }
831 if (stderr.includes("Cannot read from socket")) {
832 return { available: false, error: "网络连接失败" };
833 }
834 }
835
836 // 如果能获取到输出,说明服务器基本可用
837 if (stdout && stdout.trim()) {
838 try {
839 const result = JSON.parse(stdout);
840 if (result.ping && result.ping.latency) {
841 return { available: true, ping: result.ping.latency };
842 }
843 if (result.server && result.server.id === serverId) {
844 return { available: true };
845 }
846 } catch (parseError) {
847 // JSON解析失败,但有输出说明服务器响应了
848 return { available: true };
849 }
850 }
851
852 return { available: true };
853 } catch (error: any) {
854 console.error(`Server ${serverId} ping test failed:`, error);
855
856 if (error.code === 'ETIMEDOUT') {
857 return { available: false, error: "连接超时" };
858 }
859 if (error.message?.includes('NoServersException')) {
860 return { available: false, error: "服务器不可用" };
861 }
862
863 return { available: false, error: error.message || "未知错误" };
864 }
865}
866
867/**
868 * 简化的服务器可用性检测 - 仅检查服务器是否在列表中

Callers

nothing calls this directly

Calls 2

errorMethod · 0.80
downloadCliFunction · 0.70

Tested by

no test coverage detected