This commit is contained in:
Panayiotis Lipiridis 2021-02-07 14:33:26 +02:00
parent bc9c8f7ee2
commit 1ca985aa4a
7 changed files with 35 additions and 19 deletions

View file

@ -1,38 +1,36 @@
const IMAGE_URL = `${process.env.REACT_APP_SOCKET_SERVER_URL}/test256.png`;
const IMAGE_SIZE_BYTES = 141978;
const calculateSpeed = (startTime: number, endTime: number) => {
const getSpeed = (
imageSize: number,
startTime: number,
endTime: number,
): number => {
const duration = (endTime - startTime) / 1000;
const imageSizeInBits = IMAGE_SIZE_BYTES * 8;
let speed = imageSizeInBits / duration;
// source: en.wikipedia.org/wiki/Data-rate_units#Conversion_table
const suffix = ["B/s", "kB/s", "MB/s", "GB/s"];
let index = 0;
while (speed > 1000) {
index++;
speed = speed / 1000;
if (duration > 0) {
return imageSize / duration;
}
return `${speed.toFixed(index > 1 ? 1 : 0)} ${suffix[index]}`;
return 0;
};
const processImage = (): Promise<string> => {
const processImage = (): Promise<number> => {
return new Promise((resolve) => {
const image = new Image();
let endTime: number;
image.onload = () => {
endTime = new Date().getTime();
const speed = calculateSpeed(startTime, endTime);
const speed = getSpeed(IMAGE_SIZE_BYTES, startTime, endTime);
resolve(speed);
};
image.onerror = () => {
resolve("-1");
resolve(-1);
};
const startTime = new Date().getTime();
image.src = `${IMAGE_URL}?t=${startTime}`;
});
};
export const getNetworkSpeed = async (): Promise<string> => {
export const getNetworkSpeed = async (): Promise<number> => {
return await processImage();
};