forked from MTSR/mapserver
37ee801f2b
fixes #76
105 lines
2.5 KiB
JavaScript
105 lines
2.5 KiB
JavaScript
(function(f){typeof define==='function'&&define.amd?define(f):f();}((function(){'use strict';function WorldStats(info){
|
|
|
|
var timeIcon = m("span", { class: "fa fa-sun", style: "color: orange;" });
|
|
|
|
if (info.time < 5500 || info.time > 19000) //0 - 24'000
|
|
timeIcon = m("span", { class: "fa fa-moon", style: "color: blue;" });
|
|
|
|
function getHour(){
|
|
return Math.floor(info.time/1000);
|
|
}
|
|
|
|
function getMinute(){
|
|
var min = Math.floor((info.time % 1000) / 1000 * 60);
|
|
return min > 10 ? min : "0" + min;
|
|
}
|
|
|
|
function getLag(){
|
|
var color = "green";
|
|
if (info.max_lag > 0.8)
|
|
color = "orange";
|
|
else if (info.max_lag > 1.2)
|
|
color = "red";
|
|
|
|
return [
|
|
m("span", { class: "fa fa-wifi", style: "color: " + color }),
|
|
parseInt(info.max_lag*1000),
|
|
" ms"
|
|
];
|
|
}
|
|
|
|
function getPlayers(){
|
|
return [
|
|
m("span", { class: "fa fa-users" }),
|
|
info.players ? info.players.length : "0"
|
|
];
|
|
}
|
|
|
|
return m("div", [
|
|
getPlayers(),
|
|
" ",
|
|
getLag(),
|
|
" ",
|
|
m("span", { class: "fa fa-clock" }),
|
|
timeIcon,
|
|
getHour(), ":", getMinute()
|
|
]);
|
|
|
|
}class WebSocketChannel {
|
|
constructor(){
|
|
this.wsUrl = window.location.protocol.replace("http", "ws") +
|
|
"//" + window.location.host +
|
|
window.location.pathname.substring(0, window.location.pathname.lastIndexOf("/")) +
|
|
"/api/ws";
|
|
|
|
this.listenerMap = {/* type -> [listeners] */};
|
|
}
|
|
|
|
addListener(type, listener){
|
|
var list = this.listenerMap[type];
|
|
if (!list){
|
|
list = [];
|
|
this.listenerMap[type] = list;
|
|
}
|
|
|
|
list.push(listener);
|
|
}
|
|
|
|
removeListener(type, listener){
|
|
var list = this.listenerMap[type];
|
|
if (!list){
|
|
return;
|
|
}
|
|
|
|
this.listenerMap[type] = list.filter(l => l != listener);
|
|
}
|
|
|
|
connect(){
|
|
var ws = new WebSocket(this.wsUrl);
|
|
var self = this;
|
|
|
|
ws.onmessage = function(e){
|
|
var event = JSON.parse(e.data);
|
|
//rendered-tile, mapobject-created, mapobjects-cleared
|
|
|
|
var listeners = self.listenerMap[event.type];
|
|
if (listeners){
|
|
listeners.forEach(function(listener){
|
|
listener(event.data);
|
|
});
|
|
}
|
|
};
|
|
|
|
ws.onerror = function(){
|
|
//reconnect after some time
|
|
setTimeout(self.connect.bind(self), 1000);
|
|
};
|
|
}
|
|
}
|
|
|
|
var wsChannel = new WebSocketChannel();wsChannel.connect();
|
|
|
|
wsChannel.addListener("minetest-info", function(info){
|
|
m.render(document.getElementById("app"), WorldStats(info));
|
|
});})));//# sourceMappingURL=bundle-stats.js.map
|