BungeeCord-Chrome/background.js aktualisiert
This commit is contained in:
@@ -62,34 +62,76 @@ async function fetchServerStatus(server, timeoutMs = 2000) {
|
|||||||
let serverObj = typeof server === 'string' ? { id: 'legacy', url: server } : server;
|
let serverObj = typeof server === 'string' ? { id: 'legacy', url: server } : server;
|
||||||
let fetchUrl = serverObj.url || '';
|
let fetchUrl = serverObj.url || '';
|
||||||
|
|
||||||
|
// 1. Direkte URL-Abfrage
|
||||||
if (fetchUrl) {
|
if (fetchUrl) {
|
||||||
if (!/^https?:\/\//i.test(fetchUrl)) fetchUrl = 'http://' + fetchUrl;
|
if (!/^https?:\/\//i.test(fetchUrl)) fetchUrl = 'http://' + fetchUrl;
|
||||||
try {
|
try {
|
||||||
|
const startTime = performance.now();
|
||||||
const controller = new AbortController();
|
const controller = new AbortController();
|
||||||
const id = setTimeout(() => controller.abort(), timeoutMs);
|
const id = setTimeout(() => controller.abort(), timeoutMs);
|
||||||
|
|
||||||
const resp = await fetch(fetchUrl, { method: 'GET', signal: controller.signal });
|
const resp = await fetch(fetchUrl, { method: 'GET', signal: controller.signal });
|
||||||
clearTimeout(id);
|
clearTimeout(id);
|
||||||
|
|
||||||
|
const endTime = performance.now();
|
||||||
|
const latency = Math.round(endTime - startTime);
|
||||||
|
|
||||||
if (resp.ok) {
|
if (resp.ok) {
|
||||||
let text = await resp.text();
|
let text = await resp.text();
|
||||||
const lastBrace = text.lastIndexOf('}');
|
const lastBrace = text.lastIndexOf('}');
|
||||||
if (lastBrace !== -1) text = text.substring(0, lastBrace + 1);
|
if (lastBrace !== -1) text = text.substring(0, lastBrace + 1);
|
||||||
text = text.trim();
|
text = text.trim();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const parsed = JSON.parse(text);
|
const parsed = JSON.parse(text);
|
||||||
if (parsed && (typeof parsed.online !== 'undefined' || Array.isArray(parsed.players) || parsed.version)) return parsed;
|
if (parsed && (typeof parsed.online !== 'undefined' || Array.isArray(parsed.players) || parsed.version)) {
|
||||||
} catch {}
|
parsed.ping = latency; // Ping hinzufügen
|
||||||
|
return parsed;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
// Parsing fehlgeschlagen → Fallback-Objekt mit Ping
|
||||||
|
return {
|
||||||
|
online: false,
|
||||||
|
players: [],
|
||||||
|
max_players: 0,
|
||||||
|
version: 'unknown',
|
||||||
|
motd: '',
|
||||||
|
ping: latency > timeoutMs ? null : latency // bei Timeout kein sinnvoller Ping
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// HTTP nicht ok → Offline mit gemessener Latenz (falls unter Timeout)
|
||||||
|
return {
|
||||||
|
online: false,
|
||||||
|
players: [],
|
||||||
|
max_players: 0,
|
||||||
|
version: 'unknown',
|
||||||
|
motd: '',
|
||||||
|
ping: latency > timeoutMs ? null : latency
|
||||||
|
};
|
||||||
|
} catch (e) {
|
||||||
|
// Timeout oder Netzwerkfehler
|
||||||
|
return {
|
||||||
|
online: false,
|
||||||
|
players: [],
|
||||||
|
max_players: 0,
|
||||||
|
version: 'unknown',
|
||||||
|
motd: '',
|
||||||
|
ping: null
|
||||||
|
};
|
||||||
}
|
}
|
||||||
} catch {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 2. WordPress AJAX-Abfrage
|
||||||
const wpSite = serverObj.wpSite ? String(serverObj.wpSite).replace(/\/$/, '') : null;
|
const wpSite = serverObj.wpSite ? String(serverObj.wpSite).replace(/\/$/, '') : null;
|
||||||
const wpServerId = serverObj.wpServerId ? String(serverObj.wpServerId) : null;
|
const wpServerId = serverObj.wpServerId ? String(serverObj.wpServerId) : null;
|
||||||
|
|
||||||
if (wpSite && wpServerId) {
|
if (wpSite && wpServerId) {
|
||||||
try {
|
try {
|
||||||
const ajaxUrl = wpSite + '/wp-admin/admin-ajax.php';
|
const ajaxUrl = wpSite + '/wp-admin/admin-ajax.php';
|
||||||
const body = 'action=mcss_fetch&server_id=' + encodeURIComponent(wpServerId);
|
const body = 'action=mcss_fetch&server_id=' + encodeURIComponent(wpServerId);
|
||||||
|
|
||||||
|
const startTime = performance.now();
|
||||||
const controller2 = new AbortController();
|
const controller2 = new AbortController();
|
||||||
const id2 = setTimeout(() => controller2.abort(), timeoutMs);
|
const id2 = setTimeout(() => controller2.abort(), timeoutMs);
|
||||||
|
|
||||||
@@ -101,11 +143,45 @@ async function fetchServerStatus(server, timeoutMs = 2000) {
|
|||||||
});
|
});
|
||||||
clearTimeout(id2);
|
clearTimeout(id2);
|
||||||
|
|
||||||
|
const endTime = performance.now();
|
||||||
|
const latency = Math.round(endTime - startTime);
|
||||||
|
|
||||||
if (!resp2.ok) throw new Error('WP AJAX HTTP ' + resp2.status);
|
if (!resp2.ok) throw new Error('WP AJAX HTTP ' + resp2.status);
|
||||||
|
|
||||||
const json = await resp2.json();
|
const json = await resp2.json();
|
||||||
if (json && (typeof json.online !== 'undefined' || Array.isArray(json.players) || json.version)) return json;
|
if (json && (typeof json.online !== 'undefined' || Array.isArray(json.players) || json.version)) {
|
||||||
} catch {}
|
json.ping = latency; // Ping hinzufügen
|
||||||
|
return json;
|
||||||
}
|
}
|
||||||
|
|
||||||
return { online: false, players: [], max_players: 0, version: 'unknown', motd: '' };
|
// JSON nicht im erwarteten Format
|
||||||
|
return {
|
||||||
|
online: false,
|
||||||
|
players: [],
|
||||||
|
max_players: 0,
|
||||||
|
version: 'unknown',
|
||||||
|
motd: '',
|
||||||
|
ping: latency > timeoutMs ? null : latency
|
||||||
|
};
|
||||||
|
} catch (e) {
|
||||||
|
return {
|
||||||
|
online: false,
|
||||||
|
players: [],
|
||||||
|
max_players: 0,
|
||||||
|
version: 'unknown',
|
||||||
|
motd: '',
|
||||||
|
ping: null
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Keine gültige Konfiguration
|
||||||
|
return {
|
||||||
|
online: false,
|
||||||
|
players: [],
|
||||||
|
max_players: 0,
|
||||||
|
version: 'unknown',
|
||||||
|
motd: '',
|
||||||
|
ping: null
|
||||||
|
};
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user