Bowser-Fehler beachtet

This commit is contained in:
Robert Richter 2018-12-19 14:27:20 +01:00
parent 62274c33fd
commit b299cd5142
5 changed files with 105 additions and 23 deletions

View File

@ -1,4 +1,4 @@
// TODO: Remote-Reload per Socket // TODO: Remote-Reload per Socket
// TODO: Client-Server-Version abgleichen // TODO: Client-Server-Version abgleichen
// TODO: Modal bei Chrome, dass Audio erst bei interaktion aktiv // TODO: Modal bei Chrome, dass Audio erst bei interaktion aktiv
@ -56,7 +56,9 @@ function setup_inactivcheck() {
this.addEventListener("mousedown", resetActivTimer, false); this.addEventListener("mousedown", resetActivTimer, false);
this.addEventListener("keypress", resetActivTimer, false); this.addEventListener("keypress", resetActivTimer, false);
this.addEventListener("DOMMouseScroll", resetActivTimer, false); this.addEventListener("DOMMouseScroll", resetActivTimer, false);
this.addEventListener("mousewheel", resetActivTimer, {passive: true}, false); this.addEventListener("mousewheel", resetActivTimer, {
passive: true
}, false);
this.addEventListener("touchmove", resetActivTimer, false); this.addEventListener("touchmove", resetActivTimer, false);
this.addEventListener("MSPointerMove", resetActivTimer, false); this.addEventListener("MSPointerMove", resetActivTimer, false);
start_inactivtimer(); start_inactivtimer();
@ -152,7 +154,7 @@ socket.on('connect', function() {
socket.on('connect_error', function(err) { socket.on('connect_error', function(err) {
$('#waipModalTitle').html('FEHLER'); $('#waipModalTitle').html('FEHLER');
$('#waipModalBody').html(`Verbindung zum Server getrennt!`); $('#waipModalBody').html('Verbindung zum Server getrennt!');
$('#waipModal').modal('show'); $('#waipModal').modal('show');
}); });
@ -161,10 +163,14 @@ socket.on('io.version', function(server_id) {
var client_id = $('#app_id').html(); var client_id = $('#app_id').html();
//console.log('server_id: ' + server_id); //console.log('server_id: ' + server_id);
//console.log('client_id: ' + client_id); //console.log('client_id: ' + client_id);
// TODO: socket.emit(lade client xxx neu)
if (client_id != server_id) { if (client_id != server_id) {
$('#waipModalTitle').html('ACHTUNG'); $('#waipModalTitle').html('ACHTUNG');
$('#waipModalBody').html(`Neue Server-Version. Seite wird in 10 Sekunden neu geladen!`); $('#waipModalBody').html('Neue Server-Version. Seite wird in 10 Sekunden neu geladen!');
$('#waipModal').modal('toggle'); if ($('#waipModal').hasClass('in')) {
$('#waipModal').modal('hide');
};
$('#waipModal').modal('show');
setTimeout(function() { setTimeout(function() {
location.reload(); location.reload();
}, 10000); }, 10000);
@ -176,6 +182,12 @@ socket.on('io.error', function(data) {
console.log('Error:', data); console.log('Error:', data);
}); });
// Sounds abspielen
socket.on('io.stopaudio', function(data) {
var audio = document.getElementById('audio');
audio.pause;
});
// Sounds abspielen // Sounds abspielen
socket.on('io.playtts', function(data) { socket.on('io.playtts', function(data) {
var audio = document.getElementById('audio'); var audio = document.getElementById('audio');
@ -347,3 +359,19 @@ function set_clock() {
// Uhrzeit jede Sekunden anpassen // Uhrzeit jede Sekunden anpassen
setInterval(set_clock, 1000); setInterval(set_clock, 1000);
/* ########################### */
/* ######## SONSTIGES ######## */
/* ########################### */
// Audio-Blockade des Browsers erkennen
var promise = document.querySelector('audio').play();
if (promise !== undefined) {
promise.catch(function(error) {
if (error && error.toString().toLowerCase().includes('play() request was interrupted')) {
$('#waipModalTitle').html('Audio-Fehler');
$('#waipModalBody').html('Die Audio-Wiedergabe wird aktuell durch Ihren Browser blockiert. Wenn Sie Chrome-Desktop benutzen, genügt es wenn Sie nur einmal irgendwo hinklicken. Fehlermeldung: ' + error.message);
$('#waipModal').modal('show');
};
});
};

View File

@ -21,23 +21,30 @@ module.exports = function(app, sql, app_cfg) {
// get /waip // get /waip
app.get('/waip', function(req, res) { app.get('/waip', function(req, res) {
res.render('waip', { res.redirect('/waip/0');
title: 'Wachalarm-IP-Web'
});
}); });
// get /waip/<wachennummer> // get /waip/<wachennummer>
app.get('/waip/:wachen_id', function(req, res) { // TODO: Abstruz bei unbekannter/falscher Wachennummer
sql.db_wache_vorhanden(req.params.wachen_id, function(result) { app.get('/waip/:wachen_id', function(req, res, next) {
res.render('waip', { var parmeter_id = req.params.wachen_id;
title: 'Alarmmonitor', sql.db_wache_vorhanden(parmeter_id, function(result) {
wachen_id: req.params.wachen_id, if (result) {
data_wache: ' '+ result.name, res.render('waip', {
app_id: app_cfg.global.app_id title: 'Alarmmonitor',
}); wachen_id: parmeter_id,
data_wache: ' ' + result.name,
app_id: app_cfg.global.app_id
});
} else {
var err = new Error('Wache '+ parmeter_id +' nicht vorhanden');
err.status = 404;
next (err);
}
}); });
}); });
// get /ueber // get /ueber
app.get('/ueber', function(req, res) { app.get('/ueber', function(req, res) {
res.render('ueber', { res.render('ueber', {

View File

@ -71,7 +71,8 @@ module.exports = function(app_cfg) {
connect_time DATETIME DEFAULT CURRENT_TIMESTAMP, connect_time DATETIME DEFAULT CURRENT_TIMESTAMP,
socket_id TEXT, socket_id TEXT,
client_ip TEXT, client_ip TEXT,
room_name TEXT)`); room_name TEXT,
client_status TEXT)`);
// Ersetzungs-Tabelle fuer Einsatzmittelnamen erstellen // Ersetzungs-Tabelle fuer Einsatzmittelnamen erstellen
db.run(`CREATE TABLE waip_ttsreplace ( db.run(`CREATE TABLE waip_ttsreplace (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
@ -81,6 +82,7 @@ module.exports = function(app_cfg) {
db.run(`INSERT OR REPLACE INTO waip_wachen ( db.run(`INSERT OR REPLACE INTO waip_wachen (
nr_wache, nr_traeger, nr_kreis, name_wache, name_traeger, name_kreis) nr_wache, nr_traeger, nr_kreis, name_wache, name_traeger, name_kreis)
VALUES VALUES
(0,\'0\',0,\'Global - Alle Einsätze\',\'Global\',\'Global\'),
(520101,\'01\',52,\'CB FW Cottbus 1\',\'Stadt Cottbus\',\'Stadt Cottbus\'), (520101,\'01\',52,\'CB FW Cottbus 1\',\'Stadt Cottbus\',\'Stadt Cottbus\'),
(520201,\'02\',52,\'CB FW Cottbus 2\',\'Stadt Cottbus\',\'Stadt Cottbus\'), (520201,\'02\',52,\'CB FW Cottbus 2\',\'Stadt Cottbus\',\'Stadt Cottbus\'),
(521101,\'11\',52,\'CB FW Branitz\',\'Stadt Cottbus\',\'Stadt Cottbus\'), (521101,\'11\',52,\'CB FW Branitz\',\'Stadt Cottbus\',\'Stadt Cottbus\'),

View File

@ -2,6 +2,7 @@ module.exports = function(db) {
function db_einsatz_vorhanden(content, callback) { function db_einsatz_vorhanden(content, callback) {
// ermittelt den letzten vorhanden Einsatz zu einer Wache // ermittelt den letzten vorhanden Einsatz zu einer Wache
if (parseInt(content) == 0) {content = '%'};
db.all('select em.waip_einsaetze_id from waip_einsatzmittel em ' + db.all('select em.waip_einsaetze_id from waip_einsatzmittel em ' +
'left join waip_wachen wa on wa.id = em.waip_wachen_id ' + 'left join waip_wachen wa on wa.id = em.waip_wachen_id ' +
'where wa.nr_wache like ?||\'%\' ' + 'where wa.nr_wache like ?||\'%\' ' +
@ -88,11 +89,20 @@ module.exports = function(db) {
} else { } else {
var len = content.toString().length var len = content.toString().length
// content muss 2, 4 oder 6 Zeichen lang sein // content muss 2, 4 oder 6 Zeichen lang sein
if (len != 2 && len != 4 && len != 6) { if (parseInt(content) != 0 && len != 2 && len != 4 && len != 6) {
// Fehler: Wachennummer nicht plausibel. // Fehler: Wachennummer nicht plausibel.
callback && callback(null); callback && callback(null);
} else { } else {
// je nach laenge andere SQL ausfuehren // je nach laenge andere SQL ausfuehren
if (parseInt(content) == 0) {
db.get('select \'1\' length, nr_wache nr, name_wache name from waip_wachen where nr_wache like ?', [content], function(err, row) {
if (err == null && row) {
callback && callback(row);
} else {
callback && callback(null);
};
});
};
if (len == 2) { if (len == 2) {
db.get('select \'2\' length, nr_kreis nr, name_kreis name from waip_wachen where nr_kreis like SUBSTR(?,-2, 2) group by name_kreis LIMIT 1', [content], function(err, row) { db.get('select \'2\' length, nr_kreis nr, name_kreis name from waip_wachen where nr_kreis like SUBSTR(?,-2, 2) group by name_kreis LIMIT 1', [content], function(err, row) {
if (err == null && row) { if (err == null && row) {
@ -150,6 +160,8 @@ module.exports = function(db) {
where em.waip_einsaetze_ID = ? group by w.nr_wache`, [waip_id, waip_id, waip_id], where em.waip_einsaetze_ID = ? group by w.nr_wache`, [waip_id, waip_id, waip_id],
function(err, rows) { function(err, rows) {
if (err == null && rows.length > 0) { if (err == null && rows.length > 0) {
// falls einsätze vorhanden, auch die null hinzufuegen
rows.push({"room":0});
callback && callback(rows); callback && callback(rows);
} else { } else {
callback && callback(null); callback && callback(null);
@ -230,9 +242,10 @@ module.exports = function(db) {
} else { } else {
var len = wachen_nr.toString().length var len = wachen_nr.toString().length
// wachen_nr muss 2, 4 oder 6 Zeichen lang sein // wachen_nr muss 2, 4 oder 6 Zeichen lang sein
if (len != 2 && len != 4 && len != 6) { if (parseInt(wachen_nr) != 0 && len != 2 && len != 4 && len != 6 && len == null) {
callback && callback(null); callback && callback(null);
} else { } else {
if (parseInt(wachen_nr) == 0) {wachen_nr = '%'};
// je nach laenge andere SQL ausfuehren // je nach laenge andere SQL ausfuehren
db.get('SELECT e.EINSATZART, e.STICHWORT, e.SONDERSIGNAL, e.OBJEKT, e.ORT,e.ORTSTEIL, e.STRASSE, e.BESONDERHEITEN, e.wgs84_x, e.wgs84_y, em1.EM_ALARMIERT, em0.EM_WEITERE ' + db.get('SELECT e.EINSATZART, e.STICHWORT, e.SONDERSIGNAL, e.OBJEKT, e.ORT,e.ORTSTEIL, e.STRASSE, e.BESONDERHEITEN, e.wgs84_x, e.wgs84_y, em1.EM_ALARMIERT, em0.EM_WEITERE ' +
'FROM WAIP_EINSAETZE e ' + 'FROM WAIP_EINSAETZE e ' +
@ -305,6 +318,26 @@ module.exports = function(db) {
}); });
}; };
function db_update_client_status(socket_id, client_status) {
db.run('UPDATE waip_clients '+
'SET client_status=\'' + client_status + '\'' +
'WHERE socket_id=\'' + socket_id + '\'');
};
function db_check_client_waipid(socketId, waip_id, callback) {
db.get('SELECT client_status id from waip_clients where socket_id like ?', [socketId], function(err, row) {
if (err == null && row) {
if (row.id == waip_id) {
callback && callback(row);
} else {
callback && callback(null);
};
} else {
callback && callback(null);
};
});
};
return { return {
db_einsatz_speichern: db_einsatz_speichern, db_einsatz_speichern: db_einsatz_speichern,
db_einsatz_laden: db_einsatz_laden, db_einsatz_laden: db_einsatz_laden,
@ -323,7 +356,9 @@ module.exports = function(db) {
db_client_save: db_client_save, db_client_save: db_client_save,
db_client_delete: db_client_delete, db_client_delete: db_client_delete,
db_tts_einsatzmittel: db_tts_einsatzmittel, db_tts_einsatzmittel: db_tts_einsatzmittel,
db_get_socket_by_id:db_get_socket_by_id db_get_socket_by_id: db_get_socket_by_id,
db_update_client_status: db_update_client_status,
db_check_client_waipid: db_check_client_waipid
}; };
}; };

View File

@ -26,10 +26,12 @@ module.exports = function(io, sql, async, app_cfg) {
console.log('Einsatz ' + result_einsatz[0].waip_einsaetze_ID + ' fuer Wache ' + wachen_id + ' vorhanden'); console.log('Einsatz ' + result_einsatz[0].waip_einsaetze_ID + ' fuer Wache ' + wachen_id + ' vorhanden');
//letzten Einsatz verteilen //letzten Einsatz verteilen
einsatz_verteilen(result_einsatz[0].waip_einsaetze_ID, socket.id, wachen_id); einsatz_verteilen(result_einsatz[0].waip_einsaetze_ID, socket.id, wachen_id);
sql.db_update_client_status(socket.id, result_einsatz[0].waip_einsaetze_ID);
} else { } else {
console.log('Kein Einsatz fuer Wache ' + wachen_id + ' vorhanden, Standby'); console.log('Kein Einsatz fuer Wache ' + wachen_id + ' vorhanden, Standby');
//oder falls kein Einsatz vorhanden ist, dann //oder falls kein Einsatz vorhanden ist, dann
io.sockets.to(socket.id).emit('io.standby', null); io.sockets.to(socket.id).emit('io.standby', null);
sql.db_update_client_status(socket.id, 'standby');
}; };
}); });
}); });
@ -75,6 +77,7 @@ module.exports = function(io, sql, async, app_cfg) {
// Einsatz senden // Einsatz senden
console.log('Einsatz ' + waip_id + ' fuer Wache ' + wachen_nr + ' an Socket ' + socket_id + ' gesendet'); console.log('Einsatz ' + waip_id + ' fuer Wache ' + wachen_nr + ' an Socket ' + socket_id + ' gesendet');
io.sockets.to(socket_id).emit('io.neuerEinsatz', einsatzdaten); io.sockets.to(socket_id).emit('io.neuerEinsatz', einsatzdaten);
sql.db_update_client_status(socket_id, waip_id);
// Sound erstellen // Sound erstellen
tts_erstellen(app_cfg, socket_id, einsatzdaten, function(tts) { tts_erstellen(app_cfg, socket_id, einsatzdaten, function(tts) {
// Sound senden // Sound senden
@ -84,7 +87,8 @@ module.exports = function(io, sql, async, app_cfg) {
} else { } else {
// Standby senden // Standby senden
io.sockets.to(socket_id).emit('io.standby', null); io.sockets.to(socket_id).emit('io.standby', null);
console.log('Kein Einsatz fuer Wache ' + wachen_nr + ' vorhanden, Standby an Socket ' + socket_id + ' gesendet'); console.log('Kein Einsatz fuer Wache ' + wachen_nr + ' vorhanden, Standby an Socket ' + socket_id + ' gesendet..');
sql.db_update_client_status(socket_id, 'standby');
}; };
}); });
}; };
@ -179,8 +183,14 @@ module.exports = function(io, sql, async, app_cfg) {
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
io.sockets.to(socketId).emit('io.standby', null); sql.db_check_client_waipid(socketId, waip_id, function(same_id){
console.log('Standby an Socket ' + socketId + ' gesendet'); if (same_id) {
io.sockets.to(socketId).emit('io.standby', null);
io.sockets.to(socketId).emit('io.stopaudio', null);
console.log('Standby an Socket ' + socketId + ' gesendet');
sql.db_update_client_status(socketId, 'standby');
};
});
}); });
}; };
}); });