Not working yet!
This commit is contained in:
278
service.js
278
service.js
@@ -1,134 +1,190 @@
|
|||||||
let serverEUrl = "http://localhost/speedtest/";
|
const serverEUrl = "https://localhost/speedtest/";
|
||||||
let serverGUrl = "http://localhost/speedtest/blank.file";
|
const serverGUrl = "https://localhost/speedtest/blank.file";
|
||||||
|
const connectionTogether = 5;
|
||||||
|
|
||||||
let status = "";
|
let status = "";
|
||||||
|
let multi = false; //multi connection together (5)
|
||||||
|
|
||||||
// TODO - check 5 connection together
|
async function startTest() {
|
||||||
|
if (status == "" || status == "stop") {
|
||||||
|
status = "start";
|
||||||
|
setText("button", "Stop Test");
|
||||||
|
setText("ping", "");
|
||||||
|
setText("down", "");
|
||||||
|
setText("up", "");
|
||||||
|
setText("status", "");
|
||||||
|
|
||||||
async function startTest(){
|
multi = document.getElementById("multi-signal").checked;
|
||||||
if(status == "" || status == "stop"){
|
} else if (status == "start") {
|
||||||
status = "start";
|
status = "stop";
|
||||||
setText("button", "Stop Test");
|
setText("status", "stoping...");
|
||||||
setText("ping", "");
|
return;
|
||||||
setText("down", "");
|
}
|
||||||
setText("up", "");
|
|
||||||
setText("status", "");
|
|
||||||
}
|
|
||||||
else if(status == "start"){
|
|
||||||
status = "stop";
|
|
||||||
setText("status", "stoping...");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
setText("status", "checking ping...");
|
setText("status", "checking ping...");
|
||||||
var pingMS = await ping();
|
var pingMS = await ping();
|
||||||
setText("ping", pingMS);
|
setText("ping", pingMS);
|
||||||
|
|
||||||
if(status == "stop"){stopTest();return;}
|
if (status == "stop") {
|
||||||
|
stopTest();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
setText("status", "checking download...");
|
setText("status", "checking download...");
|
||||||
var downMB = await download();
|
var downMB = await download((multi ? connectionTogether : 1));
|
||||||
setText("down", downMB);
|
setText("down", downMB);
|
||||||
|
|
||||||
if(status == "stop"){stopTest();return;}
|
if (status == "stop") {
|
||||||
|
stopTest();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
setText("status", "checking upload...");
|
setText("status", "checking upload...");
|
||||||
var upMB = await upload();
|
var upMB = await upload((multi ? connectionTogether : 1));
|
||||||
setText("up", upMB);
|
setText("up", upMB);
|
||||||
|
|
||||||
status = "";
|
status = "";
|
||||||
setText("status", "done.");
|
setText("status", "done.");
|
||||||
setText("button", "Start Test");
|
setText("button", "Start Test");
|
||||||
}
|
}
|
||||||
|
|
||||||
function stopTest(){
|
function stopTest() {
|
||||||
status = "";
|
status = "";
|
||||||
setText("button", "Start Test");
|
setText("button", "Start Test");
|
||||||
setText("status", "stoped.");
|
setText("status", "stoped.");
|
||||||
}
|
}
|
||||||
|
|
||||||
function setText(elm, text){
|
function setText(elm, text) {
|
||||||
document.getElementById(elm).innerText = text;
|
document.getElementById(elm).innerText = text;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function ping() {
|
async function ping() {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
var startTime = 0;
|
var startTime = 0;
|
||||||
var request = new XMLHttpRequest();
|
var request = new XMLHttpRequest();
|
||||||
request.open("HEAD", serverEUrl + "?_=" + Math.random(), true);
|
request.open("HEAD", serverEUrl + "?_=" + Math.random(), true);
|
||||||
request.onreadystatechange = function() {
|
request.onreadystatechange = function() {
|
||||||
if (request.readyState === 4) {
|
if (request.readyState === 4) {
|
||||||
var endTime = new Date().getTime();
|
var endTime = new Date().getTime();
|
||||||
resolve((endTime - startTime) + " ms");
|
resolve((endTime - startTime) + " ms");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
try {
|
try {
|
||||||
startTime = new Date().getTime();
|
startTime = new Date().getTime();
|
||||||
request.send(null);
|
request.send(null);
|
||||||
} catch(exception) {
|
} catch (exception) {
|
||||||
alert("Your internet connection is unavelible...");
|
alert("Your internet connection is unavelible...");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async function download(){
|
async function download(multiConnection) {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
var startTime = 0;
|
var totalStartTime = 0;
|
||||||
var request = new XMLHttpRequest();
|
requests = [];
|
||||||
request.open("GET", serverGUrl + "?_=" + Math.random(), true);
|
requestsHelper = [];
|
||||||
request.onreadystatechange = function() {
|
function temp(i){
|
||||||
if (request.readyState === 4 && request.status === 200) {
|
setTimeout(
|
||||||
var endTime = new Date().getTime();
|
function() {
|
||||||
var reqLength = request.responseText.length * 8;
|
var startTime = 0;
|
||||||
var sumTime = (endTime - startTime) / 1000;
|
requests[i] = new XMLHttpRequest();
|
||||||
var speed = (((reqLength / sumTime) / 1024 /* Kbps */) / 1024 /* Mbps */).toFixed(2);
|
requestsHelper[i] = [];
|
||||||
resolve(speed + " Mbps (" + sumTime + " s)");
|
requestsHelper[i].done = false;
|
||||||
}
|
requests[i].open("GET", serverGUrl + "?_=" + Math.random(), true);
|
||||||
};
|
requests[i].onreadystatechange = function() {
|
||||||
request.onprogress = function() {
|
if (requests[i].readyState === 4 && requests[i].status === 200) {
|
||||||
if(status == "stop"){request.abort();resolve("Stopped.");}
|
var endTime = new Date().getTime();
|
||||||
|
var reqLength = requests[i].responseText.length * 8;
|
||||||
var endTime = new Date().getTime();
|
var sumTime = (endTime - startTime) / 1000;
|
||||||
var reqLength = request.responseText.length * 8;
|
var speed = (((reqLength / sumTime) / 1024 /* Kbps */ ) / 1024 /* Mbps */ ).toFixed(2);
|
||||||
var sumTime = (endTime - startTime) / 1000;
|
|
||||||
var speed = (((reqLength / sumTime) / 1024 /* Kbps */) / 1024 /* Mbps */).toFixed(2);
|
requestsHelper[i].speed = speed;
|
||||||
setText("down", speed + " Mbps (" + sumTime + " s)");
|
requestsHelper[i].sumTime = sumTime;
|
||||||
};
|
requestsHelper[i].done = true;
|
||||||
try {
|
alert("request " + i + " done.");
|
||||||
startTime = new Date().getTime();
|
}
|
||||||
request.send(null);
|
};
|
||||||
} catch(exception) {
|
requests[i].onprogress = function() {
|
||||||
alert("Your internet connection is unavelible...");
|
if (status == "stop") {
|
||||||
}
|
requests[i].abort();
|
||||||
});
|
}
|
||||||
|
|
||||||
|
var endTime = new Date().getTime();
|
||||||
|
var reqLength = requests[i].responseText.length * 8;
|
||||||
|
var sumTime = (endTime - startTime) / 1000;
|
||||||
|
var speed = (((reqLength / sumTime) / 1024 /* Kbps */ ) / 1024 /* Mbps */ ).toFixed(2);
|
||||||
|
|
||||||
|
requestsHelper[i].speed = speed;
|
||||||
|
requestsHelper[i].sumTime = sumTime;
|
||||||
|
};
|
||||||
|
try {
|
||||||
|
startTime = new Date().getTime();
|
||||||
|
requests[i].send(null);
|
||||||
|
} catch (exception) {
|
||||||
|
alert("Your internet connection is unavelible...");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
1);
|
||||||
|
}
|
||||||
|
|
||||||
|
totalStartTime = new Date().getTime();
|
||||||
|
for (var i = 0; i < multiConnection; i++) {
|
||||||
|
temp(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
while(true){
|
||||||
|
done = true;
|
||||||
|
var tmpTotalSpeed = 0;
|
||||||
|
requestsHelper.forEach(function (request){
|
||||||
|
if(done && !request.done) done = false;
|
||||||
|
tmpTotalSpeed += request.speed
|
||||||
|
});
|
||||||
|
|
||||||
|
var totalEndTime = new Date().getTime();
|
||||||
|
var totalSpeed = tmpTotalSpeed / multiConnection;
|
||||||
|
var totalSumTime = (totalEndTime - totalStartTime) / 1000;
|
||||||
|
|
||||||
|
if(done){
|
||||||
|
resolve(totalSpeed + " Mbps (" + totalSumTime + " s)");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
setText("down", totalSpeed + " Mbps (" + totalSumTime + " s)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function junkData(length){
|
function junkData(length) {
|
||||||
var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', result = '';
|
var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
|
||||||
for (var i = 0; i < length; i++) result += chars[Math.floor(Math.random() * chars.length)];
|
result = '';
|
||||||
return result;
|
for (var i = 0; i < length; i++) result += chars[Math.floor(Math.random() * chars.length)];
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function upload(){
|
async function upload(multiConnection) {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
var startTime = 0;
|
var startTime = 0;
|
||||||
var junkLength = 5000000; //=~5 Mb
|
var junkLength = 5000000; //=~5 Mb
|
||||||
var junk = JSON.stringify({data: junkData(junkLength)});
|
var junk = JSON.stringify({
|
||||||
var request = new XMLHttpRequest();
|
data: junkData(junkLength)
|
||||||
request.open("POST", serverEUrl + "?_=" + Math.random(), true);
|
});
|
||||||
request.setRequestHeader("Content-Type", "application/octet-stream");
|
var request = new XMLHttpRequest();
|
||||||
request.onreadystatechange = function() {
|
request.open("POST", serverEUrl + "?_=" + Math.random(), true);
|
||||||
if (request.readyState === 4 && request.status === 200) {
|
request.setRequestHeader("Content-Type", "application/octet-stream");
|
||||||
var endTime = new Date().getTime();
|
request.onreadystatechange = function() {
|
||||||
var sumTime = (endTime - startTime) / 1000;
|
if (request.readyState === 4 && request.status === 200) {
|
||||||
var speed = ((((junkLength * 8 /* byte (not bit) */) / sumTime) / 1024 /* Kbps */) / 1024 /* Mbps */).toFixed(2);
|
var endTime = new Date().getTime();
|
||||||
resolve(speed + " Mbps (" + sumTime + " s)");
|
var sumTime = (endTime - startTime) / 1000;
|
||||||
}
|
var speed = ((((junkLength * 8 /* byte (not bit) */ ) / sumTime) / 1024 /* Kbps */ ) / 1024 /* Mbps */ ).toFixed(2);
|
||||||
};
|
resolve(speed + " Mbps (" + sumTime + " s)");
|
||||||
try {
|
}
|
||||||
startTime = new Date().getTime();
|
};
|
||||||
request.send(junk);
|
try {
|
||||||
} catch(exception) {
|
startTime = new Date().getTime();
|
||||||
alert("Your internet connection is unavelible...");
|
request.send(junk);
|
||||||
}
|
} catch (exception) {
|
||||||
});
|
alert("Your internet connection is unavelible...");
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user