mirror of
https://github.com/Team254/cheesy-arena-lite.git
synced 2026-03-09 13:46:44 -04:00
Add realtime score to match play view.
This commit is contained in:
@@ -156,6 +156,8 @@ func MatchPlayWebsocketHandler(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
matchTimeListener := mainArena.matchTimeNotifier.Listen()
|
||||
defer close(matchTimeListener)
|
||||
realtimeScoreListener := mainArena.realtimeScoreNotifier.Listen()
|
||||
defer close(realtimeScoreListener)
|
||||
robotStatusListener := mainArena.robotStatusNotifier.Listen()
|
||||
defer close(robotStatusListener)
|
||||
audienceDisplayListener := mainArena.audienceDisplayNotifier.Listen()
|
||||
@@ -183,6 +185,15 @@ func MatchPlayWebsocketHandler(w http.ResponseWriter, r *http.Request) {
|
||||
log.Printf("Websocket error: %s", err)
|
||||
return
|
||||
}
|
||||
data = struct {
|
||||
RedScore int
|
||||
BlueScore int
|
||||
}{mainArena.redRealtimeScore.Score(), mainArena.blueRealtimeScore.Score()}
|
||||
err = websocket.Write("realtimeScore", data)
|
||||
if err != nil {
|
||||
log.Printf("Websocket error: %s", err)
|
||||
return
|
||||
}
|
||||
err = websocket.Write("setAudienceDisplay", mainArena.audienceDisplayScreen)
|
||||
if err != nil {
|
||||
log.Printf("Websocket error: %s", err)
|
||||
@@ -217,6 +228,15 @@ func MatchPlayWebsocketHandler(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
messageType = "matchTime"
|
||||
message = MatchTimeMessage{mainArena.MatchState, matchTimeSec.(int)}
|
||||
case _, ok := <-realtimeScoreListener:
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
messageType = "realtimeScore"
|
||||
message = struct {
|
||||
RedScore int
|
||||
BlueScore int
|
||||
}{mainArena.redRealtimeScore.Score(), mainArena.blueRealtimeScore.Score()}
|
||||
case _, ok := <-robotStatusListener:
|
||||
if !ok {
|
||||
return
|
||||
|
||||
@@ -252,6 +252,7 @@ func TestMatchPlayWebsocketCommands(t *testing.T) {
|
||||
readWebsocketType(t, ws, "status")
|
||||
readWebsocketType(t, ws, "matchTiming")
|
||||
readWebsocketType(t, ws, "matchTime")
|
||||
readWebsocketType(t, ws, "realtimeScore")
|
||||
readWebsocketType(t, ws, "setAudienceDisplay")
|
||||
readWebsocketType(t, ws, "scoringStatus")
|
||||
readWebsocketType(t, ws, "setAllianceStationDisplay")
|
||||
@@ -308,13 +309,21 @@ func TestMatchPlayWebsocketCommands(t *testing.T) {
|
||||
mainArena.blueRealtimeScore.CurrentScore.Totes = 37
|
||||
ws.Write("commitResults", nil)
|
||||
readWebsocketType(t, ws, "reload")
|
||||
readWebsocketType(t, ws, "setAllianceStationDisplay")
|
||||
messages := readWebsocketMultiple(t, ws, 2)
|
||||
_, ok := messages["realtimeScore"]
|
||||
assert.True(t, ok)
|
||||
_, ok = messages["setAllianceStationDisplay"]
|
||||
assert.True(t, ok)
|
||||
assert.Equal(t, 29, mainArena.savedMatchResult.RedScore.Totes)
|
||||
assert.Equal(t, 37, mainArena.savedMatchResult.BlueScore.Totes)
|
||||
assert.Equal(t, PRE_MATCH, mainArena.MatchState)
|
||||
ws.Write("discardResults", nil)
|
||||
readWebsocketType(t, ws, "reload")
|
||||
readWebsocketType(t, ws, "setAllianceStationDisplay")
|
||||
messages = readWebsocketMultiple(t, ws, 2)
|
||||
_, ok = messages["realtimeScore"]
|
||||
assert.True(t, ok)
|
||||
_, ok = messages["setAllianceStationDisplay"]
|
||||
assert.True(t, ok)
|
||||
assert.Equal(t, PRE_MATCH, mainArena.MatchState)
|
||||
|
||||
// Test changing the displays.
|
||||
@@ -348,6 +357,7 @@ func TestMatchPlayWebsocketNotifications(t *testing.T) {
|
||||
readWebsocketType(t, ws, "status")
|
||||
readWebsocketType(t, ws, "matchTiming")
|
||||
readWebsocketType(t, ws, "matchTime")
|
||||
readWebsocketType(t, ws, "realtimeScore")
|
||||
readWebsocketType(t, ws, "setAudienceDisplay")
|
||||
readWebsocketType(t, ws, "scoringStatus")
|
||||
|
||||
|
||||
@@ -132,6 +132,12 @@ var handleMatchTime = function(data) {
|
||||
});
|
||||
};
|
||||
|
||||
// Handles a websocket message to update the match score.
|
||||
var handleRealtimeScore = function(data) {
|
||||
$("#redScore").text(data.RedScore);
|
||||
$("#blueScore").text(data.BlueScore);
|
||||
};
|
||||
|
||||
// Handles a websocket message to update the audience display screen selector.
|
||||
var handleSetAudienceDisplay = function(data) {
|
||||
$("input[name=audienceDisplay]:checked").prop("checked", false);
|
||||
@@ -161,6 +167,7 @@ $(function() {
|
||||
status: function(event) { handleStatus(event.data); },
|
||||
matchTiming: function(event) { handleMatchTiming(event.data); },
|
||||
matchTime: function(event) { handleMatchTime(event.data); },
|
||||
realtimeScore: function(event) { handleRealtimeScore(event.data); },
|
||||
setAudienceDisplay: function(event) { handleSetAudienceDisplay(event.data); },
|
||||
scoringStatus: function(event) { handleScoringStatus(event.data); },
|
||||
setAllianceStationDisplay: function(event) { handleSetAllianceStationDisplay(event.data); }
|
||||
|
||||
@@ -54,8 +54,10 @@
|
||||
</div>
|
||||
<div class="col-lg-8">
|
||||
<div class="row text-center">
|
||||
<div id="matchState" class="col-lg-2 col-lg-offset-4 well well-sm"> </div>
|
||||
<div id="matchTime" class="col-lg-2 well well-sm"> </div>
|
||||
<div id="matchState" class="col-lg-2 col-lg-offset-2 well well-sm text-center"> </div>
|
||||
<div id="matchTime" class="col-lg-2 well well-sm text-center"> </div>
|
||||
<div id="redScore" class="col-lg-2 well well-sm well-red text-center"> </div>
|
||||
<div id="blueScore" class="col-lg-2 well well-sm well-blue text-center"> </div>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<div class="col-lg-6 well well-darkblue">
|
||||
|
||||
Reference in New Issue
Block a user