1422 lines
46 KiB
JavaScript
Executable File
1422 lines
46 KiB
JavaScript
Executable File
/*
|
||
Official Website : https://OpenSpeedTest.COM | Email: support@openspeedtest.com
|
||
Developed by : Vishnu | https://Vishnu.Pro | Email : me@vishnu.pro
|
||
Like this Project? Please Donate NOW & Keep us Alive -> https://go.openspeedtest.com/Donate
|
||
Speed Test by OpenSpeedTest™️ is Free and Open-Source Software (FOSS) with MIT License.
|
||
Read full license terms @ http://go.openspeedtest.com/License
|
||
If you have any Questions, ideas or Comments Please Send it via -> https://go.openspeedtest.com/SendMessage
|
||
*/
|
||
window.onload = function () {
|
||
var appSVG = document.getElementById("OpenSpeedTest-UI");
|
||
appSVG.parentNode.replaceChild(appSVG.contentDocument.documentElement, appSVG);
|
||
ostOnload();
|
||
OpenSpeedTest.Start();
|
||
};
|
||
(function (OpenSpeedTest) {
|
||
var Status;
|
||
var ProG;
|
||
var Callback = function (callback) {
|
||
if (callback && typeof callback === "function") {
|
||
callback();
|
||
}
|
||
};
|
||
function _(el) {
|
||
if (!(this instanceof _)) {
|
||
return new _(el);
|
||
}
|
||
this.el = document.getElementById(el);
|
||
}
|
||
_.prototype.fade = function fade(type, ms, callback00) {
|
||
var isIn = type === "in", opacity = isIn ? 0 : 1, interval = 14, duration = ms, gap = interval / duration, self = this;
|
||
if (isIn) {
|
||
self.el.style.display = "block";
|
||
self.el.style.opacity = opacity;
|
||
}
|
||
function func() {
|
||
opacity = isIn ? opacity + gap : opacity - gap;
|
||
self.el.style.opacity = opacity;
|
||
if (opacity <= 0) {
|
||
self.el.style.display = "none";
|
||
}
|
||
if (opacity <= 0 || opacity >= 1) {
|
||
window.clearInterval(fading, Callback(callback00));
|
||
}
|
||
}
|
||
var fading = window.setInterval(func, interval);
|
||
};
|
||
var easeOutQuint = function (t, b, c, d) {
|
||
t /= d;
|
||
t--;
|
||
return c * (t * t * t * t * t + 1) + b;
|
||
};
|
||
var easeOutCubic = function (t, b, c, d) {
|
||
t /= d;
|
||
t--;
|
||
return c * (t * t * t + 1) + b;
|
||
};
|
||
var openSpeedtestShow = function () {
|
||
this.YourIP = _("YourIP");
|
||
this.ipDesk = _("ipDesk");
|
||
this.ipMob = _("ipMob");
|
||
this.downSymbolDesk = _("downSymbolDesk");
|
||
this.upSymbolDesk = _("upSymbolDesk");
|
||
this.upSymbolMob = _("upSymbolMob");
|
||
this.downSymbolMob = _("downSymbolMob");
|
||
this.settingsMob = _("settingsMob");
|
||
this.settingsDesk = _("settingsDesk");
|
||
this.oDoLiveStatus = _("oDoLiveStatus");
|
||
this.ConnectErrorMob = _("ConnectErrorMob");
|
||
this.ConnectErrorDesk = _("ConnectErrorDesk");
|
||
this.downResult = _("downResult");
|
||
this.upRestxt = _("upRestxt");
|
||
this.pingResult = _("pingResult");
|
||
this.jitterDesk = _("jitterDesk");
|
||
this.pingMobres = _("pingMobres");
|
||
this.JitterResultMon = _("JitterResultMon");
|
||
this.JitterResultms = _("JitterResultms");
|
||
this.UI_Desk = _("UI-Desk");
|
||
this.UI_Mob = _("UI-Mob");
|
||
this.oDoTopSpeed = _("oDoTopSpeed");
|
||
this.startButtonMob = _("startButtonMob");
|
||
this.startButtonDesk = _("startButtonDesk");
|
||
this.intro_Desk = _("intro-Desk");
|
||
this.intro_Mob = _("intro-Mob");
|
||
this.loader = _("loading_app");
|
||
this.OpenSpeedtest = _("OpenSpeedtest");
|
||
this.mainGaugebg_Desk = _("mainGaugebg-Desk");
|
||
this.mainGaugeBlue_Desk = _("mainGaugeBlue-Desk");
|
||
this.mainGaugeWhite_Desk = _("mainGaugeWhite-Desk");
|
||
this.mainGaugebg_Mob = _("mainGaugebg-Mob");
|
||
this.mainGaugeBlue_Mob = _("mainGaugeBlue-Mob");
|
||
this.mainGaugeWhite_Mob = _("mainGaugeWhite-Mob");
|
||
this.oDoLiveSpeed = _("oDoLiveSpeed");
|
||
this.progressStatus_Mob = _("progressStatus-Mob");
|
||
this.progressStatus_Desk = _("progressStatus-Desk");
|
||
this.graphc1 = _("graphc1");
|
||
this.graphc2 = _("graphc2");
|
||
this.graphMob2 = _("graphMob2");
|
||
this.graphMob1 = _("graphMob1");
|
||
this.text = _("text");
|
||
this.scale = [{ degree: 680, value: 0 }, { degree: 570, value: 0.5 }, { degree: 460, value: 1 }, { degree: 337, value: 10 }, { degree: 220, value: 100 }, { degree: 115, value: 500 }, { degree: 0, value: 1000 },];
|
||
this.element = "";
|
||
this.chart = "";
|
||
this.polygon = "";
|
||
this.width = 200;
|
||
this.height = 50;
|
||
this.maxValue = 0;
|
||
this.values = [];
|
||
this.points = [];
|
||
this.vSteps = 5;
|
||
this.measurements = [];
|
||
this.points = [];
|
||
};
|
||
openSpeedtestShow.prototype.reset = function () {
|
||
this.element = "";
|
||
this.chart = "";
|
||
this.polygon = "";
|
||
this.width = 200;
|
||
this.height = 50;
|
||
this.maxValue = 0;
|
||
this.values = [];
|
||
this.points = [];
|
||
this.vSteps = 5;
|
||
this.measurements = [];
|
||
this.points = [];
|
||
};
|
||
openSpeedtestShow.prototype.ip = function () {
|
||
var Self = this;
|
||
if (Self.ipDesk.el.style.display === "block") {
|
||
Self.ipDesk.el.style.display = "none";
|
||
Self.ipMob.el.style.display = "none";
|
||
} else {
|
||
Self.ipDesk.el.style.display = "block";
|
||
Self.ipMob.el.style.display = "block";
|
||
}
|
||
};
|
||
openSpeedtestShow.prototype.prePing = function () {
|
||
this.loader.fade("out", 500);
|
||
this.OpenSpeedtest.fade("in", 1000);
|
||
};
|
||
openSpeedtestShow.prototype.app = function () {
|
||
this.loader.fade("out", 500, this.ShowAppIntro());
|
||
};
|
||
openSpeedtestShow.prototype.ShowAppIntro = function () {
|
||
this.OpenSpeedtest.fade("in", 1000);
|
||
};
|
||
openSpeedtestShow.prototype.userInterface = function () {
|
||
var Self = this;
|
||
this.intro_Desk.fade("out", 1000);
|
||
this.intro_Mob.fade("out", 1000, this.ShowUI());
|
||
};
|
||
openSpeedtestShow.prototype.ShowUI = function () {
|
||
this.UI_Desk.fade("in", 1000);
|
||
this.UI_Mob.fade("in", 1000, uiLoaded);
|
||
function uiLoaded(argument) {
|
||
Status = "Loaded";
|
||
console.log("Update by MKTech. Email --\x3e [EMAIL_ADDRESS]");
|
||
}
|
||
};
|
||
openSpeedtestShow.prototype.Symbol = function (dir) {
|
||
if (dir == 0) {
|
||
this.downSymbolMob.el.style.display = "block";
|
||
this.downSymbolDesk.el.style.display = "block";
|
||
this.upSymbolMob.el.style.display = "none";
|
||
this.upSymbolDesk.el.style.display = "none";
|
||
}
|
||
if (dir == 1) {
|
||
this.downSymbolMob.el.style.display = "none";
|
||
this.downSymbolDesk.el.style.display = "none";
|
||
this.upSymbolMob.el.style.display = "block";
|
||
this.upSymbolDesk.el.style.display = "block";
|
||
}
|
||
if (dir == 2) {
|
||
this.downSymbolMob.el.style.display = "none";
|
||
this.downSymbolDesk.el.style.display = "none";
|
||
this.upSymbolMob.el.style.display = "none";
|
||
this.upSymbolDesk.el.style.display = "none";
|
||
}
|
||
};
|
||
openSpeedtestShow.prototype.Graph = function (speed, select) {
|
||
if (!("remove" in Element.prototype)) {
|
||
Element.prototype.remove = function () {
|
||
if (this.parentNode) {
|
||
this.parentNode.removeChild(this);
|
||
}
|
||
};
|
||
}
|
||
var Self = this;
|
||
var Remove;
|
||
if (select === 0) {
|
||
var Graphelement = this.graphc1.el;
|
||
Remove = "line";
|
||
this.graphMob2.el.style.display = "none";
|
||
this.graphMob1.el.style.display = "block";
|
||
} else {
|
||
Graphelement = this.graphc2.el;
|
||
Remove = "line2";
|
||
this.graphMob1.el.style.display = "none";
|
||
this.graphMob2.el.style.display = "block";
|
||
}
|
||
if (!isNaN(speed)) {
|
||
this.values.push(speed);
|
||
} else {
|
||
this.values.push("");
|
||
}
|
||
function calcMeasure() {
|
||
for (x = 0; x < Self.vSteps; x++) {
|
||
var measurement = Math.ceil(Self.maxValue / Self.vSteps * (x + 1));
|
||
Self.measurements.push(measurement);
|
||
}
|
||
Self.measurements.reverse();
|
||
}
|
||
function createChart(element, values) {
|
||
calcMaxValue();
|
||
calcPoints();
|
||
calcMeasure();
|
||
var removeLine = document.getElementsByClassName(Remove);
|
||
while (removeLine.length > 0) {
|
||
removeLine[0].remove();
|
||
}
|
||
Self.polygon = document.createElementNS("http://www.w3.org/2000/svg", "polygon");
|
||
Self.polygon.setAttribute("points", Self.points);
|
||
Self.polygon.setAttribute("class", Remove);
|
||
if (Self.values.length > 1) {
|
||
Graphelement.appendChild(Self.polygon);
|
||
}
|
||
}
|
||
function calcPoints() {
|
||
if (Self.values.length > 1) {
|
||
var points = "0," + Self.height + " ";
|
||
for (x = 0; x < Self.values.length; x++) {
|
||
var perc = Self.values[x] / Self.maxValue;
|
||
var steps = 130 / (Self.values.length - 1);
|
||
var point = (steps * x).toFixed(2) + "," + (Self.height - Self.height * perc).toFixed(2) + " ";
|
||
points += point;
|
||
}
|
||
points += "130," + Self.height;
|
||
Self.points = points;
|
||
}
|
||
}
|
||
var x;
|
||
function calcMaxValue() {
|
||
Self.maxValue = 0;
|
||
for (x = 0; x < Self.values.length; x++) {
|
||
if (Self.values[x] > Self.maxValue) {
|
||
Self.maxValue = Self.values[x];
|
||
}
|
||
}
|
||
Self.maxValue = Math.ceil(Self.maxValue);
|
||
}
|
||
if (speed > 0) {
|
||
createChart(Graphelement, speed);
|
||
}
|
||
};
|
||
openSpeedtestShow.prototype.progress = function (Switch, duration) {
|
||
var Self = this;
|
||
var Stop = duration;
|
||
var Stage = Switch;
|
||
var currTime = Date.now();
|
||
var chan2 = 0 - 400;
|
||
var interval = setInterval(function () {
|
||
var timeNow = (Date.now() - currTime) / 1000;
|
||
var toLeft = easeOutCubic(timeNow, 400, 400, Stop);
|
||
var toRight = easeOutCubic(timeNow, 400, chan2, Stop);
|
||
if (Stage) {
|
||
Self.progressStatus_Desk.el.style.strokeDashoffset = toLeft;
|
||
Self.progressStatus_Mob.el.style.strokeDashoffset = toLeft;
|
||
} else {
|
||
Self.progressStatus_Desk.el.style.strokeDashoffset = toRight;
|
||
Self.progressStatus_Mob.el.style.strokeDashoffset = toRight;
|
||
}
|
||
if (timeNow >= Stop) {
|
||
clearInterval(interval);
|
||
ProG = "done";
|
||
Self.progressStatus_Desk.el.style.strokeDashoffset = 800;
|
||
Self.progressStatus_Mob.el.style.strokeDashoffset = 800;
|
||
}
|
||
}, 14);
|
||
};
|
||
openSpeedtestShow.prototype.mainGaugeProgress = function (currentSpeed) {
|
||
var Self = this;
|
||
var speed = currentSpeed;
|
||
if (speed < 0) {
|
||
speed = 0;
|
||
}
|
||
var mainGaugeOffset = Self.getNonlinearDegree(speed);
|
||
if (currentSpeed > 0) {
|
||
this.mainGaugeBlue_Desk.el.style.strokeOpacity = 1;
|
||
this.mainGaugeWhite_Desk.el.style.strokeOpacity = 1;
|
||
this.mainGaugeBlue_Mob.el.style.strokeOpacity = 1;
|
||
this.mainGaugeWhite_Mob.el.style.strokeOpacity = 1;
|
||
this.mainGaugeBlue_Desk.el.style.strokeDashoffset = mainGaugeOffset;
|
||
this.mainGaugeWhite_Desk.el.style.strokeDashoffset = mainGaugeOffset == 0 ? 1 : mainGaugeOffset + 1;
|
||
this.mainGaugeBlue_Mob.el.style.strokeDashoffset = mainGaugeOffset;
|
||
this.mainGaugeWhite_Mob.el.style.strokeDashoffset = mainGaugeOffset == 0 ? 1 : mainGaugeOffset + 1;
|
||
}
|
||
if (mainGaugeOffset == 0 && speed > 1000) {
|
||
this.mainGaugeBlue_Mob.el.style.strokeDashoffset = mainGaugeOffset >= 681 ? 681 : mainGaugeOffset;
|
||
this.mainGaugeWhite_Mob.el.style.strokeDashoffset = mainGaugeOffset == 0 ? 1 : mainGaugeOffset + 1;
|
||
this.mainGaugeWhite_Desk.el.style.strokeDashoffset = mainGaugeOffset == 0 ? 1 : mainGaugeOffset + 1;
|
||
this.mainGaugeBlue_Desk.el.style.strokeDashoffset = mainGaugeOffset >= 681 ? 681 : mainGaugeOffset;
|
||
} else if (mainGaugeOffset == 0 && speed <= 0) {
|
||
this.mainGaugeBlue_Mob.el.style.strokeDashoffset = 681.1;
|
||
this.mainGaugeWhite_Mob.el.style.strokeDashoffset = 0.1;
|
||
this.mainGaugeWhite_Desk.el.style.strokeDashoffset = 0.1;
|
||
this.mainGaugeBlue_Desk.el.style.strokeDashoffset = 681.1;
|
||
}
|
||
};
|
||
openSpeedtestShow.prototype.showStatus = function (e) {
|
||
this.oDoLiveStatus.el.textContent = e;
|
||
};
|
||
openSpeedtestShow.prototype.ConnectionError = function () {
|
||
this.ConnectErrorMob.el.style.display = "block";
|
||
this.ConnectErrorDesk.el.style.display = "block";
|
||
};
|
||
openSpeedtestShow.prototype.uploadResult = function (upload) {
|
||
if (upload < 1) {
|
||
this.upRestxt.el.textContent = upload.toFixed(3);
|
||
}
|
||
if (upload >= 1 && upload < 9999) {
|
||
this.upRestxt.el.textContent = upload.toFixed(1);
|
||
}
|
||
if (upload >= 10000 && upload < 99999) {
|
||
this.upRestxt.el.textContent = upload.toFixed(1);
|
||
this.upRestxt.el.style.fontSize = "20px";
|
||
}
|
||
if (upload >= 100000) {
|
||
this.upRestxt.el.textContent = upload.toFixed(1);
|
||
this.upRestxt.el.style.fontSize = "18px";
|
||
}
|
||
};
|
||
openSpeedtestShow.prototype.pingResults = function (data, Display) {
|
||
var ShowData = data;
|
||
if (Display === "Ping") {
|
||
if (ShowData >= 1 && ShowData < 10000) {
|
||
this.pingResult.el.textContent = Math.floor(ShowData);
|
||
this.pingMobres.el.textContent = Math.floor(ShowData);
|
||
} else if (ShowData >= 0 && ShowData < 1) {
|
||
if (ShowData == 0) {
|
||
ShowData = 0;
|
||
}
|
||
this.pingResult.el.textContent = ShowData;
|
||
this.pingMobres.el.textContent = ShowData;
|
||
}
|
||
}
|
||
if (Display === "Error") {
|
||
this.oDoLiveSpeed.el.textContent = ShowData;
|
||
}
|
||
};
|
||
openSpeedtestShow.prototype.downloadResult = function (download) {
|
||
if (download < 1) {
|
||
this.downResult.el.textContent = download.toFixed(3);
|
||
}
|
||
if (download >= 1 && download < 9999) {
|
||
this.downResult.el.textContent = download.toFixed(1);
|
||
}
|
||
if (download >= 10000 && download < 99999) {
|
||
this.downResult.el.textContent = download.toFixed(1);
|
||
this.downResult.el.style.fontSize = "20px";
|
||
}
|
||
if (download >= 100000) {
|
||
this.downResult.el.textContent = download.toFixed(1);
|
||
this.downResult.el.style.fontSize = "18px";
|
||
}
|
||
};
|
||
openSpeedtestShow.prototype.jitterResult = function (data, Display) {
|
||
var ShowData = data;
|
||
if (Display === "Jitter") {
|
||
if (ShowData >= 1 && ShowData < 10000) {
|
||
this.jitterDesk.el.textContent = Math.floor(ShowData);
|
||
if (ShowData >= 1 && ShowData < 100) {
|
||
this.JitterResultMon.el.textContent = Math.floor(ShowData);
|
||
}
|
||
if (ShowData >= 100) {
|
||
var kData = (ShowData / 1000).toFixed(1);
|
||
this.JitterResultMon.el.textContent = kData + "k";
|
||
}
|
||
} else if (ShowData >= 0 && ShowData < 1) {
|
||
if (ShowData == 0) {
|
||
ShowData = 0;
|
||
}
|
||
this.jitterDesk.el.textContent = ShowData;
|
||
this.JitterResultMon.el.textContent = ShowData;
|
||
}
|
||
}
|
||
};
|
||
openSpeedtestShow.prototype.LiveSpeed = function (data, Display) {
|
||
var ShowData = data;
|
||
if (Display === "countDown") {
|
||
var speed = ShowData.toFixed(0);
|
||
this.oDoLiveSpeed.el.textContent = speed;
|
||
return;
|
||
}
|
||
if (Display === "speedToZero") {
|
||
if (typeof ShowData == "number") {
|
||
ShowData = ShowData.toFixed(1);
|
||
}
|
||
if (ShowData <= 0) {
|
||
ShowData = 0;
|
||
}
|
||
this.oDoLiveSpeed.el.textContent = ShowData;
|
||
this.oDoTopSpeed.el.textContent = "1000+";
|
||
this.oDoTopSpeed.el.style.fontSize = "16.9px";
|
||
this.oDoTopSpeed.el.style.fill = "gray";
|
||
return;
|
||
}
|
||
if (Display === "Ping") {
|
||
if (ShowData >= 1 && ShowData < 10000) {
|
||
this.oDoLiveSpeed.el.textContent = Math.floor(ShowData);
|
||
} else if (ShowData >= 0 && ShowData < 1) {
|
||
if (ShowData == 0) {
|
||
ShowData = 0;
|
||
}
|
||
this.oDoLiveSpeed.el.textContent = ShowData;
|
||
}
|
||
} else {
|
||
if (ShowData == 0) {
|
||
var speed = ShowData.toFixed(0);
|
||
this.oDoLiveSpeed.el.textContent = speed;
|
||
}
|
||
if (ShowData <= 1 && ShowData > 0) {
|
||
var speed = ShowData.toFixed(3);
|
||
this.oDoLiveSpeed.el.textContent = speed;
|
||
}
|
||
if (ShowData > 1) {
|
||
var speed = ShowData.toFixed(1);
|
||
this.oDoLiveSpeed.el.textContent = speed;
|
||
}
|
||
if (ShowData <= 1000) {
|
||
this.oDoTopSpeed.el.textContent = "1000+";
|
||
this.oDoTopSpeed.el.style.fontSize = "16.9px";
|
||
this.oDoTopSpeed.el.style.fill = "gray";
|
||
}
|
||
if (ShowData >= 1010) {
|
||
this.oDoTopSpeed.el.textContent = Math.floor(ShowData / 1010) * 1000 + "+";
|
||
this.oDoTopSpeed.el.style.fill = "gray";
|
||
this.oDoTopSpeed.el.style.fontSize = "17.2px";
|
||
}
|
||
}
|
||
};
|
||
openSpeedtestShow.prototype.GaugeProgresstoZero = function (currentSpeed, status) {
|
||
var speed = currentSpeed;
|
||
var Self = this;
|
||
var duration = 3;
|
||
if (speed >= 0) {
|
||
var time = Date.now();
|
||
var SpeedtoZero = 0 - speed;
|
||
var interval = setInterval(function () {
|
||
var timeNow = (Date.now() - time) / 1000;
|
||
var speedToZero = easeOutQuint(timeNow, speed, SpeedtoZero, duration);
|
||
Self.LiveSpeed(speedToZero, "speedToZero");
|
||
Self.mainGaugeProgress(speedToZero);
|
||
if (timeNow >= duration || speedToZero <= 0) {
|
||
clearInterval(interval);
|
||
Self.LiveSpeed(0, "speedToZero");
|
||
Self.mainGaugeProgress(0);
|
||
Status = status;
|
||
}
|
||
}, 16);
|
||
}
|
||
};
|
||
openSpeedtestShow.prototype.getNonlinearDegree = function (mega_bps) {
|
||
var i = 0;
|
||
if (0 == mega_bps || mega_bps <= 0 || isNaN(mega_bps)) {
|
||
return 0;
|
||
}
|
||
while (i < this.scale.length) {
|
||
if (mega_bps > this.scale[i].value) {
|
||
i++;
|
||
} else {
|
||
return this.scale[i - 1].degree + (mega_bps - this.scale[i - 1].value) * (this.scale[i].degree - this.scale[i - 1].degree) / (this.scale[i].value - this.scale[i - 1].value);
|
||
}
|
||
}
|
||
return this.scale[this.scale.length - 1].degree;
|
||
};
|
||
var openSpeedtestGet = function () {
|
||
this.OverAllTimeAvg = window.performance.now();
|
||
this.SpeedSamples = [];
|
||
this.FinalSpeed;
|
||
};
|
||
openSpeedtestGet.prototype.reset = function () {
|
||
this.OverAllTimeAvg = window.performance.now();
|
||
this.SpeedSamples = [];
|
||
this.FinalSpeed = 0;
|
||
};
|
||
openSpeedtestGet.prototype.ArraySum = function (Arr) {
|
||
var array = Arr;
|
||
if (array) {
|
||
var sum = array.reduce(function (A, B) {
|
||
if (typeof A === "number" && typeof B === "number") {
|
||
return A + B;
|
||
}
|
||
}, 0);
|
||
return sum;
|
||
} else {
|
||
return 0;
|
||
}
|
||
};
|
||
openSpeedtestGet.prototype.AvgSpeed = function (Livespeed, Start, duration) {
|
||
var Self = this;
|
||
this.timeNow = (window.performance.now() - this.OverAllTimeAvg) / 1000;
|
||
this.FinalSpeed;
|
||
var StartRecoding = Start;
|
||
StartRecoding = duration - StartRecoding;
|
||
if (this.timeNow >= StartRecoding) {
|
||
if (Livespeed > 0) {
|
||
this.SpeedSamples.push(Livespeed);
|
||
}
|
||
Self.FinalSpeed = Self.ArraySum(Self.SpeedSamples) / Self.SpeedSamples.length;
|
||
}
|
||
return Self.FinalSpeed;
|
||
};
|
||
openSpeedtestGet.prototype.uRandom = function (size, callback) {
|
||
var size = size;
|
||
var randomValue = new Uint32Array(262144);
|
||
function getRandom() {
|
||
var n = randomValue.length;
|
||
for (var i = 0; i < n; i++) {
|
||
randomValue[i] = Math.random() * 4294967296;
|
||
}
|
||
return randomValue;
|
||
}
|
||
var randomData = [];
|
||
var genData = function (dataSize) {
|
||
var dataSize = dataSize;
|
||
for (var i = 0; i < dataSize; i++) {
|
||
randomData[i] = getRandom();
|
||
}
|
||
return randomData;
|
||
};
|
||
return new Blob(genData(size), { type: "application/octet-stream" }, Callback(callback));
|
||
};
|
||
openSpeedtestGet.prototype.addEvt = function (o, e, f) {
|
||
o.addEventListener(e, f);
|
||
};
|
||
openSpeedtestGet.prototype.remEvt = function (o, e, f) {
|
||
o.removeEventListener(e, f);
|
||
};
|
||
var openSpeedtestEngine = function () {
|
||
var Get = new openSpeedtestGet();
|
||
var Show = new openSpeedtestShow();
|
||
Show.app();
|
||
var SendData;
|
||
var myhostName = location.hostname;
|
||
var key;
|
||
var TestServerip;
|
||
var downloadSpeed;
|
||
var uploadSpeed;
|
||
var dataUsedfordl;
|
||
var dataUsedforul;
|
||
var pingEstimate;
|
||
var jitterEstimate;
|
||
var logData;
|
||
var return_data;
|
||
var ReQ = [];
|
||
var StartTime = [];
|
||
var CurrentTime = [];
|
||
var LiveSpeedArr;
|
||
var dLoaded = 0;
|
||
var uLoaded = 0;
|
||
var currentSpeed = 0;
|
||
var uploadTimeing;
|
||
var downloadTimeing;
|
||
var downloadTime;
|
||
var uploadTime;
|
||
var saveTestData;
|
||
var stop = 0;
|
||
function reSett() {
|
||
StartTime = 0;
|
||
CurrentTime = 0;
|
||
LiveSpeedArr = 0;
|
||
currentSpeed = 0;
|
||
}
|
||
var userAgentString;
|
||
if (window.navigator.userAgent) {
|
||
userAgentString = window.navigator.userAgent;
|
||
} else {
|
||
userAgentString = "Not Found";
|
||
}
|
||
var ulFinal = ulDuration * 0.6;
|
||
var dlFinal = dlDuration * 0.6;
|
||
function setFinal() {
|
||
if (ulDuration * 0.6 >= 7) {
|
||
ulFinal = 7;
|
||
}
|
||
if (dlDuration * 0.6 >= 7) {
|
||
dlFinal = 7;
|
||
}
|
||
}
|
||
setFinal();
|
||
var launch = true;
|
||
var init = true;
|
||
Get.addEvt(Show.settingsMob.el, "click", ShowIP);
|
||
Get.addEvt(Show.settingsDesk.el, "click", ShowIP);
|
||
Get.addEvt(Show.startButtonDesk.el, "click", runTasks);
|
||
Get.addEvt(Show.startButtonMob.el, "click", runTasks);
|
||
Get.addEvt(document, "keypress", hiEnter);
|
||
var addEvent = true;
|
||
var getParams = function (url) {
|
||
var params = {};
|
||
var parser = document.createElement("a");
|
||
parser.href = url;
|
||
var query = parser.search.substring(1);
|
||
var vars = query.split("&");
|
||
for (var i = 0; i < vars.length; i++) {
|
||
var pair = vars[i].split("=");
|
||
params[pair[0]] = decodeURIComponent(pair[1]);
|
||
}
|
||
return params;
|
||
};
|
||
var getCommand = getParams(window.location.href.toLowerCase());
|
||
if (setPingSamples) {
|
||
if (typeof getCommand.ping === "string" || typeof getCommand.p === "string") {
|
||
var setPing;
|
||
if (typeof getCommand.ping !== "undefined") {
|
||
setPing = getCommand.ping;
|
||
} else if (typeof getCommand.p !== "undefined") {
|
||
setPing = getCommand.p;
|
||
}
|
||
if (setPing > 0) {
|
||
pingSamples = setPing;
|
||
pingSamples = setPing;
|
||
}
|
||
}
|
||
}
|
||
if (setPingTimeout) {
|
||
if (typeof getCommand.out === "string" || typeof getCommand.o === "string") {
|
||
var setOut;
|
||
if (typeof getCommand.out !== "undefined") {
|
||
setOut = getCommand.out;
|
||
} else if (typeof getCommand.o !== "undefined") {
|
||
setOut = getCommand.o;
|
||
}
|
||
if (setOut > 1) {
|
||
pingTimeOut = setOut;
|
||
pingTimeOut = setOut;
|
||
}
|
||
}
|
||
}
|
||
if (setHTTPReq) {
|
||
if (typeof getCommand.xhr === "string" || typeof getCommand.x === "string") {
|
||
var setThreads;
|
||
if (typeof getCommand.xhr !== "undefined") {
|
||
setThreads = getCommand.xhr;
|
||
} else if (typeof getCommand.x !== "undefined") {
|
||
setThreads = getCommand.x;
|
||
}
|
||
if (setThreads > 0 && setThreads <= 32) {
|
||
dlThreads = setThreads;
|
||
ulThreads = setThreads;
|
||
}
|
||
}
|
||
}
|
||
function isValidHttpUrl(str) {
|
||
var regex = /(?:https?):\/\/(\w+:?\w*)?(\S+)(:\d+)?(\/|\/([\w#!:.?+=&%!\-\/]))?/;
|
||
if (!regex.test(str)) {
|
||
return false;
|
||
} else {
|
||
return true;
|
||
}
|
||
}
|
||
if (selectServer) {
|
||
if (typeof getCommand.host === "string" || typeof getCommand.h === "string") {
|
||
var severAddress;
|
||
if (typeof getCommand.host !== "undefined") {
|
||
severAddress = getCommand.host;
|
||
} else if (typeof getCommand.h !== "undefined") {
|
||
severAddress = getCommand.h;
|
||
}
|
||
if (isValidHttpUrl(severAddress)) {
|
||
openSpeedTestServerList = [{ ServerName: "Home", Download: severAddress + "/downloading", Upload: severAddress + "/upload", ServerIcon: "DefaultIcon", },];
|
||
}
|
||
}
|
||
}
|
||
var custom = parseInt(getCommand.stress);
|
||
var customS = parseInt(getCommand.s);
|
||
var runStress;
|
||
var runStressCustom;
|
||
if (typeof getCommand.stress === "string") {
|
||
runStress = getCommand.stress;
|
||
runStressCustom = custom;
|
||
} else if (typeof getCommand.s === "string") {
|
||
runStress = getCommand.s;
|
||
runStressCustom = customS;
|
||
}
|
||
if (runStress && stressTest) {
|
||
if (runStress === "low" || runStress === "l") {
|
||
dlDuration = 300;
|
||
ulDuration = 300;
|
||
}
|
||
if (runStress === "medium" || runStress === "m") {
|
||
dlDuration = 600;
|
||
ulDuration = 600;
|
||
}
|
||
if (runStress === "high" || runStress === "h") {
|
||
dlDuration = 900;
|
||
ulDuration = 900;
|
||
}
|
||
if (runStress === "veryhigh" || runStress === "v") {
|
||
dlDuration = 1800;
|
||
ulDuration = 1800;
|
||
}
|
||
if (runStress === "extreme" || runStress === "e") {
|
||
dlDuration = 3600;
|
||
ulDuration = 3600;
|
||
}
|
||
if (runStress === "day" || runStress === "d") {
|
||
dlDuration = 86400;
|
||
ulDuration = 86400;
|
||
}
|
||
if (runStress === "year" || runStress === "y") {
|
||
dlDuration = 31557600;
|
||
ulDuration = 31557600;
|
||
}
|
||
if (custom > 12 || customS > 12) {
|
||
dlDuration = runStressCustom;
|
||
ulDuration = runStressCustom;
|
||
}
|
||
}
|
||
var overheadClean = parseInt(getCommand.clean);
|
||
var overheadCleanC = parseInt(getCommand.c);
|
||
var customOverHeadValue = 1;
|
||
if (overheadClean) {
|
||
customOverHeadValue = overheadClean;
|
||
} else if (overheadCleanC) {
|
||
customOverHeadValue = overheadCleanC;
|
||
}
|
||
if (enableClean) {
|
||
if (typeof getCommand.clean === "string" || typeof getCommand.c === "string") {
|
||
if (overheadClean >= 1 || overheadCleanC >= 1) {
|
||
if (overheadClean < 5 || overheadCleanC < 5) {
|
||
upAdjust = 1 + customOverHeadValue / 100;
|
||
dlAdjust = 1 + customOverHeadValue / 100;
|
||
}
|
||
} else {
|
||
upAdjust = 1;
|
||
dlAdjust = 1;
|
||
}
|
||
}
|
||
}
|
||
var OpenSpeedTestRun = parseInt(getCommand.run);
|
||
var OpenSpeedTestRunR = parseInt(getCommand.r);
|
||
var OpenSpeedTestStart;
|
||
if (enableRun) {
|
||
if (typeof getCommand.run === "string" || typeof getCommand.r === "string") {
|
||
if (OpenSpeedTestRun > 0) {
|
||
OpenSpeedTestStart = OpenSpeedTestRun;
|
||
} else if (OpenSpeedTestRunR > 0) {
|
||
OpenSpeedTestStart = OpenSpeedTestRunR;
|
||
} else {
|
||
OpenSpeedTestStart = 0;
|
||
}
|
||
}
|
||
}
|
||
if (OpenSpeedTestStart >= 0) {
|
||
if (launch) {
|
||
runTasks();
|
||
}
|
||
}
|
||
var runTest = getCommand.test;
|
||
var runTestT = getCommand.t;
|
||
var SelectTest = false;
|
||
if (selectTest) {
|
||
if (typeof runTest === "string" || typeof runTestT === "string") {
|
||
var runTestC;
|
||
if (runTest) {
|
||
runTestC = runTest;
|
||
SelectTest = runTest;
|
||
} else if (runTestT) {
|
||
runTestC = runTestT;
|
||
SelectTest = runTestT;
|
||
}
|
||
if (runTestC === "download" || runTestC === "d") {
|
||
uploadSpeed = 0;
|
||
dataUsedforul = 0;
|
||
SelectTest = "Download";
|
||
if (launch) {
|
||
runTasks();
|
||
}
|
||
} else if (runTestC === "upload" || runTestC === "u") {
|
||
downloadSpeed = 0;
|
||
dataUsedfordl = 0;
|
||
SelectTest = "Upload";
|
||
stop = 1;
|
||
if (launch) {
|
||
runTasks();
|
||
}
|
||
} else if (runTestC === "ping" || runTestC === "p") {
|
||
uploadSpeed = 0;
|
||
dataUsedforul = 0;
|
||
downloadSpeed = 0;
|
||
dataUsedfordl = 0;
|
||
SelectTest = "Ping";
|
||
if (launch) {
|
||
runTasks();
|
||
}
|
||
} else {
|
||
SelectTest = false;
|
||
}
|
||
}
|
||
}
|
||
var Startit = 0;
|
||
function removeEvts() {
|
||
Get.remEvt(Show.settingsMob.el, "click", ShowIP);
|
||
Get.remEvt(Show.settingsDesk.el, "click", ShowIP);
|
||
Get.remEvt(Show.startButtonDesk.el, "click", runTasks);
|
||
Get.remEvt(Show.startButtonMob.el, "click", runTasks);
|
||
Get.remEvt(document, "keypress", hiEnter);
|
||
}
|
||
var requestIP = false;
|
||
function ShowIP() {
|
||
if (requestIP) {
|
||
Show.YourIP.el.textContent = "Please wait..";
|
||
ServerConnect(7);
|
||
requestIP = false;
|
||
}
|
||
Show.ip();
|
||
}
|
||
function runTasks() {
|
||
if (addEvent) {
|
||
removeEvts();
|
||
addEvent = false;
|
||
}
|
||
if (OpenSpeedTestStart >= 0) {
|
||
launch = false;
|
||
Show.userInterface();
|
||
init = false;
|
||
var AutoTme = Math.ceil(Math.abs(OpenSpeedTestStart));
|
||
Show.showStatus("Automatic Test Starts in ...");
|
||
var autoTest = setInterval(countDownF, 1000);
|
||
}
|
||
function countDownF() {
|
||
if (AutoTme >= 1) {
|
||
AutoTme = AutoTme - 1;
|
||
Show.LiveSpeed(AutoTme, "countDown");
|
||
} else {
|
||
if (AutoTme <= 0) {
|
||
clearInterval(autoTest);
|
||
launch = true;
|
||
OpenSpeedTestStart = undefined;
|
||
runTasks();
|
||
}
|
||
}
|
||
}
|
||
if (openSpeedTestServerList === "fetch" && launch === true) {
|
||
launch = false;
|
||
Show.showStatus("Fetching Server Info..");
|
||
ServerConnect(6);
|
||
}
|
||
if (launch === true) {
|
||
if (SelectTest === "Ping") {
|
||
testRun();
|
||
} else if (SelectTest === "Download") {
|
||
testRun();
|
||
} else if (SelectTest === "Upload") {
|
||
testRun();
|
||
} else if (SelectTest === false) {
|
||
testRun();
|
||
}
|
||
}
|
||
}
|
||
var osttm = "\u2122";
|
||
var myname = "OpenSpeedTest";
|
||
var com = ".com";
|
||
var ost = "Megakreasitech" + osttm;
|
||
function hiEnter(e) {
|
||
if (e.key === "Enter") {
|
||
runTasks();
|
||
}
|
||
}
|
||
var showResult = 0;
|
||
if (openChannel === "web") {
|
||
showResult = webRe;
|
||
requestIP = true;
|
||
}
|
||
if (openChannel === "widget") {
|
||
showResult = widgetRe;
|
||
requestIP = true;
|
||
}
|
||
if (openChannel === "selfwidget") {
|
||
showResult = widgetRe;
|
||
TestServerip = domainx;
|
||
myhostName = TestServerip;
|
||
}
|
||
if (openChannel === "dev") {
|
||
}
|
||
function testRun() {
|
||
if (init) {
|
||
Show.userInterface();
|
||
init = false;
|
||
}
|
||
OpenSpeedtest();
|
||
}
|
||
function OpenSpeedtest() {
|
||
if (openChannel === "widget" || openChannel === "web") {
|
||
ServerConnect(1);
|
||
}
|
||
function readyToUP() {
|
||
uploadTime = window.performance.now();
|
||
upReq();
|
||
}
|
||
var Engine = setInterval(function () {
|
||
if (Status === "Loaded") {
|
||
Status = "busy";
|
||
sendPing(0);
|
||
}
|
||
if (Status === "Ping") {
|
||
Status = "busy";
|
||
Show.showStatus("Milliseconds");
|
||
}
|
||
if (Status === "Download") {
|
||
Show.showStatus("Initializing..");
|
||
Get.reset();
|
||
reSett();
|
||
Show.reset();
|
||
downloadTime = window.performance.now();
|
||
downReq();
|
||
Status = "initDown";
|
||
}
|
||
if (Status === "Downloading") {
|
||
Show.Symbol(0);
|
||
if (Startit == 0) {
|
||
Startit = 1;
|
||
Show.showStatus("Testing download speed..");
|
||
var extraTime = (window.performance.now() - downloadTime) / 1000;
|
||
dReset = extraTime;
|
||
Show.progress(1, dlDuration + 2.5);
|
||
dlDuration += extraTime;
|
||
}
|
||
downloadTimeing = (window.performance.now() - downloadTime) / 1000;
|
||
reportCurrentSpeed("dl");
|
||
Show.showStatus("Mbps download");
|
||
Show.mainGaugeProgress(currentSpeed);
|
||
Show.LiveSpeed(currentSpeed);
|
||
Show.Graph(currentSpeed, 0);
|
||
downloadSpeed = Get.AvgSpeed(currentSpeed, dlFinal, dlDuration);
|
||
if (downloadTimeing >= dlDuration && ProG == "done") {
|
||
if (SelectTest) {
|
||
Show.GaugeProgresstoZero(currentSpeed, "SendR");
|
||
Show.showStatus("All done");
|
||
Show.Symbol(2);
|
||
} else {
|
||
Show.GaugeProgresstoZero(currentSpeed, "Upload");
|
||
}
|
||
Show.downloadResult(downloadSpeed);
|
||
dataUsedfordl = dLoaded;
|
||
stop = 1;
|
||
Status = "busy";
|
||
reSett();
|
||
Get.reset();
|
||
}
|
||
}
|
||
if (Status == "Upload") {
|
||
if (stop === 1) {
|
||
Show.Symbol(1);
|
||
Status = "initup";
|
||
Show.showStatus("Initializing..");
|
||
Show.LiveSpeed("...", "speedToZero");
|
||
SendData = Get.uRandom(ulDataSize, readyToUP);
|
||
if (SelectTest) {
|
||
Startit = 1;
|
||
}
|
||
}
|
||
}
|
||
if (Status === "Uploading") {
|
||
if (Startit == 1) {
|
||
Startit = 2;
|
||
Show.showStatus("Testing upload speed..");
|
||
currentSpeed = 0;
|
||
Get.reset();
|
||
Show.reset();
|
||
var extraUTime = (window.performance.now() - uploadTime) / 1000;
|
||
uReset = extraUTime;
|
||
Show.progress(false, ulDuration + 2.5);
|
||
ulDuration += extraUTime;
|
||
}
|
||
Show.showStatus("Mbps upload");
|
||
uploadTimeing = (window.performance.now() - uploadTime) / 1000;
|
||
reportCurrentSpeed("up");
|
||
Show.mainGaugeProgress(currentSpeed);
|
||
Show.LiveSpeed(currentSpeed);
|
||
Show.Graph(currentSpeed, 1);
|
||
uploadSpeed = Get.AvgSpeed(currentSpeed, ulFinal, ulDuration);
|
||
if (uploadTimeing >= ulDuration && stop == 1) {
|
||
dataUsedforul = uLoaded;
|
||
Show.uploadResult(uploadSpeed);
|
||
Show.GaugeProgresstoZero(currentSpeed, "SendR");
|
||
SendData = undefined;
|
||
Show.showStatus("All done");
|
||
Show.Symbol(2);
|
||
Status = "busy";
|
||
stop = 0;
|
||
}
|
||
}
|
||
if (Status === "Error") {
|
||
Show.showStatus("Check your network connection status.");
|
||
Show.ConnectionError();
|
||
Status = "busy";
|
||
clearInterval(Engine);
|
||
var dummyElement = document.createElement("div");
|
||
dummyElement.innerHTML = '<a xlink:href="https://megakreasitech.com/FAQ.php?ref=NetworkError" style="cursor: pointer" target="_blank"></a>';
|
||
var htmlAnchorElement = dummyElement.querySelector("a");
|
||
Show.oDoLiveSpeed.el.textContent = "Network Error";
|
||
var circleSVG = document.getElementById("oDoLiveSpeed");
|
||
htmlAnchorElement.innerHTML = circleSVG.innerHTML;
|
||
circleSVG.innerHTML = dummyElement.innerHTML;
|
||
}
|
||
if (Status === "SendR") {
|
||
Show.showStatus("All done");
|
||
Show.oDoLiveSpeed.el.textContent = ost;
|
||
if (location.hostname != myname.toLowerCase() + com) {
|
||
saveTestData = "https://" + myname.toLowerCase() + com + "/results/show.php?" + "&d=" + downloadSpeed.toFixed(3) + "&u=" + uploadSpeed.toFixed(3) + "&p=" + pingEstimate + "&j=" + jitterEstimate + "&dd=" + (dataUsedfordl / 1048576).toFixed(3) + "&ud=" + (dataUsedforul / 1048576).toFixed(3) + "&ua=" + userAgentString;
|
||
saveTestData = encodeURI(saveTestData);
|
||
// var circleSVG2 = document.getElementById("resultsData");
|
||
// circleSVG2.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", saveTestData);
|
||
// circleSVG2.setAttribute("target", "_blank");
|
||
if (saveData) {
|
||
ServerConnect(5);
|
||
}
|
||
} else {
|
||
ServerConnect(3);
|
||
}
|
||
Status = "busy";
|
||
clearInterval(Engine);
|
||
}
|
||
}, 100);
|
||
}
|
||
function downReq() {
|
||
for (var i = 0; i < dlThreads; i++) {
|
||
setTimeout(function (i) {
|
||
SendReQ(i);
|
||
}, dlDelay * i, i);
|
||
}
|
||
}
|
||
function upReq() {
|
||
for (var i = 0; i < ulThreads; i++) {
|
||
setTimeout(function (i) {
|
||
SendUpReq(i);
|
||
}, ulDelay * i, i);
|
||
}
|
||
}
|
||
var dLoad = 0;
|
||
var dDiff = 0;
|
||
var dTotal = 0;
|
||
var dtLoad = 0;
|
||
var dtDiff = 0;
|
||
var dtTotal = 0;
|
||
var dRest = 0;
|
||
var dReset;
|
||
var uReset;
|
||
var uLoad = 0;
|
||
var uDiff = 0;
|
||
var uTotal = 0;
|
||
var utLoad = 0;
|
||
var utDiff = 0;
|
||
var utTotal = 0;
|
||
var uRest = 0;
|
||
var dualReset;
|
||
var neXT = dlDuration * 1000 - 6000;
|
||
var dualupReset;
|
||
var neXTUp = ulDuration * 1000 - 6000;
|
||
function reportCurrentSpeed(now) {
|
||
if (now === "dl") {
|
||
var dTime = downloadTimeing * 1000;
|
||
if (dTime > dReset * 1000 + dlFinal / 2 * 1000 && dRest === 0) {
|
||
dRest = 1;
|
||
dtTotal = dtTotal * 0.01;
|
||
dTotal = dTotal * 0.01;
|
||
dualReset = dTime + 10000;
|
||
}
|
||
if (dTime >= dualReset && dualReset < neXT) {
|
||
dualReset += 10000;
|
||
dtTotal = dtTotal * 0.01;
|
||
dTotal = dTotal * 0.01;
|
||
}
|
||
dLoad = dLoaded <= 0 ? 0 : dLoaded - dDiff;
|
||
dDiff = dLoaded;
|
||
dTotal += dLoad;
|
||
dtLoad = dtDiff = 0 ? 0 : dTime - dtDiff;
|
||
dtDiff = dTime;
|
||
dtTotal += dtLoad;
|
||
if (dTotal > 0) {
|
||
LiveSpeedArr = dTotal / dtTotal / 125 * upAdjust;
|
||
currentSpeed = LiveSpeedArr;
|
||
}
|
||
}
|
||
if (now === "up") {
|
||
var Tym = uploadTimeing * 1000;
|
||
if (Tym > uReset * 1000 + ulFinal / 2 * 1000 && uRest === 0) {
|
||
uRest = 1;
|
||
utTotal = utTotal * 0.1;
|
||
uTotal = uTotal * 0.1;
|
||
dualupReset = Tym + 10000;
|
||
}
|
||
if (Tym >= dualupReset && dualupReset < neXTUp) {
|
||
dualupReset += 10000;
|
||
utTotal = utTotal * 0.1;
|
||
uTotal = uTotal * 0.1;
|
||
}
|
||
uLoad = uLoaded <= 0 ? 0 : uLoaded - uDiff;
|
||
uDiff = uLoaded;
|
||
uTotal += uLoad;
|
||
utLoad = utDiff = 0 ? 0 : Tym - utDiff;
|
||
utDiff = Tym;
|
||
utTotal += utLoad;
|
||
if (uTotal > 0) {
|
||
LiveSpeedArr = uTotal / utTotal / 125 * upAdjust;
|
||
currentSpeed = LiveSpeedArr;
|
||
}
|
||
}
|
||
}
|
||
function SendReQ(i) {
|
||
var lastLoaded = 0;
|
||
var OST = new XMLHttpRequest();
|
||
ReQ[i] = OST;
|
||
ReQ[i].open("GET", fianlPingServer.Download + "?n=" + Math.random(), true);
|
||
ReQ[i].onprogress = function (e) {
|
||
if (stop === 1) {
|
||
ReQ[i].abort();
|
||
ReQ[i] = null;
|
||
ReQ[i] = undefined;
|
||
delete ReQ[i];
|
||
return false;
|
||
}
|
||
if (Status == "initDown") {
|
||
Status = "Downloading";
|
||
}
|
||
var eLoaded = e.loaded <= 0 ? 0 : e.loaded - lastLoaded;
|
||
if (isNaN(eLoaded) || !isFinite(eLoaded) || eLoaded < 0) {
|
||
return false;
|
||
}
|
||
dLoaded += eLoaded;
|
||
lastLoaded = e.loaded;
|
||
};
|
||
ReQ[i].onload = function (e) {
|
||
if (lastLoaded === 0) {
|
||
dLoaded += e.total;
|
||
}
|
||
if (Status == "initDown") {
|
||
Status = "Downloading";
|
||
}
|
||
if (ReQ[i]) {
|
||
ReQ[i].abort();
|
||
ReQ[i] = null;
|
||
ReQ[i] = undefined;
|
||
delete ReQ[i];
|
||
}
|
||
if (stop === 0) {
|
||
SendReQ(i);
|
||
}
|
||
};
|
||
ReQ[i].onerror = function (e) {
|
||
if (stop === 0) {
|
||
SendReQ(i);
|
||
}
|
||
};
|
||
ReQ[i].responseType = "arraybuffer";
|
||
ReQ[i].send();
|
||
}
|
||
var uReQ = [];
|
||
function SendUpReq(i) {
|
||
var lastULoaded = 0;
|
||
var OST = new XMLHttpRequest();
|
||
uReQ[i] = OST;
|
||
uReQ[i].open("POST", fianlPingServer.Upload + "?n=" + Math.random(), true);
|
||
uReQ[i].upload.onprogress = function (e) {
|
||
if (Status == "initup" && some === undefined) {
|
||
var some;
|
||
Status = "Uploading";
|
||
}
|
||
if (uploadTimeing >= ulDuration) {
|
||
uReQ[i].abort();
|
||
uReQ[i] = null;
|
||
uReQ[i] = undefined;
|
||
delete uReQ[i];
|
||
return false;
|
||
}
|
||
var eLoaded = e.loaded <= 0 ? 0 : e.loaded - lastULoaded;
|
||
if (isNaN(eLoaded) || !isFinite(eLoaded) || eLoaded < 0) {
|
||
return false;
|
||
}
|
||
uLoaded += eLoaded;
|
||
lastULoaded = e.loaded;
|
||
};
|
||
uReQ[i].onload = function () {
|
||
if (lastULoaded === 0) {
|
||
uLoaded += ulDataSize * 1048576;
|
||
if (uploadTimeing >= ulDuration) {
|
||
uReQ[i].abort();
|
||
uReQ[i] = null;
|
||
uReQ[i] = undefined;
|
||
delete uReQ[i];
|
||
return false;
|
||
}
|
||
}
|
||
if (Status == "initup" && some === undefined) {
|
||
var some;
|
||
Status = "Uploading";
|
||
}
|
||
if (uReQ[i]) {
|
||
uReQ[i].abort();
|
||
uReQ[i] = null;
|
||
uReQ[i] = undefined;
|
||
delete uReQ[i];
|
||
}
|
||
if (stop === 1) {
|
||
SendUpReq(i);
|
||
}
|
||
};
|
||
uReQ[i].onerror = function (e) {
|
||
if (uploadTimeing <= ulDuration) {
|
||
SendUpReq(i);
|
||
}
|
||
};
|
||
uReQ[i].setRequestHeader("Content-Type", "application/octet-stream");
|
||
if (i > 0 && uLoaded <= 17000) {
|
||
} else {
|
||
uReQ[i].send(SendData);
|
||
}
|
||
}
|
||
function sendPing() {
|
||
readServerList();
|
||
}
|
||
var fianlPingServer;
|
||
var statusPing;
|
||
var statusPingFinal;
|
||
var statusJitter;
|
||
var statusJitterFinal;
|
||
var statusPingTest;
|
||
var pingSendStatus = -1;
|
||
var finalPing = [];
|
||
var pingServer = [];
|
||
var finalJitter = [];
|
||
var pingSendLength = openSpeedTestServerList.length;
|
||
function readServerList() {
|
||
pingSendLength = openSpeedTestServerList.length;
|
||
Status = "Ping";
|
||
performance.clearResourceTimings();
|
||
if (pingSendStatus < pingSendLength - 1) {
|
||
pingSendStatus++;
|
||
if (statusPingTest != "Stop") {
|
||
sendPingRequest(openSpeedTestServerList[pingSendStatus], readServerList);
|
||
}
|
||
} else {
|
||
if (pingServer.length >= 1) {
|
||
var finalLeastPingResult = Math.min.apply(Math, finalPing);
|
||
var finalLeastPingResultIndex = finalPing.indexOf(finalLeastPingResult);
|
||
fianlPingServer = pingServer[finalLeastPingResultIndex];
|
||
statusPingFinal = finalLeastPingResult;
|
||
statusJitterFinal = finalJitter[finalLeastPingResultIndex];
|
||
statusPingTest = "Busy";
|
||
Show.LiveSpeed(statusPingFinal, "Ping");
|
||
Show.pingResults(statusPingFinal, "Ping");
|
||
Show.jitterResult(statusJitterFinal, "Jitter");
|
||
pingEstimate = statusPingFinal;
|
||
jitterEstimate = statusJitterFinal;
|
||
if (SelectTest) {
|
||
if (SelectTest == "Ping") {
|
||
Status = "SendR";
|
||
} else {
|
||
Status = SelectTest;
|
||
}
|
||
} else {
|
||
Status = "Download";
|
||
}
|
||
} else {
|
||
if (pingServer.Download) {
|
||
} else {
|
||
Status = "Error";
|
||
}
|
||
}
|
||
}
|
||
}
|
||
function sendPingRequest(serverListElm, callback) {
|
||
var pingSamplesSend = 0;
|
||
var pingResult = [];
|
||
var jitterResult = [];
|
||
function sendNewPingReq() {
|
||
if (pingSamplesSend < pingSamples) {
|
||
pingSamplesSend++;
|
||
if (statusPingTest != "Stop") {
|
||
PingRequest();
|
||
}
|
||
} else {
|
||
if (pingResult.length > 1) {
|
||
jitterResult.sort(function (a, b) {
|
||
return a - b;
|
||
});
|
||
jitterResult = jitterResult.slice(0, jitterResult.length * jitterFinalSample);
|
||
jitterResult = jitterResult.reduce(function (acc, val) {
|
||
return acc + val;
|
||
}, 0) / jitterResult.length;
|
||
var leastJitter = jitterResult.toFixed(1);
|
||
var leastPing = Math.min.apply(Math, pingResult);
|
||
finalPing.push(leastPing);
|
||
pingServer.push(serverListElm);
|
||
finalJitter.push(leastJitter);
|
||
if (typeof callback === "function") {
|
||
callback();
|
||
}
|
||
} else {
|
||
if (typeof callback === "function") {
|
||
callback();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
function PingRequest() {
|
||
var OST = new XMLHttpRequest();
|
||
var ReQ = OST;
|
||
if (statusPingTest != "Stop") {
|
||
ReQ.abort();
|
||
}
|
||
ReQ.open(pingMethod, serverListElm[pingFile] + "?n=" + Math.random(), true);
|
||
ReQ.timeout = pingTimeOut;
|
||
var startTime = window.performance.now();
|
||
ReQ.send();
|
||
ReQ.onload = function () {
|
||
if (this.status === 200 && this.readyState === 4) {
|
||
var endTime = Math.floor(window.performance.now() - startTime);
|
||
var perfNum = performance.getEntries();
|
||
perfNum = perfNum[perfNum.length - 1];
|
||
var perfPing;
|
||
if (perfNum.initiatorType === "xmlhttprequest") {
|
||
perfPing = parseFloat(perfNum.duration.toFixed(1));
|
||
} else {
|
||
perfPing = endTime;
|
||
}
|
||
if (pingSamplesSend > 250) {
|
||
perfPing = endTime;
|
||
}
|
||
if (perfPing <= 0) {
|
||
statusPing = 0.1;
|
||
pingResult.push(0.1);
|
||
} else {
|
||
statusPing = perfPing;
|
||
pingResult.push(perfPing);
|
||
}
|
||
if (pingResult.length > 1) {
|
||
var jitterCalc = Math.abs(pingResult[pingResult.length - 1] - pingResult[pingResult.length - 2]).toFixed(1);
|
||
jitterResult.push(parseFloat(jitterCalc));
|
||
statusJitter = jitterCalc;
|
||
Show.LiveSpeed(perfPing, "Ping");
|
||
Show.pingResults(perfPing, "Ping");
|
||
Show.jitterResult(jitterCalc, "Jitter");
|
||
}
|
||
sendNewPingReq();
|
||
}
|
||
if (this.status === 404 && this.readyState === 4) {
|
||
pingSamplesSend++;
|
||
sendNewPingReq();
|
||
}
|
||
};
|
||
ReQ.onerror = function (e) {
|
||
pingSamplesSend++;
|
||
sendNewPingReq();
|
||
};
|
||
ReQ.ontimeout = function (e) {
|
||
pingSamplesSend++;
|
||
sendNewPingReq();
|
||
};
|
||
}
|
||
PingRequest();
|
||
}
|
||
var ServerConnect = function (auth) {
|
||
var Self = this;
|
||
var xhr = new XMLHttpRequest();
|
||
var url = OpenSpeedTestdb;
|
||
if (auth == 1) {
|
||
url = webIP;
|
||
}
|
||
if (auth == 5) {
|
||
url = saveDataURL;
|
||
}
|
||
if (auth == 7) {
|
||
url = get_IP;
|
||
}
|
||
xhr.open("POST", url, true);
|
||
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
|
||
xhr.onreadystatechange = function () {
|
||
if (xhr.readyState == 4 && xhr.status == 200) {
|
||
return_data = xhr.responseText.trim();
|
||
if (auth == 2) {
|
||
key = return_data;
|
||
}
|
||
if (auth == 1) {
|
||
TestServerip = return_data;
|
||
}
|
||
if (auth == 3) {
|
||
setTimeout(function () {
|
||
location.href = showResult + return_data;
|
||
}, 1500);
|
||
}
|
||
if (auth == 6) {
|
||
openSpeedTestServerList = JSON.parse(return_data);
|
||
launch = true;
|
||
runTasks();
|
||
}
|
||
if (auth == 7) {
|
||
Show.YourIP.el.textContent = return_data;
|
||
}
|
||
}
|
||
};
|
||
if (auth == 2) {
|
||
logData = "r=n";
|
||
}
|
||
if (auth == 3) {
|
||
logData = "r=l" + "&d=" + downloadSpeed + "&u=" + uploadSpeed + "&dd=" + dataUsedfordl / 1048576 + "&ud=" + dataUsedforul / 1048576 + "&p=" + pingEstimate + "&do=" + myhostName + "&S=" + key + "&sip=" + TestServerip + "&jit=" + jitterEstimate + "&ua=" + userAgentString;
|
||
}
|
||
if (auth == 5) {
|
||
logData = saveTestData;
|
||
}
|
||
if (auth == 6) {
|
||
logData = "r=s";
|
||
}
|
||
xhr.send(logData);
|
||
};
|
||
};
|
||
OpenSpeedTest.Start = function () {
|
||
new openSpeedtestEngine();
|
||
};
|
||
})(window.OpenSpeedTest = window.OpenSpeedTest || {});
|