You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Modelbahn/webinterface/serverinout.js

219 lines
5.5 KiB

//
//
// mit jedem Paket eine eindeutige ID generieren.
// (ein Teil generiert der Server ein anderer die Anwendung)
//
var sessionID = "";
var randomID = "";
var request_running = 0;
function serverinout_getRand(min, max) {
return Math.floor(Math.random() * (max - min) + min);
};
function serverinout(request, callback) {
//
// generate random ID
if (randomID == "") {
randomID = serverinout_getRand(10000000, 99999999);
}
request.sid = sessionID;
request.rid = randomID;
// e.preventDefault();
senddata = JSON.stringify(request);
// debug('serverinout: send request:' + senddata);
$.ajax({
type: "POST",
// url: '/modelbahn/serverinout.php',
url: '/cgi-bin/modelbahn-cgi',
data: senddata,
success: function(response)
{
var jsonData = {};
// ENABLE LATER try {
jsonData = JSON.parse(response);
if (jsonData.success == "1")
{
var serverstatus = document.getElementById("infoserverstatus");
serverstatus.innerHTML = "connected";
callback(jsonData);
}
else
{
var serverstatus = document.getElementById("infoserverstatus");
serverstatus.innerHTML = "-trying-";
}
// ENABLE LATER } catch(err) {
// ENABLE LATER var serverstatus = document.getElementById("infoserverstatus");
// ENABLE LATER serverstatus.innerHTML = "-error-";
// ENABLE LATER }
},
error: function(error) {
var serverstatus = document.getElementById("infoserverstatus");
serverstatus.innerHTML = "ajax error";
}
});
};
function serverinout_Power(onoff) {
var request = {};
if (onoff) request = {command: "poweron"};
else request = {command: "poweroff"};
serverinout (request, serverinout_defaultCallback);
}
function serverinout_addTrack(tracks) {
var request = { command: "addrailway", rail: tracks };
serverinout (request, serverinout_defaultCallback);
};
function serverinout_delTrack(tracks) {
var request = { command: "delrailway", rail: tracks };
serverinout (request, serverinout_defaultCallback);
};
function serverinout_Save(data) {
var request = { command: "save" };
serverinout (request, serverinout_defaultCallback);
};
function serverinout_defaultCallback(data) {
// if (data.changes) if (data.changes.length > 0) debug ("From Server :" + JSON.stringify(data));
if (data.info) {
}
if (data.sid && data.rid) {
//
// valid data from server
if (data.rid == randomID && data.sid == sessionID) {
//
// loop through all the changes
if (data.changes) {
for (var i = 0; i < data.changes.length; i++) {
//
// infoline
if (data.changes[i].infoline) {
var text = document.getElementById("infoline");
text.innerHTML = data.changes[i].infoline;
}
//
// railway changes
if (data.changes[i].track) {
trackSetup(data.changes[i].track);
}
if (data.changes[i].railway) {
trackAddElement(data.changes[i].railway);
}
//
// Interface changes
if (data.changes[i].interfaces) {
for (var j = 0; j < data.changes[i].interfaces.length; j++) {
interface_Update(data.changes[i].interfaces[j]);
}
}
if (data.changes[i].interface) {
interface_Update(data.changes[i].interface);
}
if (data.changes[i].interfacedelete) {
interface_Delete(data.changes[i].interfacedelete);
}
//
// Locomotives changes
if (data.changes[i].locomotives) {
for (var j = 0; j < data.changes[i].locomotives.length; j++) {
locomotive_Update(data.changes[i].locomotives[j]);
}
}
if (data.changes[i].locomotive) {
locomotive_Update(data.changes[i].locomotive);
}
if (data.changes[i].locomotivedelete) {
locomotive_Delete(data.changes[i].locomotivedelete);
}
//
// Turnout changes
if (data.changes[i].turnouts) {
for (var j = 0; j < data.changes[i].turnouts.length; j++) {
turnout_Update(data.changes[i].turnouts[j]);
}
}
if (data.changes[i].turnout) {
turnout_Update(data.changes[i].turnout);
}
if (data.changes[i].turnoutdelete) {
turnout_Delete(data.changes[i].turnoutdelete);
}
//
// Sensor changes
if (data.changes[i].sensors) {
for (var j = 0; j < data.changes[i].sensors.length; j++) {
sensor_Update(data.changes[i].sensors[j]);
}
}
if (data.changes[i].sensor) {
sensor_Update(data.changes[i].sensor);
}
if (data.changes[i].sensordelete) {
sensor_Delete(data.changes[i].sensordelete);
}
}
trackDraw();
}
}
//
// new session?
else if (data.rid == randomID && data.sid > 0) {
// we got a new sessionID --> request track data
if (sessionID == 0) {
debug ("setup session ID");
sessionID = data.sid;
serverinout( {command: "getall" }, serverinout_defaultCallback);
}
}
else {
debug ("ERROR: serverinout_defaultCallback");
}
}
else {
debug ("ERROR: serverinout_defaultCallback no data.sid && data.rid");
}
};
//
// starte timeout timer fuer Updates on 1/sec
function serverinout_AutoUpdateCallback(data) {
serverinout_defaultCallback(data);
request_running = 0;
};
function serverinout_AutoUpdate() {
// debug ("serverinout_AutoUpdate");
if (request_running == 0) {
request_running = 0;
serverinout({}, serverinout_defaultCallback);
}
setTimeout(function() { serverinout_AutoUpdate() },1000);
}