Add realtime score to match play view.

This commit is contained in:
Patrick Fairbank
2015-03-28 20:35:40 -07:00
parent e8b307bf24
commit dedd9376f9
4 changed files with 43 additions and 4 deletions

View File

@@ -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

View File

@@ -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")

View File

@@ -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); }

View File

@@ -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">&nbsp;</div>
<div id="matchTime" class="col-lg-2 well well-sm">&nbsp;</div>
<div id="matchState" class="col-lg-2 col-lg-offset-2 well well-sm text-center">&nbsp;</div>
<div id="matchTime" class="col-lg-2 well well-sm text-center">&nbsp;</div>
<div id="redScore" class="col-lg-2 well well-sm well-red text-center">&nbsp;</div>
<div id="blueScore" class="col-lg-2 well well-sm well-blue text-center">&nbsp;</div>
</div>
<div class="row text-center">
<div class="col-lg-6 well well-darkblue">