diff --git a/public/js/client_dbrd.js b/public/js/client_dbrd.js index 4809ed9..27f309c 100755 --- a/public/js/client_dbrd.js +++ b/public/js/client_dbrd.js @@ -362,3 +362,224 @@ if (arrayItem.agt){ }); console.log(items.get()); + + + + /* ########################### */ +/* ######## SOCKET.IO ######## */ +/* ########################### */ + +// Websocket +var socket = io('/dbrd'); + +// Wachen-ID bei Connect an Server senden +socket.on('connect', function () { + socket.emit('dbrd', dbrd_uuid); + $('#waipModal').modal('hide'); + // TODO: bei Reconnect des Clients durch Verbindungsabbruch, erneut Daten anfordern +}); + +socket.on('connect_error', function (err) { + $('#waipModalTitle').html('FEHLER'); + $('#waipModalBody').html('Verbindung zum Server getrennt!'); + $('#waipModal').modal('show'); +}); + +// ID von Server und Client vergleichen, falls ungleich -> Seite neu laden +socket.on('io.version', function (server_id) { + if (client_id != server_id) { + $('#waipModal').modal('hide'); + setTimeout(function () { + $('#waipModalTitle').html('ACHTUNG'); + $('#waipModalBody').html('Neue Server-Version. Seite wird in 10 Sekunden neu geladen!'); + $('#waipModal').modal('show'); + setTimeout(function () { + location.reload(); + }, 10000); + }, 1000); + }; +}); + +// ggf. Fehler ausgeben +socket.on('io.error', function (data) { + console.log('Error:', data); +}); + + +// Daten löschen, Uhr anzeigen +socket.on('io.standby', function (data) { + // Einsatz-ID auf 0 setzen + waip_id = null; + // TODO: Wenn vorhanden, hier #hilfsfrist zurücksetzen + $('#einsatz_art').removeClass(function (index, className) { + return (className.match(/(^|\s)bg-\S+/g) || []).join(' '); + }); + $('#einsatz_stichwort').removeClass(); + $('#einsatz_stichwort').html(''); + $('#sondersignal').removeClass(); + $('#ortsdaten').html(''); + $('#besonderheiten').html(''); + $('#em_alarmiert').empty(); + $('#em_weitere').html(''); + reset_rmld(); + map.setView(new L.LatLng(0, 0), 14); + // Tareset_responsebleau ausblenden + $('#waiptableau').addClass('d-none'); + $('#waipclock').removeClass('d-none'); + // Text anpassen + resize_text(); +}); + +// Einsatzdaten laden, Wachalarm anzeigen +socket.on('io.neuerEinsatz', function (data) { + // DEBUG + console.log(data); + // Einsatz-ID speichern + waip_id = data.id; + // Hintergrund der Einsatzart zunächst entfernen + $('#einsatz_art').removeClass(function (index, className) { + return (className.match(/(^|\s)bg-\S+/g) || []).join(' '); + }); + // Icon der Einsatzart enfernen + $('#einsatz_stichwort').removeClass(); + // Art und Stichwort festlegen hinterlegen + switch (data.einsatzart) { + case 'Brandeinsatz': + $('#einsatz_art').addClass('bg-danger'); + $('#einsatz_stichwort').addClass('ion-md-flame'); + $('#rueckmeldung').removeClass('d-none'); + break; + case 'Hilfeleistungseinsatz': + $('#einsatz_art').addClass('bg-info'); + $('#einsatz_stichwort').addClass('ion-md-construct'); + $('#rueckmeldung').removeClass('d-none'); + break; + case 'Rettungseinsatz': + $('#einsatz_art').addClass('bg-warning'); + $('#einsatz_stichwort').addClass('ion-md-medkit'); + break; + case 'Krankentransport': + $('#einsatz_art').addClass('bg-success'); + $('#einsatz_stichwort').addClass('ion-md-medical'); + break; + default: + $('#einsatz_art').addClass('bg-secondary'); + $('#einsatz_stichwort').addClass('ion-md-information-circle'); + }; + $('#einsatz_stichwort').html(' ' + data.stichwort); + // Sondersignal setzen + $('#sondersignal').removeClass(); + switch (data.sondersignal) { + case 1: + $('#sondersignal').addClass('ion-md-notifications'); + break; + default: + $('#sondersignal').addClass('ion-md-notifications-off'); + }; + // Ortsdaten zusammenstellen und setzen + var small_ortsdaten; + small_ortsdaten = ''; + if (data.objekt) { + small_ortsdaten = small_ortsdaten + break_text_15(data.objekt) + '
'; + }; + if (data.ort) { + small_ortsdaten = small_ortsdaten + break_text_15(data.ort) + '
'; + }; + if (data.ortsteil) { + small_ortsdaten = small_ortsdaten + break_text_15(data.ortsteil) + '
'; + }; + if (data.strasse) { + small_ortsdaten = small_ortsdaten + break_text_15(data.strasse) + '
'; + }; + if (small_ortsdaten.substr(small_ortsdaten.length - 4) == '
') { + small_ortsdaten = small_ortsdaten.slice(0, -4); + }; + $('#ortsdaten').html(small_ortsdaten); + // Besonderheiten setzen + $('#besonderheiten').html(break_text_35(data.besonderheiten)); + // alarmierte Einsatzmittel setzen + $('#em_alarmiert').empty(); + var data_em_alarmiert = JSON.parse(data.em_alarmiert); + for (var i in data_em_alarmiert) { + var tmp = data_em_alarmiert[i].name.replace(/[^a-z0-9\s]/gi, '').replace(/[_\s]/g, '-'); + $('#em_alarmiert').append('
'); + $('#cn_' + tmp).append('
' + data_em_alarmiert[i].name + '
'); + }; + // weitere alarmierte Einsatzmittel setzen + $('#em_weitere').html(''); + var data_em_weitere = JSON.parse(data.em_weitere); + if (!data_em_weitere == null) { + var tmp; + for (var i in data_em_weitere) { + if (tmp) { + tmp = tmp + ', ' + data_em_weitere[i].name; + } else { + tmp = data_em_weitere[i].name; + }; + }; + $('#em_weitere').html(tmp); + }; + // Karte leeren + map.removeLayer(marker); + map.removeLayer(geojson); + // Karte setzen + if (data.wgs84_x && data.wgs84_y) { + marker = L.marker(new L.LatLng(data.wgs84_x, data.wgs84_y), { + icon: redIcon + }).addTo(map); + map.setView(new L.LatLng(data.wgs84_x, data.wgs84_y), 15); + } else { + geojson = L.geoJSON(JSON.parse(data.wgs84_area)); + geojson.addTo(map); + map.fitBounds(geojson.getBounds()); + map.setZoom(13); + }; + // Ablaufzeit setzen + start_counter(data.zeitstempel, data.ablaufzeit); + // alte Rückmeldung entfernen + reset_rmld(data.uuid); + recount_rmld(data.uuid); + // TODO: Einzeige vergrößern wenn Felder nicht angezeigt werden + // Uhr ausblenden + $('#waipclock').addClass('d-none'); + $('#waiptableau').removeClass('d-none'); + // Text anpassen + resize_text(); +}); + +socket.on('io.response', function (data) { + // DEBUG + console.log(data); + // Neue Rueckmeldung hinterlegen + data.forEach(function (arrayItem) { + // HTML festlegen + var item_type = ''; + // wenn Einsatzkraft dann: + if (arrayItem.einsatzkraft) { + item_type = 'ek'; + }; + // wenn Maschinist dann: + if (arrayItem.maschinist) { + item_type = 'ma'; + }; + // wenn Fuehrungskraft dann: + if (arrayItem.fuehrungskraft) { + item_type = 'fk'; + }; + // wenn AGT + var item_agt = arrayItem.agt; + // Variablen für Anzeige vorbereiten + var pg_waip_uuid = arrayItem.waip_uuid; + console.log(arrayItem.waip_uuid); + console.log(pg_waip_uuid); + var pg_rmld_uuid = arrayItem.rmld_uuid; + var pg_start = new Date(arrayItem.set_time); + var pg_end = new Date(arrayItem.arrival_time); + // Progressbar hinterlegen + add_resp_progressbar(pg_waip_uuid, pg_rmld_uuid, item_type, item_agt, pg_start, pg_end); + // Anzahl der Rückmeldung zählen + recount_rmld(pg_waip_uuid); + }); + // Text anpassen + resize_text(); +}); \ No newline at end of file diff --git a/server/socket.js b/server/socket.js index 456c7e5..31361a3 100755 --- a/server/socket.js +++ b/server/socket.js @@ -94,7 +94,7 @@ nsp_dbrd.on('connection', function (socket) { }); }); // Disconnect - socket.on('disconnect', function () { + socket.on('disconnect', function (uuid) { sql.db_log('DEBUG', 'Dashboard ' + uuid + ' von ' + client_ip + ' (' + socket.id + ') geschlossen.'); sql.db_client_delete(socket); }); diff --git a/views/dbrd.pug b/views/dbrd.pug index 88af82a..fa10df2 100755 --- a/views/dbrd.pug +++ b/views/dbrd.pug @@ -9,4 +9,6 @@ block content include includes/master_dashboard script(src='/socket.io/socket.io.js') script(src='/js/leaflet.js') + script. + dbrd_uuid="#{dbrd_uuid}" script(src='/js/client_dbrd.js') \ No newline at end of file