From 0c475b0a2041032fed9f34c44d38dacd32bf4df2 Mon Sep 17 00:00:00 2001 From: Patrick Fairbank Date: Wed, 11 Apr 2018 23:26:36 -0700 Subject: [PATCH] Add generation and sending of game-specific data. --- .../20140524180123_CreateMatches.sql | 3 +- field/arena.go | 71 +++++++++++++----- field/arena_test.go | 26 +++++-- field/driver_station_connection.go | 22 ++++++ game/game_specific_data.go | 25 ++++++ game/game_specific_data_test.go | 38 ++++++++++ game/match_timing.go | 12 +-- model/match.go | 1 + model/match_test.go | 10 +-- static/audio/match_warmup.wav | Bin 0 -> 188848 bytes static/js/match_play.js | 9 ++- static/js/match_timing.js | 23 +++--- templates/audience_display.html | 1 + templates/match_play.html | 6 +- web/alliance_station_display_test.go | 6 ++ web/audience_display_test.go | 2 +- web/match_play.go | 4 +- web/match_play_test.go | 36 +++++---- 18 files changed, 228 insertions(+), 67 deletions(-) create mode 100644 game/game_specific_data.go create mode 100644 game/game_specific_data_test.go create mode 100644 static/audio/match_warmup.wav diff --git a/db/migrations/20140524180123_CreateMatches.sql b/db/migrations/20140524180123_CreateMatches.sql index 24af415..0db04b1 100644 --- a/db/migrations/20140524180123_CreateMatches.sql +++ b/db/migrations/20140524180123_CreateMatches.sql @@ -21,7 +21,8 @@ CREATE TABLE matches ( blue3issurrogate bool, status VARCHAR(16), startedat DATETIME, - winner VARCHAR(16) + winner VARCHAR(16), + gamespecificdata VARCHAR(3) ); CREATE UNIQUE INDEX type_displayname ON matches(type, displayname); diff --git a/field/arena.go b/field/arena.go index 9878eab..912bd39 100644 --- a/field/arena.go +++ b/field/arena.go @@ -24,11 +24,12 @@ const ( const ( PreMatch = 0 StartMatch = 1 - AutoPeriod = 2 - PausePeriod = 3 - TeleopPeriod = 4 - EndgamePeriod = 5 - PostMatch = 6 + WarmupPeriod = 2 + AutoPeriod = 3 + PausePeriod = 4 + TeleopPeriod = 5 + EndgamePeriod = 6 + PostMatch = 7 ) type Arena struct { @@ -83,6 +84,7 @@ type ArenaStatus struct { CanStartMatch bool PlcIsHealthy bool FieldEstop bool + GameSpecificData string } type AllianceStation struct { @@ -286,7 +288,12 @@ func (arena *Arena) SubstituteTeam(teamId int, station string) error { func (arena *Arena) StartMatch() error { err := arena.checkCanStartMatch() if err == nil { - // Save the match start time to the database for posterity. + // Generate game-specific data or allow manual input for test matches. + if arena.CurrentMatch.Type != "test" || !game.IsValidGameSpecificData(arena.CurrentMatch.GameSpecificData) { + arena.CurrentMatch.GameSpecificData = game.GenerateGameSpecificData() + } + + // Save the match start time and game-specifc data to the database for posterity. arena.CurrentMatch.StartedAt = time.Now() if arena.CurrentMatch.Type != "test" { arena.Database.SaveMatch(arena.CurrentMatch) @@ -361,23 +368,35 @@ func (arena *Arena) Update() { auto = true enabled = false case StartMatch: - arena.MatchState = AutoPeriod + arena.MatchState = WarmupPeriod arena.MatchStartTime = time.Now() arena.LastMatchTimeSec = -1 auto = true - enabled = true - sendDsPacket = true + enabled = false arena.AudienceDisplayScreen = "match" arena.AudienceDisplayNotifier.Notify(nil) - if !arena.MuteMatchSounds { - arena.PlaySoundNotifier.Notify("match-start") - } arena.FieldTestMode = "" arena.Plc.ResetCounts() + arena.sendGameSpecificDataPacket() + if !arena.MuteMatchSounds { + arena.PlaySoundNotifier.Notify("match-warmup") + } + case WarmupPeriod: + auto = true + enabled = false + if matchTimeSec >= float64(game.MatchTiming.WarmupDurationSec) { + arena.MatchState = AutoPeriod + auto = true + enabled = true + sendDsPacket = true + if !arena.MuteMatchSounds { + arena.PlaySoundNotifier.Notify("match-start") + } + } case AutoPeriod: auto = true enabled = true - if matchTimeSec >= float64(game.MatchTiming.AutoDurationSec) { + if matchTimeSec >= float64(game.MatchTiming.WarmupDurationSec+game.MatchTiming.AutoDurationSec) { arena.MatchState = PausePeriod auto = false enabled = false @@ -389,7 +408,8 @@ func (arena *Arena) Update() { case PausePeriod: auto = false enabled = false - if matchTimeSec >= float64(game.MatchTiming.AutoDurationSec+game.MatchTiming.PauseDurationSec) { + if matchTimeSec >= float64(game.MatchTiming.WarmupDurationSec+game.MatchTiming.AutoDurationSec+ + game.MatchTiming.PauseDurationSec) { arena.MatchState = TeleopPeriod auto = false enabled = true @@ -401,8 +421,8 @@ func (arena *Arena) Update() { case TeleopPeriod: auto = false enabled = true - if matchTimeSec >= float64(game.MatchTiming.AutoDurationSec+game.MatchTiming.PauseDurationSec+ - game.MatchTiming.TeleopDurationSec-game.MatchTiming.EndgameTimeLeftSec) { + if matchTimeSec >= float64(game.MatchTiming.WarmupDurationSec+game.MatchTiming.AutoDurationSec+ + game.MatchTiming.PauseDurationSec+game.MatchTiming.TeleopDurationSec-game.MatchTiming.EndgameTimeLeftSec) { arena.MatchState = EndgamePeriod sendDsPacket = false if !arena.MuteMatchSounds { @@ -412,8 +432,8 @@ func (arena *Arena) Update() { case EndgamePeriod: auto = false enabled = true - if matchTimeSec >= float64(game.MatchTiming.AutoDurationSec+game.MatchTiming.PauseDurationSec+ - game.MatchTiming.TeleopDurationSec) { + if matchTimeSec >= float64(game.MatchTiming.WarmupDurationSec+game.MatchTiming.AutoDurationSec+ + game.MatchTiming.PauseDurationSec+game.MatchTiming.TeleopDurationSec) { arena.MatchState = PostMatch auto = false enabled = false @@ -481,7 +501,7 @@ func (arena *Arena) BlueScoreSummary() *game.ScoreSummary { func (arena *Arena) GetStatus() *ArenaStatus { return &ArenaStatus{arena.AllianceStations, arena.MatchState, arena.checkCanStartMatch() == nil, - arena.Plc.IsHealthy, arena.Plc.GetFieldEstop()} + arena.Plc.IsHealthy, arena.Plc.GetFieldEstop(), arena.CurrentMatch.GameSpecificData} } // Loads a team into an alliance station, cleaning up the previous team there if there is one. @@ -587,6 +607,19 @@ func (arena *Arena) sendDsPacket(auto bool, enabled bool) { arena.lastDsPacketTime = time.Now() } +func (arena *Arena) sendGameSpecificDataPacket() { + for _, allianceStation := range arena.AllianceStations { + dsConn := allianceStation.DsConn + if dsConn != nil { + err := dsConn.sendGameSpecificDataPacket(arena.CurrentMatch.GameSpecificData) + if err != nil { + log.Printf("Error sending game-specific data packet to Team %d: %v", dsConn.TeamId, err) + } + } + } + arena.lastDsPacketTime = time.Now() +} + // Returns the alliance station identifier for the given team, or the empty string if the team is not present // in the current match. func (arena *Arena) getAssignedAllianceStation(teamId int) string { diff --git a/field/arena_test.go b/field/arena_test.go index 10afd19..9125a2b 100644 --- a/field/arena_test.go +++ b/field/arena_test.go @@ -87,6 +87,15 @@ func TestArenaMatchFlow(t *testing.T) { err = arena.StartMatch() assert.Nil(t, err) arena.Update() + assert.Equal(t, WarmupPeriod, arena.MatchState) + assert.Equal(t, true, arena.AllianceStations["B3"].DsConn.Auto) + assert.Equal(t, false, arena.AllianceStations["B3"].DsConn.Enabled) + arena.Update() + assert.Equal(t, WarmupPeriod, arena.MatchState) + assert.Equal(t, true, arena.AllianceStations["B3"].DsConn.Auto) + assert.Equal(t, false, arena.AllianceStations["B3"].DsConn.Enabled) + arena.MatchStartTime = time.Now().Add(-time.Duration(game.MatchTiming.WarmupDurationSec) * time.Second) + arena.Update() assert.Equal(t, AutoPeriod, arena.MatchState) assert.Equal(t, true, arena.AllianceStations["B3"].DsConn.Auto) assert.Equal(t, true, arena.AllianceStations["B3"].DsConn.Enabled) @@ -94,7 +103,8 @@ func TestArenaMatchFlow(t *testing.T) { assert.Equal(t, AutoPeriod, arena.MatchState) assert.Equal(t, true, arena.AllianceStations["B3"].DsConn.Auto) assert.Equal(t, true, arena.AllianceStations["B3"].DsConn.Enabled) - arena.MatchStartTime = time.Now().Add(-time.Duration(game.MatchTiming.AutoDurationSec) * time.Second) + arena.MatchStartTime = time.Now().Add(-time.Duration(game.MatchTiming.WarmupDurationSec+ + game.MatchTiming.AutoDurationSec) * time.Second) arena.Update() assert.Equal(t, PausePeriod, arena.MatchState) assert.Equal(t, false, arena.AllianceStations["B3"].DsConn.Auto) @@ -103,8 +113,8 @@ func TestArenaMatchFlow(t *testing.T) { assert.Equal(t, PausePeriod, arena.MatchState) assert.Equal(t, false, arena.AllianceStations["B3"].DsConn.Auto) assert.Equal(t, false, arena.AllianceStations["B3"].DsConn.Enabled) - arena.MatchStartTime = time.Now().Add(-time.Duration(game.MatchTiming.AutoDurationSec+ - game.MatchTiming.PauseDurationSec) * time.Second) + arena.MatchStartTime = time.Now().Add(-time.Duration(game.MatchTiming.WarmupDurationSec+ + game.MatchTiming.AutoDurationSec+game.MatchTiming.PauseDurationSec) * time.Second) arena.Update() assert.Equal(t, TeleopPeriod, arena.MatchState) assert.Equal(t, false, arena.AllianceStations["B3"].DsConn.Auto) @@ -142,8 +152,9 @@ func TestArenaMatchFlow(t *testing.T) { // Check endgame and match end. arena.MatchStartTime = time.Now(). - Add(-time.Duration(game.MatchTiming.AutoDurationSec+game.MatchTiming.PauseDurationSec+ - game.MatchTiming.TeleopDurationSec-game.MatchTiming.EndgameTimeLeftSec) * time.Second) + Add(-time.Duration(game.MatchTiming.WarmupDurationSec+game.MatchTiming.AutoDurationSec+ + game.MatchTiming.PauseDurationSec+game.MatchTiming.TeleopDurationSec-game.MatchTiming.EndgameTimeLeftSec) * + time.Second) arena.Update() assert.Equal(t, EndgamePeriod, arena.MatchState) assert.Equal(t, false, arena.AllianceStations["B3"].DsConn.Auto) @@ -152,8 +163,9 @@ func TestArenaMatchFlow(t *testing.T) { assert.Equal(t, EndgamePeriod, arena.MatchState) assert.Equal(t, false, arena.AllianceStations["B3"].DsConn.Auto) assert.Equal(t, true, arena.AllianceStations["B3"].DsConn.Enabled) - arena.MatchStartTime = time.Now().Add(-time.Duration(game.MatchTiming.AutoDurationSec+ - game.MatchTiming.PauseDurationSec+game.MatchTiming.TeleopDurationSec) * time.Second) + arena.MatchStartTime = time.Now().Add(-time.Duration(game.MatchTiming.WarmupDurationSec+ + game.MatchTiming.AutoDurationSec+game.MatchTiming.PauseDurationSec+game.MatchTiming.TeleopDurationSec) * + time.Second) arena.Update() assert.Equal(t, PostMatch, arena.MatchState) assert.Equal(t, false, arena.AllianceStations["B3"].DsConn.Auto) diff --git a/field/driver_station_connection.go b/field/driver_station_connection.go index 4146f80..5f3eebc 100644 --- a/field/driver_station_connection.go +++ b/field/driver_station_connection.go @@ -387,3 +387,25 @@ func (dsConn *DriverStationConnection) handleTcpConnection(arena *Arena) { } } } + +func (dsConn *DriverStationConnection) sendGameSpecificDataPacket(gameSpecificData string) error { + byteData := []byte(gameSpecificData) + size := len(byteData) + packet := make([]byte, size+4) + + packet[0] = 0 // Packet size + packet[1] = byte(size + 2) // Packet size + packet[2] = 28 // Packet type + packet[3] = byte(size) // Data size + + // Fill the rest of the packet with the data. + for i, character := range byteData { + packet[i+4] = character + } + + if dsConn.tcpConn != nil { + _, err := dsConn.tcpConn.Write(packet) + return err + } + return nil +} diff --git a/game/game_specific_data.go b/game/game_specific_data.go new file mode 100644 index 0000000..4a7356b --- /dev/null +++ b/game/game_specific_data.go @@ -0,0 +1,25 @@ +// Copyright 2018 Team 254. All Rights Reserved. +// Author: pat@patfairbank.com (Patrick Fairbank) +// +// Logic to generate the 2018 game-specific data. + +package game + +import "math/rand" + +var validGameSpecificDatas = []string{"RRR", "LLL", "RLR", "LRL"} + +// Returns a random configuration. +func GenerateGameSpecificData() string { + return validGameSpecificDatas[rand.Intn(len(validGameSpecificDatas))] +} + +// Returns true if the given game specific data is valid. +func IsValidGameSpecificData(gameSpecificData string) bool { + for _, data := range validGameSpecificDatas { + if data == gameSpecificData { + return true + } + } + return false +} diff --git a/game/game_specific_data_test.go b/game/game_specific_data_test.go new file mode 100644 index 0000000..dc224d1 --- /dev/null +++ b/game/game_specific_data_test.go @@ -0,0 +1,38 @@ +// Copyright 2018 Team 254. All Rights Reserved. +// Author: pat@patfairbank.com (Patrick Fairbank) + +package game + +import ( + "github.com/stretchr/testify/assert" + "math/rand" + "testing" +) + +func TestGenerateGameSpecificData(t *testing.T) { + rand.Seed(0) + + // Make sure all possibilities are hit at least twice. + assert.Equal(t, "RLR", GenerateGameSpecificData()) + assert.Equal(t, "RLR", GenerateGameSpecificData()) + assert.Equal(t, "LLL", GenerateGameSpecificData()) + assert.Equal(t, "RLR", GenerateGameSpecificData()) + assert.Equal(t, "LRL", GenerateGameSpecificData()) + assert.Equal(t, "RRR", GenerateGameSpecificData()) + assert.Equal(t, "LRL", GenerateGameSpecificData()) + assert.Equal(t, "LLL", GenerateGameSpecificData()) + assert.Equal(t, "RRR", GenerateGameSpecificData()) + assert.Equal(t, "RRR", GenerateGameSpecificData()) +} + +func TestIsValidGameSpecificData(t *testing.T) { + for _, data := range validGameSpecificDatas { + assert.True(t, IsValidGameSpecificData(data)) + } + + assert.False(t, IsValidGameSpecificData("")) + assert.False(t, IsValidGameSpecificData("R")) + assert.False(t, IsValidGameSpecificData("RL")) + assert.False(t, IsValidGameSpecificData("RRL")) + assert.False(t, IsValidGameSpecificData("RRRL")) +} diff --git a/game/match_timing.go b/game/match_timing.go index bcf5466..5207063 100644 --- a/game/match_timing.go +++ b/game/match_timing.go @@ -8,21 +8,23 @@ package game import "time" var MatchTiming = struct { + WarmupDurationSec int AutoDurationSec int PauseDurationSec int TeleopDurationSec int EndgameTimeLeftSec int -}{15, 2, 135, 30} +}{3, 15, 2, 135, 30} func GetAutoEndTime(matchStartTime time.Time) time.Time { - return matchStartTime.Add(time.Duration(MatchTiming.AutoDurationSec)) + return matchStartTime.Add(time.Duration(MatchTiming.WarmupDurationSec+MatchTiming.AutoDurationSec) * time.Second) } func GetTeleopStartTime(matchStartTime time.Time) time.Time { - return matchStartTime.Add(time.Duration(MatchTiming.AutoDurationSec + MatchTiming.PauseDurationSec)) + return matchStartTime.Add(time.Duration(MatchTiming.WarmupDurationSec+MatchTiming.AutoDurationSec+ + MatchTiming.PauseDurationSec) * time.Second) } func GetMatchEndTime(matchStartTime time.Time) time.Time { - return matchStartTime.Add(time.Duration(MatchTiming.AutoDurationSec+MatchTiming.PauseDurationSec+ - MatchTiming.TeleopDurationSec) * time.Second) + return matchStartTime.Add(time.Duration(MatchTiming.WarmupDurationSec+MatchTiming.AutoDurationSec+ + MatchTiming.PauseDurationSec+MatchTiming.TeleopDurationSec) * time.Second) } diff --git a/model/match.go b/model/match.go index d5f8c0f..db3e556 100644 --- a/model/match.go +++ b/model/match.go @@ -34,6 +34,7 @@ type Match struct { Status string StartedAt time.Time Winner string + GameSpecificData string } var ElimRoundNames = map[int]string{1: "F", 2: "SF", 4: "QF", 8: "EF"} diff --git a/model/match_test.go b/model/match_test.go index 55687ab..e069caf 100644 --- a/model/match_test.go +++ b/model/match_test.go @@ -21,7 +21,7 @@ func TestMatchCrud(t *testing.T) { db := setupTestDb(t) match := Match{0, "qualification", "254", time.Now().UTC(), 0, 0, 0, 1, false, 2, false, 3, false, 4, false, - 5, false, 6, false, "", time.Now().UTC(), ""} + 5, false, 6, false, "", time.Now().UTC(), "", ""} db.CreateMatch(&match) match2, err := db.GetMatchById(1) assert.Nil(t, err) @@ -46,7 +46,7 @@ func TestTruncateMatches(t *testing.T) { db := setupTestDb(t) match := Match{0, "qualification", "254", time.Now().UTC(), 0, 0, 0, 1, false, 2, false, 3, false, 4, false, - 5, false, 6, false, "", time.Now().UTC(), ""} + 5, false, 6, false, "", time.Now().UTC(), "", ""} db.CreateMatch(&match) db.TruncateMatches() match2, err := db.GetMatchById(1) @@ -83,13 +83,13 @@ func TestGetMatchesByType(t *testing.T) { db := setupTestDb(t) match := Match{0, "qualification", "1", time.Now().UTC(), 0, 0, 0, 1, false, 2, false, 3, false, 4, false, - 5, false, 6, false, "", time.Now().UTC(), ""} + 5, false, 6, false, "", time.Now().UTC(), "", ""} db.CreateMatch(&match) match2 := Match{0, "practice", "1", time.Now().UTC(), 0, 0, 0, 1, false, 2, false, 3, false, 4, false, 5, - false, 6, false, "", time.Now().UTC(), ""} + false, 6, false, "", time.Now().UTC(), "", ""} db.CreateMatch(&match2) match3 := Match{0, "practice", "2", time.Now().UTC(), 0, 0, 0, 1, false, 2, false, 3, false, 4, false, 5, - false, 6, false, "", time.Now().UTC(), ""} + false, 6, false, "", time.Now().UTC(), "", ""} db.CreateMatch(&match3) matches, err := db.GetMatchesByType("test") diff --git a/static/audio/match_warmup.wav b/static/audio/match_warmup.wav new file mode 100644 index 0000000000000000000000000000000000000000..b351d2d3cd55acaee60f7989228171e5124f9c3d GIT binary patch literal 188848 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 g`wzU2_F + diff --git a/templates/match_play.html b/templates/match_play.html index 1cabbf7..70aaa58 100644 --- a/templates/match_play.html +++ b/templates/match_play.html @@ -167,7 +167,7 @@
- Alliance Station Display +

Alliance Station Display

+
+

Game-Specific Data

+
{{if .EventSettings.PlcAddress}} PLC Status diff --git a/web/alliance_station_display_test.go b/web/alliance_station_display_test.go index 238064e..689f7b1 100644 --- a/web/alliance_station_display_test.go +++ b/web/alliance_station_display_test.go @@ -4,6 +4,8 @@ package web import ( + "fmt" + "github.com/Team254/cheesy-arena/game" "github.com/gorilla/websocket" "github.com/stretchr/testify/assert" "sync" @@ -59,7 +61,11 @@ func TestAllianceStationDisplayWebsocket(t *testing.T) { web.arena.AllianceStations["B3"].Bypass = true web.arena.StartMatch() web.arena.Update() + readWebsocketType(t, ws, "matchTime") + web.arena.MatchStartTime = time.Now().Add(-time.Duration(game.MatchTiming.WarmupDurationSec) * time.Second) + web.arena.Update() messages := readWebsocketMultiple(t, ws, 2) + fmt.Println(messages) _, ok := messages["status"] assert.True(t, ok) _, ok = messages["matchTime"] diff --git a/web/audience_display_test.go b/web/audience_display_test.go index fbe00f1..201b3a9 100644 --- a/web/audience_display_test.go +++ b/web/audience_display_test.go @@ -55,7 +55,7 @@ func TestAudienceDisplayWebsocket(t *testing.T) { } sound, ok := messages["playSound"] if assert.True(t, ok) { - assert.Equal(t, "match-start", sound) + assert.Equal(t, "match-warmup", sound) } _, ok = messages["matchTime"] assert.True(t, ok) diff --git a/web/match_play.go b/web/match_play.go index bf38143..8213b5f 100644 --- a/web/match_play.go +++ b/web/match_play.go @@ -333,7 +333,8 @@ func (web *Web) matchPlayWebsocketHandler(w http.ResponseWriter, r *http.Request web.arena.AllianceStations[station].Bypass = !web.arena.AllianceStations[station].Bypass case "startMatch": args := struct { - MuteMatchSounds bool + MuteMatchSounds bool + GameSpecificData string }{} err = mapstructure.Decode(data, &args) if err != nil { @@ -341,6 +342,7 @@ func (web *Web) matchPlayWebsocketHandler(w http.ResponseWriter, r *http.Request continue } web.arena.MuteMatchSounds = args.MuteMatchSounds + web.arena.CurrentMatch.GameSpecificData = args.GameSpecificData err = web.arena.StartMatch() if err != nil { websocket.WriteError(err.Error()) diff --git a/web/match_play_test.go b/web/match_play_test.go index 32ffa06..8295499 100644 --- a/web/match_play_test.go +++ b/web/match_play_test.go @@ -351,43 +351,47 @@ func TestMatchPlayWebsocketNotifications(t *testing.T) { web.arena.AllianceStations["B3"].Bypass = true web.arena.StartMatch() web.arena.Update() - messages := readWebsocketMultiple(t, ws, 4) - statusReceived, matchTime := getStatusMatchTime(t, messages) - assert.Equal(t, true, statusReceived) - assert.Equal(t, 2, matchTime.MatchState) - assert.Equal(t, 0, matchTime.MatchTimeSec) - _, ok := messages["setAudienceDisplay"] + messages := readWebsocketMultiple(t, ws, 3) + _, ok := messages["matchTime"] + assert.True(t, ok) + _, ok = messages["setAudienceDisplay"] assert.True(t, ok) _, ok = messages["setAllianceStationDisplay"] + web.arena.MatchStartTime = time.Now().Add(-time.Duration(game.MatchTiming.WarmupDurationSec) * time.Second) + web.arena.Update() + messages = readWebsocketMultiple(t, ws, 2) + statusReceived, matchTime := getStatusMatchTime(t, messages) + assert.Equal(t, true, statusReceived) + assert.Equal(t, 3, matchTime.MatchState) + assert.Equal(t, 3, matchTime.MatchTimeSec) assert.True(t, ok) web.arena.ScoringStatusNotifier.Notify(nil) readWebsocketType(t, ws, "scoringStatus") // Should get a tick notification when an integer second threshold is crossed. - web.arena.MatchStartTime = time.Now().Add(-time.Second + 10*time.Millisecond) // Not crossed yet - web.arena.Update() web.arena.MatchStartTime = time.Now().Add(-time.Second - 10*time.Millisecond) // Crossed web.arena.Update() + err = mapstructure.Decode(readWebsocketType(t, ws, "matchTime"), &matchTime) + assert.Nil(t, err) + assert.Equal(t, 3, matchTime.MatchState) + assert.Equal(t, 1, matchTime.MatchTimeSec) web.arena.MatchStartTime = time.Now().Add(-2*time.Second + 10*time.Millisecond) // Not crossed yet web.arena.Update() web.arena.MatchStartTime = time.Now().Add(-2*time.Second - 10*time.Millisecond) // Crossed web.arena.Update() err = mapstructure.Decode(readWebsocketType(t, ws, "matchTime"), &matchTime) assert.Nil(t, err) - assert.Equal(t, 2, matchTime.MatchState) - assert.Equal(t, 1, matchTime.MatchTimeSec) - err = mapstructure.Decode(readWebsocketType(t, ws, "matchTime"), &matchTime) - assert.Nil(t, err) - assert.Equal(t, 2, matchTime.MatchState) + assert.Equal(t, 3, matchTime.MatchState) assert.Equal(t, 2, matchTime.MatchTimeSec) // Check across a match state boundary. - web.arena.MatchStartTime = time.Now().Add(-time.Duration(game.MatchTiming.AutoDurationSec) * time.Second) + web.arena.MatchStartTime = time.Now().Add(-time.Duration(game.MatchTiming.WarmupDurationSec+ + game.MatchTiming.AutoDurationSec) * time.Second) web.arena.Update() statusReceived, matchTime = readWebsocketStatusMatchTime(t, ws) assert.Equal(t, true, statusReceived) - assert.Equal(t, 3, matchTime.MatchState) - assert.Equal(t, game.MatchTiming.AutoDurationSec, matchTime.MatchTimeSec) + assert.Equal(t, 4, matchTime.MatchState) + assert.Equal(t, game.MatchTiming.WarmupDurationSec+game.MatchTiming.AutoDurationSec, matchTime.MatchTimeSec) } // Handles the status and matchTime messages arriving in either order.