diff --git a/static/css/field_monitor_display.css b/static/css/field_monitor_display.css index e0f0dcd..123a67f 100644 --- a/static/css/field_monitor_display.css +++ b/static/css/field_monitor_display.css @@ -21,7 +21,16 @@ body { justify-content: center; } .position-row { - height: 33.3%; + height: 31%; +} +#eventStatusRow { + height: 7%; + display: flex; + align-items: center; + justify-content: space-evenly; + background-color: #333; + font-size: 1.5vw; + text-transform: uppercase; } .left-position, .right-position { width: 8%; diff --git a/static/js/field_monitor_display.js b/static/js/field_monitor_display.js index 3a129e4..ee65cf9 100644 --- a/static/js/field_monitor_display.js +++ b/static/js/field_monitor_display.js @@ -98,6 +98,16 @@ var handleArenaStatus = function(data) { }); }; +// Handles a websocket message to update the event status message. +var handleEventStatus = function(data) { + if (data.CycleTime === "") { + $("#cycleTimeMessage").text("Last cycle time: Unknown"); + } else { + $("#cycleTimeMessage").text("Last cycle time: " + data.CycleTime); + } + $("#earlyLateMessage").text(data.EarlyLateMessage); +}; + $(function() { // Read the configuration for this display from the URL query string. var urlParams = new URLSearchParams(window.location.search); @@ -114,6 +124,7 @@ $(function() { // Set up the websocket back to the server. websocket = new CheesyWebsocket("/displays/field_monitor/websocket", { - arenaStatus: function(event) { handleArenaStatus(event.data); } + arenaStatus: function(event) { handleArenaStatus(event.data); }, + eventStatus: function(event) { handleEventStatus(event.data); }, }); }); diff --git a/templates/field_monitor_display.html b/templates/field_monitor_display.html index 89eb7bd..01ddf37 100644 --- a/templates/field_monitor_display.html +++ b/templates/field_monitor_display.html @@ -17,6 +17,10 @@ {{template "row" dict "leftPosition" "1" "rightPosition" "3"}} {{template "row" dict "leftPosition" "2" "rightPosition" "2"}} {{template "row" dict "leftPosition" "3" "rightPosition" "1"}} +
+
+
+
diff --git a/web/field_monitor_display.go b/web/field_monitor_display.go index 2d4ce63..df59081 100644 --- a/web/field_monitor_display.go +++ b/web/field_monitor_display.go @@ -49,5 +49,6 @@ func (web *Web) fieldMonitorDisplayWebsocketHandler(w http.ResponseWriter, r *ht defer ws.Close() // Subscribe the websocket to the notifiers whose messages will be passed on to the client. - ws.HandleNotifiers(display.Notifier, web.arena.ArenaStatusNotifier, web.arena.ReloadDisplaysNotifier) + ws.HandleNotifiers(display.Notifier, web.arena.ArenaStatusNotifier, web.arena.EventStatusNotifier, + web.arena.ReloadDisplaysNotifier) } diff --git a/web/field_monitor_display_test.go b/web/field_monitor_display_test.go index da5b017..6122cb2 100644 --- a/web/field_monitor_display_test.go +++ b/web/field_monitor_display_test.go @@ -31,4 +31,5 @@ func TestFieldMonitorDisplayWebsocket(t *testing.T) { // Should get a few status updates right after connection. readWebsocketType(t, ws, "displayConfiguration") readWebsocketType(t, ws, "arenaStatus") + readWebsocketType(t, ws, "eventStatus") } diff --git a/web/pit_display_test.go b/web/pit_display_test.go index 3001ced..d6a7049 100644 --- a/web/pit_display_test.go +++ b/web/pit_display_test.go @@ -31,8 +31,4 @@ func TestPitDisplayWebsocket(t *testing.T) { // Should get a few status updates right after connection. readWebsocketType(t, ws, "displayConfiguration") readWebsocketType(t, ws, "eventStatus") - - // Check forced reloading as that is the only purpose the pit websocket serves. - web.arena.ReloadDisplaysNotifier.Notify() - readWebsocketType(t, ws, "reload") }