12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import axios from 'axios';
- import { API_URL } from 'src/constants';
- import { API } from 'src/types';
- const SERVER_LIST_URL = API_URL + '/' + API.GET_SERVERS;
- const TIMEOUT = 1500;
- const fetchWithTimeout = (url: string, timeout = TIMEOUT) => {
- return axios.get(url, { timeout, headers: {'Cache-Control': 'no-cache'} });
- };
- const testServerSpeed = async (serverUrl: string) => {
- const startTime = Date.now();
- try {
- await fetchWithTimeout(serverUrl);
- const endTime = Date.now();
- return endTime - startTime;
- } catch (error) {
- console.error(`Error fetching ${serverUrl}:`, error);
- return TIMEOUT;
- }
- };
- export const determineFastestServer = async () => {
- try {
- const response = await axios.get(SERVER_LIST_URL);
- const servers = response.data?.maps;
- const speedTests = await Promise.allSettled(
- servers?.map((server: string) => testServerSpeed(server + '/tiles_osm/2/2/2'))
- );
- let fastestServer = null;
- let fastestTime = TIMEOUT;
- speedTests.forEach((result, index) => {
- if (result.status === 'fulfilled' && result.value < fastestTime) {
- fastestTime = result.value;
- fastestServer = servers[index];
- }
- });
- if (fastestServer) {
- return fastestServer;
- } else {
- return null;
- }
- } catch (error) {
- console.error('Error determining fastest server:', error);
- throw error;
- }
- };
|