// // // 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); }