CurrStatVDP/Diagram-Canvas/index.js
2021-05-18 10:19:03 +05:00

203 lines
6.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//Global Params
var htmlDateClient = document.getElementById("DateClient");
var htmlDateServer = document.getElementById("DateServer");
var htmlDateSynch = document.getElementById("DateSynch");
var htmlErrMSG = document.getElementById("Error_Message");
var canvas = document.getElementsByTagName("canvas")[0];
var ctx = canvas.getContext("2d");
var diagram = new Diagram(0, 0, canvas.width, canvas.height);
diagram.BuildDefault();
diagram.Cycle(true);
var update_button = document.getElementById("Update_Button");
//Global Params
//Show Date Now \/ \/ \/
function FNL(a, b) { for (var d = "" + a; d.length < b;)d = "0" + d; return d }
function DateToString(date) { return date.getFullYear() + "." + FNL(date.getMonth() + 1, 2) + "." + FNL(date.getDate(), 2) + " " + FNL(date.getHours(), 2) + ":" + FNL(date.getMinutes(), 2) + ":" + FNL(date.getSeconds(), 2); }
var dateClient = null;
var dateServer = null;
var dateSynch = null;
function PrintDateNow() {
var dn = new Date();
if (dateServer !== null && dateClient !== null)
dateServer.setMilliseconds(dateServer.getMilliseconds() + (dn - dateClient));
dateClient = dn;
htmlDateClient.innerHTML = DateToString(dateClient);
if (dateServer != null)
htmlDateServer.innerHTML = DateToString(dateServer);
if (dateSynch !== null)
htmlDateSynch.innerHTML = DateToString(dateSynch);
setTimeout(PrintDateNow, 1000);
}
function updateDateServer(date) {
if (typeof date.getMonth === 'function') {
dateClient = null;
dateServer = date;
} else
dateServer = null;
}
function updateDateSynch(date) {
if (typeof date.getMonth === 'function') {
dateSynch = date;
} else
dateSynch = null;
}
PrintDateNow();
//Show Date Now /\ /\ /\
//Resize Canvas \/ \/ \/
function Resize() {
if (window.innerWidth > window.innerHeight) {
canvas.height =
window.innerHeight - 20
- document.getElementById("First_Head").offsetHeight
- document.getElementById("Second_Head").offsetHeight
- document.getElementById("Third_Head").offsetHeight;
canvas.width = document.getElementById("Canvas_Body").offsetWidth;
diagram.Rotate(false);
diagram.RectParam(0.5, 0.5, canvas.width - 1, canvas.height - 1);
}
else {
canvas.height = diagram.ProcCount() * 25;
canvas.width = document.getElementById("Canvas_Body").offsetWidth;
diagram.Rotate(true);
diagram.RectParam(0.5, 0.5, canvas.width - 1, canvas.height - 1);
}
ctx = canvas.getContext("2d");
diagram.Print(ctx);
}
window.addEventListener("load", Resize, false);
window.addEventListener("resize", Resize, false);
//Resize Canvas /\ /\ /\
//Autoprint diagram \/ \/ \/
function PrintCycle() {
diagram.Print(ctx);
setTimeout(PrintCycle, 1000);
}
PrintCycle();
//Autoprint diagram /\ /\ /\
//Update Status \/ \/ \/
function UpdateStatus() {
var xhr = new XMLHttpRequest();
xhr.open('POST', 'api/currcycles', true);
xhr.send();
xhr.onreadystatechange = function () {
if (xhr.readyState != 4) return;
if (xhr.status != 200) {
htmlErrMSG.innerHTML = "Не удается установить соединение";
$("#Error_Border").show();
$("#Update_Button").show();
return;
}
else
$("#Error_Border").hide();
var data = JSON.parse(xhr.responseText);
if (data.currTime === undefined) {
htmlErrMSG.innerHTML = "Ошибка в полученных данных: отсутствует время сервера";
$("#Error_Border").show();
$("#Update_Button").show();
return;
}
updateDateSynch(new Date());
updateDateServer(new Date(data.currTime));
if (data.data === undefined || !Array.isArray(data.data)) {
htmlErrMSG.innerHTML = "Ошибка в полученных данных: отстутствует массив днных";
$("#Error_Border").show();
$("#Update_Button").show();
return;
}
var p = data.data;
for (var i = 0; i < p.length; i++) {
var idx = p[i].vdp - 1;
var s = -1;
var b = -1;
switch (p[i].cycle) {
case 0: s = 0; b = -1; break;
case 1: s = 0; b = 1; break;
case 2: s = 1; b = 0; break;
case 5: s = 2; b = 0; break;
case 6: s = 3; b = 0; break;
case 7: s = 4; b = 0; break;
case 8: s = 5; b = 3; break;
case 9: s = 6; b = 3; break;
case 10: s = 7; b = 3; break;
case 11: s = 8; b = 3; break;
case 12: s = 9; b = 3; break;
case 14: s = 1; b = 1; break;
case 15: s = 2; b = 1; break;
case 16: s = 3; b = 1; break;
default: s = -1; b = -1;
}
diagram.ChangeStatProc(idx, s, 0);
diagram.ChangeStatBlink(idx, b);
diagram.StartDate(idx, new Date(p[i].factStart));
diagram.EndDate(idx, new Date(p[i].thinkEnd));
}
diagram.Cycle(true);
/*
ctx.clearRect(0, 0, canvas.width, canvas.height);
for (var i = 1; i <= diagramStove.ProcessCount(); i++) {
diagramStove.ChangeStatBlink(i, Pech[i].Bstatus);
diagramStove.ChangeStatProc(i, Pech[i].Pstatus);
diagramStove.ChangeStartDate(i, ConvDate(Pech[i].Start));
diagramStove.ChangeEndDate(i, ConvDate(Pech[i].EndTeor));
}
var b = ConvDate(Pech[0].DateNow);
dateUpdateHTML.innerHTML =
b.getFullYear() + "." +
FNL(b.getMonth() + 1, 2) + "." +
FNL(b.getDate(), 2) + " " +
FNL(b.getHours(), 2) + ":" +
FNL(b.getMinutes(), 2) + ":" +
FNL(b.getSeconds(), 2);
if (Math.abs(b - new Date()) > 60000) {
document.getElementById("Error_Message").innerHTML = "Разница между системным и серверным временем " + Math.floor(Math.abs(b - new Date()) / 1000) + " сек";
$("#Error_Border").show();
$("#Update_Button").hide();
}
else
$("#Error_Border").hide();
*/
diagram.Print(ctx);
setTimeout(UpdateStatus, 60 * 1000);
}
}
UpdateStatus();
function ConvDate(a) {
a = a.split(".")[0].split("T");
var d = a[0].split("-");
var h = a[1].split(":");
var date = new Date(d[0], parseInt(d[1]) - 1, d[2], h[0], h[1], h[2]);
return date;
}
update_button.onclick = function () {
UpdateStatus();
}
//Update Status /\ /\ /\
//End Update Status
/*
//End Show Date Now
*/