Update waip_io.js

This commit is contained in:
Richter 2019-03-06 15:06:48 +01:00
parent 70a491bdfc
commit b09b03afc7

View File

@ -1,27 +1,27 @@
module.exports = function (io, sql, async, app_cfg) { module.exports = function(io, sql, async, app_cfg) {
// Socket.IO // Socket.IO
io.on('connection', function (socket) { io.on('connection', function(socket) {
sql.db_log('WAIP', 'Anwendung von ' + socket.request.connection.remoteAddress + ' (' + socket.id + ') geoeffnet'); sql.db_log('WAIP', 'Anwendung von ' + socket.request.connection.remoteAddress + ' (' + socket.id + ') geoeffnet');
io.sockets.to(socket.id).emit('io.version', app_cfg.global.app_id); io.sockets.to(socket.id).emit('io.version', app_cfg.global.app_id);
// disconnect // disconnect
socket.on('disconnect', function () { socket.on('disconnect', function() {
sql.db_log('WAIP', 'Alarmmonitor von ' + socket.request.connection.remoteAddress + ' (' + socket.id + ') geschlossen'); sql.db_log('WAIP', 'Alarmmonitor von ' + socket.request.connection.remoteAddress + ' (' + socket.id + ') geschlossen');
sql.db_client_delete(socket.id); sql.db_client_delete(socket.id);
}); });
// Aufruf des Alarmmonitors einer bestimmten Wache verarbeiten // Aufruf des Alarmmonitors einer bestimmten Wache verarbeiten
socket.on('wachen_id', function (wachen_id) { socket.on('wachen_id', function(wachen_id) {
sql.db_log('WAIP', 'Alarmmonitor Nr. ' + wachen_id + ' von ' + socket.request.connection.remoteAddress + ' (' + socket.id + ') aufgerufen'); sql.db_log('WAIP', 'Alarmmonitor Nr. ' + wachen_id + ' von ' + socket.request.connection.remoteAddress + ' (' + socket.id + ') aufgerufen');
// prüfen ob Wachenummer in der Datenbank hinterlegt ist // prüfen ob Wachenummer in der Datenbank hinterlegt ist
sql.db_wache_vorhanden(wachen_id, function (result) { sql.db_wache_vorhanden(wachen_id, function(result) {
// wenn die Wachennummer vorhanden/plausibel dann weiter // wenn die Wachennummer vorhanden/plausibel dann weiter
if (result) { if (result) {
// Socket-Room beitreiten // Socket-Room beitreiten
socket.join(wachen_id, function () { socket.join(wachen_id, function() {
// Socket-ID und Client-IP in der Datenbank speichern // Socket-ID und Client-IP in der Datenbank speichern
sql.db_client_save(socket.id, socket.request.connection.remoteAddress, wachen_id); sql.db_client_save(socket.id, socket.request.connection.remoteAddress, wachen_id);
// prüfen ob für diese Wache ein Einsatz vorhanden ist // prüfen ob für diese Wache ein Einsatz vorhanden ist
sql.db_einsatz_vorhanden(wachen_id, function (result_einsatz) { sql.db_einsatz_vorhanden(wachen_id, function(result_einsatz) {
if (result_einsatz) { if (result_einsatz) {
sql.db_log('WAIP', 'Einsatz ' + result_einsatz[0].waip_einsaetze_ID + ' fuer Wache ' + wachen_id + ' vorhanden'); sql.db_log('WAIP', 'Einsatz ' + result_einsatz[0].waip_einsaetze_ID + ' fuer Wache ' + wachen_id + ' vorhanden');
//letzten Einsatz verteilen //letzten Einsatz verteilen
@ -47,16 +47,16 @@ module.exports = function (io, sql, async, app_cfg) {
// Einsatzmeldung in Datenbank speichern // Einsatzmeldung in Datenbank speichern
function einsatz_speichern(message) { function einsatz_speichern(message) {
// Einsatzmeldung (JSON) speichern // Einsatzmeldung (JSON) speichern
sql.db_einsatz_speichern(JSON.parse(message), function (waip_id) { sql.db_einsatz_speichern(JSON.parse(message), function(waip_id) {
// nach dem Speichern anhand der waip_id die beteiligten Wachennummern zum Einsatz ermitteln // nach dem Speichern anhand der waip_id die beteiligten Wachennummern zum Einsatz ermitteln
sql.db_log('WAIP', 'DEBUG: ' + waip_id); sql.db_log('WAIP', 'DEBUG: ' + waip_id);
sql.db_get_einsatzwachen(waip_id, function (data) { sql.db_get_einsatzwachen(waip_id, function(data) {
if (data) { if (data) {
data.forEach(function (row) { data.forEach(function(row) {
// fuer jede Wache(row.room) die verbundenen Sockets(Clients) ermitteln und Einsatz verteilen // fuer jede Wache(row.room) die verbundenen Sockets(Clients) ermitteln und Einsatz verteilen
var room_stockets = io.sockets.adapter.rooms[row.room]; var room_stockets = io.sockets.adapter.rooms[row.room];
if (typeof room_stockets !== 'undefined') { if (typeof room_stockets !== 'undefined') {
Object.keys(room_stockets.sockets).forEach(function (socketId) { Object.keys(room_stockets.sockets).forEach(function(socketId) {
einsatz_verteilen(waip_id, socketId, row.room); einsatz_verteilen(waip_id, socketId, row.room);
sql.db_log('WAIP', 'Einsatz ' + waip_id + ' wird an ' + socketId + ' (' + row.room + ') gesendet'); sql.db_log('WAIP', 'Einsatz ' + waip_id + ' wird an ' + socketId + ' (' + row.room + ') gesendet');
}); });
@ -72,17 +72,29 @@ module.exports = function (io, sql, async, app_cfg) {
// Einsatz an Client verteilen // Einsatz an Client verteilen
function einsatz_verteilen(waip_id, socket_id, wachen_nr) { function einsatz_verteilen(waip_id, socket_id, wachen_nr) {
// Einsatzdaten für eine Wache aus Datenbank laden // Einsatzdaten für eine Wache aus Datenbank laden
sql.db_get_einsatzdaten(waip_id, wachen_nr, function (einsatzdaten) { sql.db_get_einsatzdaten(waip_id, wachen_nr, function(einsatzdaten) {
if (einsatzdaten) { if (einsatzdaten) {
// Einsatz senden // Berechtigung ueberpruefen
sql.db_log('WAIP', 'Einsatz ' + waip_id + ' fuer Wache ' + wachen_nr + ' an Socket ' + socket_id + ' gesendet'); var permissions = io.sockets.sockets[socket_id].request.user.permissions;
io.sockets.to(socket_id).emit('io.neuerEinsatz', einsatzdaten); sql.db_check_permission(permissions, waip_id, function(valid) {
sql.db_update_client_status(socket_id, waip_id); //console.log(permissions + ' ' + wachen_nr);
// Sound erstellen //if (permissions == wachen_nr || permissions == 'admin') {} else {
tts_erstellen(app_cfg, socket_id, einsatzdaten, function (tts) { if (!valid) {
// Sound senden einsatzdaten.besonderheiten = '';
sql.db_log('WAIP', 'ttsfile: ' + tts); einsatzdaten.strasse = '';
io.sockets.to(socket_id).emit('io.playtts', tts); einsatzdaten.wgs84_x = '';
einsatzdaten.wgs84_y = '';
};
// Einsatz senden
io.sockets.to(socket_id).emit('io.neuerEinsatz', einsatzdaten)
sql.db_log('WAIP', 'Einsatz ' + waip_id + ' fuer Wache ' + wachen_nr + ' an Socket ' + socket_id + ' gesendet');
sql.db_update_client_status(socket_id, waip_id);
// Sound erstellen
tts_erstellen(app_cfg, socket_id, einsatzdaten, function(tts) {
// Sound senden
sql.db_log('WAIP', 'ttsfile: ' + tts);
io.sockets.to(socket_id).emit('io.playtts', tts);
});
}); });
} else { } else {
// Standby senden // Standby senden
@ -108,7 +120,7 @@ module.exports = function (io, sql, async, app_cfg) {
var mp3_bell = process.cwd() + app_cfg.global.soundpath + 'bell_short.mp3'; var mp3_bell = process.cwd() + app_cfg.global.soundpath + 'bell_short.mp3';
}; };
// Zusammensetzen der Sprachansage // Zusammensetzen der Sprachansage
async.map(JSON.parse(einsatzdaten.em_alarmiert), sql.db_tts_einsatzmittel, function (err, einsatzmittel) { async.map(JSON.parse(einsatzdaten.em_alarmiert), sql.db_tts_einsatzmittel, function(err, einsatzmittel) {
// Grunddaten // Grunddaten
var tts_text = einsatzdaten.einsatzart + ', ' + einsatzdaten.stichwort; var tts_text = einsatzdaten.einsatzart + ', ' + einsatzdaten.stichwort;
if (einsatzdaten.objekt) { if (einsatzdaten.objekt) {
@ -151,11 +163,11 @@ module.exports = function (io, sql, async, app_cfg) {
var childD = proc.spawn('powershell', commands); var childD = proc.spawn('powershell', commands);
childD.stdin.setEncoding('ascii'); childD.stdin.setEncoding('ascii');
childD.stderr.setEncoding('ascii'); childD.stderr.setEncoding('ascii');
childD.stderr.on('data', function (data) { childD.stderr.on('data', function(data) {
sql.db_log('Fehler-TTS', data); sql.db_log('Fehler-TTS', data);
callback && callback(null); callback && callback(null);
}); });
childD.on('exit', function () { childD.on('exit', function() {
callback && callback(mp3_url); callback && callback(mp3_url);
}); });
childD.stdin.end(); childD.stdin.end();
@ -167,22 +179,22 @@ module.exports = function (io, sql, async, app_cfg) {
}; };
// Aufräumen (alle 10 Sekunden) // Aufräumen (alle 10 Sekunden)
setInterval(function () { setInterval(function() {
// Nach alten Einsaetzen suchen und diese ggf. loeschen // Nach alten Einsaetzen suchen und diese ggf. loeschen
sql.db_get_alte_einsaetze('5', function (waip_id) { sql.db_get_alte_einsaetze('10', function(waip_id) {
if (waip_id) { if (waip_id) {
sql.db_log('WAIP', 'Einsatz mit der ID ' + waip_id + ' ist veraltet und kann gelöscht werden.') sql.db_log('WAIP', 'Einsatz mit der ID ' + waip_id + ' ist veraltet und kann gelöscht werden.')
//beteiligte Wachen ermitteln //beteiligte Wachen ermitteln
sql.db_get_einsatzwachen(waip_id, function (data) { sql.db_get_einsatzwachen(waip_id, function(data) {
if (data) { if (data) {
data.forEach(function (row) { data.forEach(function(row) {
// fuer jede Wache(row.room) die verbundenen Sockets(Clients) ermitteln und Standby senden // fuer jede Wache(row.room) die verbundenen Sockets(Clients) ermitteln und Standby senden
var room_stockets = io.sockets.adapter.rooms[row.room]; var room_stockets = io.sockets.adapter.rooms[row.room];
if (typeof room_stockets !== 'undefined') { if (typeof room_stockets !== 'undefined') {
Object.keys(room_stockets.sockets).forEach(function (socketId) { Object.keys(room_stockets.sockets).forEach(function(socketId) {
// Standby senden // Standby senden
// TODO: Standby nur senden, wenn kein anderer (als der zu löschende) Einsatz angezeigt wird // TODO: Standby nur senden, wenn kein anderer (als der zu löschende) Einsatz angezeigt wird
sql.db_check_client_waipid(socketId, waip_id, function (same_id) { sql.db_check_client_waipid(socketId, waip_id, function(same_id) {
if (same_id) { if (same_id) {
io.sockets.to(socketId).emit('io.standby', null); io.sockets.to(socketId).emit('io.standby', null);
io.sockets.to(socketId).emit('io.stopaudio', null); io.sockets.to(socketId).emit('io.stopaudio', null);
@ -207,9 +219,9 @@ module.exports = function (io, sql, async, app_cfg) {
fs.readdirSync(process.cwd() + app_cfg.global.soundpath).forEach(file => { fs.readdirSync(process.cwd() + app_cfg.global.soundpath).forEach(file => {
// nur die mp3s von alten clients loeschen // nur die mp3s von alten clients loeschen
if (file.substring(0, 4) != 'bell' && file.substring(file.length - 3) == 'mp3' && file.substring(file.length - 8) != '_tmp.mp3') { if (file.substring(0, 4) != 'bell' && file.substring(file.length - 3) == 'mp3' && file.substring(file.length - 8) != '_tmp.mp3') {
sql.db_get_socket_by_id(file.substring(0, file.length - 4), function (data) { sql.db_get_socket_by_id(file.substring(0, file.length - 4), function(data) {
if (!data) { if (!data) {
fs.unlink(process.cwd() + app_cfg.global.soundpath + file, function (err) { fs.unlink(process.cwd() + app_cfg.global.soundpath + file, function(err) {
if (err) return sql.db_log('Fehler-WAIP', err); if (err) return sql.db_log('Fehler-WAIP', err);
sql.db_log('WAIP', file + ' wurde erfolgreich geloescht'); sql.db_log('WAIP', file + ' wurde erfolgreich geloescht');
}); });
@ -224,4 +236,4 @@ module.exports = function (io, sql, async, app_cfg) {
return { return {
einsatz_speichern: einsatz_speichern einsatz_speichern: einsatz_speichern
}; };
}; };