add: if player online when display marketplace in TopBar
This commit is contained in:
79
src/renderer/utils/playerOnlineCheck.ts
Normal file
79
src/renderer/utils/playerOnlineCheck.ts
Normal file
@ -0,0 +1,79 @@
|
||||
import { fetchActiveServers, fetchOnlinePlayers } from '../api';
|
||||
|
||||
/**
|
||||
* Проверяет, находится ли указанный игрок онлайн на любом из серверов
|
||||
* @param username Имя игрока для проверки
|
||||
* @returns {Promise<boolean>} true, если игрок онлайн хотя бы на одном сервере
|
||||
*/
|
||||
export async function isPlayerOnline(username: string): Promise<boolean> {
|
||||
try {
|
||||
console.log('Начинаем проверку статуса для:', username);
|
||||
|
||||
// Получаем список активных серверов (теперь это массив)
|
||||
const servers = await fetchActiveServers();
|
||||
console.log('Ответ API активных серверов:', servers);
|
||||
|
||||
// Фильтруем серверы с игроками
|
||||
const serversWithPlayers = servers.filter(
|
||||
(server) => server.online_players > 0,
|
||||
);
|
||||
|
||||
// Если нет серверов с игроками, игрок точно не онлайн
|
||||
if (serversWithPlayers.length === 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Проверяем каждый сервер на наличие игрока
|
||||
const checkPromises = serversWithPlayers.map(async (server) => {
|
||||
try {
|
||||
const onlinePlayers = await fetchOnlinePlayers(server.id);
|
||||
|
||||
// Проверяем, есть ли игрок с указанным именем в списке
|
||||
// Предполагая, что онлайн игроки хранятся в массиве online_players
|
||||
return (
|
||||
Array.isArray(onlinePlayers.online_players) &&
|
||||
onlinePlayers.online_players.some(
|
||||
(player) => player.username === username,
|
||||
)
|
||||
);
|
||||
} catch (error) {
|
||||
console.error(`Ошибка при проверке сервера ${server.id}:`, error);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
// Ожидаем результаты всех проверок
|
||||
const results = await Promise.all(checkPromises);
|
||||
|
||||
// Игрок онлайн, если хотя бы одна проверка вернула true
|
||||
return results.some((result) => result);
|
||||
} catch (error) {
|
||||
console.error('Ошибка при проверке онлайн-статуса игрока:', error);
|
||||
return false; // В случае ошибки считаем, что игрок не онлайн
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет, находится ли указанный игрок онлайн на конкретном сервере
|
||||
* @param username Имя игрока для проверки
|
||||
* @param serverId ID сервера для проверки
|
||||
* @returns {Promise<boolean>} true, если игрок онлайн на указанном сервере
|
||||
*/
|
||||
export async function isPlayerOnlineOnServer(
|
||||
username: string,
|
||||
serverId: string,
|
||||
): Promise<boolean> {
|
||||
try {
|
||||
const onlinePlayers = await fetchOnlinePlayers(serverId);
|
||||
|
||||
return (
|
||||
Array.isArray(onlinePlayers.online_players) &&
|
||||
onlinePlayers.online_players.some(
|
||||
(player) => player.username === username,
|
||||
)
|
||||
);
|
||||
} catch (error) {
|
||||
console.error(`Ошибка при проверке игрока на сервере ${serverId}:`, error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user