mirror of
https://github.com/Team254/cheesy-arena-lite.git
synced 2026-03-09 13:46:44 -04:00
Expose team in AllianceStation JSON for field monitor (fixes #32).
This commit is contained in:
@@ -65,8 +65,8 @@ func AllianceStationDisplayWebsocketHandler(w http.ResponseWriter, r *http.Reque
|
||||
}
|
||||
rankings := make(map[string]*Ranking)
|
||||
for _, allianceStation := range mainArena.AllianceStations {
|
||||
if allianceStation.team != nil {
|
||||
rankings[strconv.Itoa(allianceStation.team.Id)], _ = db.GetRankingForTeam(allianceStation.team.Id)
|
||||
if allianceStation.Team != nil {
|
||||
rankings[strconv.Itoa(allianceStation.Team.Id)], _ = db.GetRankingForTeam(allianceStation.Team.Id)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,10 +104,10 @@ func AllianceStationDisplayWebsocketHandler(w http.ResponseWriter, r *http.Reque
|
||||
AllianceStation string
|
||||
Teams map[string]*Team
|
||||
Rankings map[string]*Ranking
|
||||
}{station, map[string]*Team{"R1": mainArena.AllianceStations["R1"].team,
|
||||
"R2": mainArena.AllianceStations["R2"].team, "R3": mainArena.AllianceStations["R3"].team,
|
||||
"B1": mainArena.AllianceStations["B1"].team, "B2": mainArena.AllianceStations["B2"].team,
|
||||
"B3": mainArena.AllianceStations["B3"].team}, rankings}
|
||||
}{station, map[string]*Team{"R1": mainArena.AllianceStations["R1"].Team,
|
||||
"R2": mainArena.AllianceStations["R2"].Team, "R3": mainArena.AllianceStations["R3"].Team,
|
||||
"B1": mainArena.AllianceStations["B1"].Team, "B2": mainArena.AllianceStations["B2"].Team,
|
||||
"B3": mainArena.AllianceStations["B3"].Team}, rankings}
|
||||
err = websocket.Write("setMatch", data)
|
||||
if err != nil {
|
||||
log.Printf("Websocket error: %s", err)
|
||||
@@ -145,18 +145,18 @@ func AllianceStationDisplayWebsocketHandler(w http.ResponseWriter, r *http.Reque
|
||||
station = mainArena.allianceStationDisplays[displayId]
|
||||
rankings := make(map[string]*Ranking)
|
||||
for _, allianceStation := range mainArena.AllianceStations {
|
||||
if allianceStation.team != nil {
|
||||
rankings[strconv.Itoa(allianceStation.team.Id)], _ = db.GetRankingForTeam(allianceStation.team.Id)
|
||||
if allianceStation.Team != nil {
|
||||
rankings[strconv.Itoa(allianceStation.Team.Id)], _ = db.GetRankingForTeam(allianceStation.Team.Id)
|
||||
}
|
||||
}
|
||||
message = struct {
|
||||
AllianceStation string
|
||||
Teams map[string]*Team
|
||||
Rankings map[string]*Ranking
|
||||
}{station, map[string]*Team{"R1": mainArena.AllianceStations["R1"].team,
|
||||
"R2": mainArena.AllianceStations["R2"].team, "R3": mainArena.AllianceStations["R3"].team,
|
||||
"B1": mainArena.AllianceStations["B1"].team, "B2": mainArena.AllianceStations["B2"].team,
|
||||
"B3": mainArena.AllianceStations["B3"].team}, rankings}
|
||||
}{station, map[string]*Team{"R1": mainArena.AllianceStations["R1"].Team,
|
||||
"R2": mainArena.AllianceStations["R2"].Team, "R3": mainArena.AllianceStations["R3"].Team,
|
||||
"B1": mainArena.AllianceStations["B1"].Team, "B2": mainArena.AllianceStations["B2"].Team,
|
||||
"B3": mainArena.AllianceStations["B3"].Team}, rankings}
|
||||
case _, ok := <-robotStatusListener:
|
||||
if !ok {
|
||||
return
|
||||
|
||||
@@ -73,9 +73,9 @@ func AnnouncerDisplayWebsocketHandler(w http.ResponseWriter, r *http.Request) {
|
||||
Blue2 *Team
|
||||
Blue3 *Team
|
||||
}{mainArena.currentMatch.CapitalizedType(), mainArena.currentMatch.DisplayName,
|
||||
mainArena.AllianceStations["R1"].team, mainArena.AllianceStations["R2"].team,
|
||||
mainArena.AllianceStations["R3"].team, mainArena.AllianceStations["B1"].team,
|
||||
mainArena.AllianceStations["B2"].team, mainArena.AllianceStations["B3"].team}
|
||||
mainArena.AllianceStations["R1"].Team, mainArena.AllianceStations["R2"].Team,
|
||||
mainArena.AllianceStations["R3"].Team, mainArena.AllianceStations["B1"].Team,
|
||||
mainArena.AllianceStations["B2"].Team, mainArena.AllianceStations["B3"].Team}
|
||||
err = websocket.Write("setMatch", data)
|
||||
if err != nil {
|
||||
log.Printf("Websocket error: %s", err)
|
||||
@@ -123,9 +123,9 @@ func AnnouncerDisplayWebsocketHandler(w http.ResponseWriter, r *http.Request) {
|
||||
Blue2 *Team
|
||||
Blue3 *Team
|
||||
}{mainArena.currentMatch.CapitalizedType(), mainArena.currentMatch.DisplayName,
|
||||
mainArena.AllianceStations["R1"].team, mainArena.AllianceStations["R2"].team,
|
||||
mainArena.AllianceStations["R3"].team, mainArena.AllianceStations["B1"].team,
|
||||
mainArena.AllianceStations["B2"].team, mainArena.AllianceStations["B3"].team}
|
||||
mainArena.AllianceStations["R1"].Team, mainArena.AllianceStations["R2"].Team,
|
||||
mainArena.AllianceStations["R3"].Team, mainArena.AllianceStations["B1"].Team,
|
||||
mainArena.AllianceStations["B2"].Team, mainArena.AllianceStations["B3"].Team}
|
||||
case matchTimeSec, ok := <-matchTimeListener:
|
||||
if !ok {
|
||||
return
|
||||
|
||||
23
arena.go
23
arena.go
@@ -32,7 +32,7 @@ type AllianceStation struct {
|
||||
DsConn *DriverStationConnection
|
||||
EmergencyStop bool
|
||||
Bypass bool
|
||||
team *Team
|
||||
Team *Team
|
||||
}
|
||||
|
||||
// Match period timings.
|
||||
@@ -161,12 +161,13 @@ func (arena *Arena) AssignTeam(teamId int, station string) error {
|
||||
}
|
||||
if dsConn != nil {
|
||||
dsConn.Close()
|
||||
arena.AllianceStations[station].team = nil
|
||||
arena.AllianceStations[station].Team = nil
|
||||
arena.AllianceStations[station].DsConn = nil
|
||||
}
|
||||
|
||||
// Leave the station empty if the team number is zero.
|
||||
if teamId == 0 {
|
||||
arena.AllianceStations[station].Team = nil
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -179,7 +180,7 @@ func (arena *Arena) AssignTeam(teamId int, station string) error {
|
||||
team = &Team{Id: teamId}
|
||||
}
|
||||
|
||||
arena.AllianceStations[station].team = team
|
||||
arena.AllianceStations[station].Team = team
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -292,17 +293,17 @@ func (arena *Arena) SubstituteTeam(teamId int, station string) error {
|
||||
func (arena *Arena) SetupNetwork() {
|
||||
if eventSettings.NetworkSecurityEnabled {
|
||||
go func() {
|
||||
err := ConfigureTeamWifi(arena.AllianceStations["R1"].team, arena.AllianceStations["R2"].team,
|
||||
arena.AllianceStations["R3"].team, arena.AllianceStations["B1"].team,
|
||||
arena.AllianceStations["B2"].team, arena.AllianceStations["B3"].team)
|
||||
err := ConfigureTeamWifi(arena.AllianceStations["R1"].Team, arena.AllianceStations["R2"].Team,
|
||||
arena.AllianceStations["R3"].Team, arena.AllianceStations["B1"].Team,
|
||||
arena.AllianceStations["B2"].Team, arena.AllianceStations["B3"].Team)
|
||||
if err != nil {
|
||||
log.Printf("Failed to configure team WiFi: %s", err.Error())
|
||||
}
|
||||
}()
|
||||
go func() {
|
||||
err := ConfigureTeamEthernet(arena.AllianceStations["R1"].team, arena.AllianceStations["R2"].team,
|
||||
arena.AllianceStations["R3"].team, arena.AllianceStations["B1"].team,
|
||||
arena.AllianceStations["B2"].team, arena.AllianceStations["B3"].team)
|
||||
err := ConfigureTeamEthernet(arena.AllianceStations["R1"].Team, arena.AllianceStations["R2"].Team,
|
||||
arena.AllianceStations["R3"].Team, arena.AllianceStations["B1"].Team,
|
||||
arena.AllianceStations["B2"].Team, arena.AllianceStations["B3"].Team)
|
||||
if err != nil {
|
||||
log.Printf("Failed to configure team Ethernet: %s", err.Error())
|
||||
}
|
||||
@@ -513,7 +514,7 @@ func (arena *Arena) sendDsPacket(auto bool, enabled bool) {
|
||||
dsConn.Enabled = enabled && !allianceStation.EmergencyStop && !allianceStation.Bypass
|
||||
err := dsConn.Update()
|
||||
if err != nil {
|
||||
log.Printf("Unable to send driver station packet for team %d.", allianceStation.team.Id)
|
||||
log.Printf("Unable to send driver station packet for team %d.", allianceStation.Team.Id)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -562,7 +563,7 @@ func (arena *Arena) handleLighting() {
|
||||
// in the current match.
|
||||
func (arena *Arena) getAssignedAllianceStation(teamId int) string {
|
||||
for station, allianceStation := range arena.AllianceStations {
|
||||
if allianceStation.team != nil && allianceStation.team.Id == teamId {
|
||||
if allianceStation.Team != nil && allianceStation.Team.Id == teamId {
|
||||
return station
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,27 +28,27 @@ func TestAssignTeam(t *testing.T) {
|
||||
|
||||
err = mainArena.AssignTeam(254, "B1")
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, team, *mainArena.AllianceStations["B1"].team)
|
||||
assert.Equal(t, team, *mainArena.AllianceStations["B1"].Team)
|
||||
dummyDs := &DriverStationConnection{TeamId: 254}
|
||||
mainArena.AllianceStations["B1"].DsConn = dummyDs
|
||||
|
||||
// Nothing should happen if the same team is assigned to the same station.
|
||||
err = mainArena.AssignTeam(254, "B1")
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, team, *mainArena.AllianceStations["B1"].team)
|
||||
assert.Equal(t, team, *mainArena.AllianceStations["B1"].Team)
|
||||
assert.NotNil(t, mainArena.AllianceStations["B1"])
|
||||
assert.Equal(t, dummyDs, mainArena.AllianceStations["B1"].DsConn) // Pointer equality
|
||||
|
||||
// Test reassignment to another team.
|
||||
err = mainArena.AssignTeam(1114, "B1")
|
||||
assert.Nil(t, err)
|
||||
assert.NotEqual(t, team, *mainArena.AllianceStations["B1"].team)
|
||||
assert.NotEqual(t, team, *mainArena.AllianceStations["B1"].Team)
|
||||
assert.Nil(t, mainArena.AllianceStations["B1"].DsConn)
|
||||
|
||||
// Check assigning zero as the team number.
|
||||
err = mainArena.AssignTeam(0, "R2")
|
||||
assert.Nil(t, err)
|
||||
assert.Nil(t, mainArena.AllianceStations["R2"].team)
|
||||
assert.Nil(t, mainArena.AllianceStations["R2"].Team)
|
||||
assert.Nil(t, mainArena.AllianceStations["R2"].DsConn)
|
||||
|
||||
// Check assigning to a non-existent station.
|
||||
@@ -451,7 +451,7 @@ func TestSubstituteTeam(t *testing.T) {
|
||||
err = mainArena.SubstituteTeam(101, "B1")
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, 101, mainArena.currentMatch.Blue1)
|
||||
assert.Equal(t, 101, mainArena.AllianceStations["B1"].team.Id)
|
||||
assert.Equal(t, 101, mainArena.AllianceStations["B1"].Team.Id)
|
||||
err = mainArena.AssignTeam(104, "R4")
|
||||
if assert.NotNil(t, err) {
|
||||
assert.Contains(t, err.Error(), "Invalid alliance station")
|
||||
@@ -464,7 +464,7 @@ func TestSubstituteTeam(t *testing.T) {
|
||||
err = mainArena.SubstituteTeam(107, "R1")
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, 107, mainArena.currentMatch.Red1)
|
||||
assert.Equal(t, 107, mainArena.AllianceStations["R1"].team.Id)
|
||||
assert.Equal(t, 107, mainArena.AllianceStations["R1"].Team.Id)
|
||||
CommitMatchScore(mainArena.currentMatch, &MatchResult{MatchId: mainArena.currentMatch.Id}, false)
|
||||
match2, _ := db.GetMatchById(match.Id)
|
||||
assert.Equal(t, 107, match2.Red1)
|
||||
|
||||
@@ -79,7 +79,7 @@ func ListenForDsUdpPackets() {
|
||||
|
||||
var dsConn *DriverStationConnection
|
||||
for _, allianceStation := range mainArena.AllianceStations {
|
||||
if allianceStation.team != nil && allianceStation.team.Id == teamId {
|
||||
if allianceStation.Team != nil && allianceStation.Team.Id == teamId {
|
||||
dsConn = allianceStation.DsConn
|
||||
break
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ func TestEncodeControlPacket(t *testing.T) {
|
||||
assert.Equal(t, byte(0), data[5])
|
||||
assert.Equal(t, byte(0), data[6])
|
||||
assert.Equal(t, byte(0), data[20])
|
||||
assert.Equal(t, byte(150), data[21])
|
||||
assert.Equal(t, byte(15), data[21])
|
||||
|
||||
// Check the different alliance station values.
|
||||
dsConn.AllianceStation = "R2"
|
||||
@@ -100,7 +100,7 @@ func TestEncodeControlPacket(t *testing.T) {
|
||||
mainArena.MatchState = AUTO_PERIOD
|
||||
mainArena.matchStartTime = time.Now().Add(-time.Duration(4 * time.Second))
|
||||
data = dsConn.encodeControlPacket()
|
||||
assert.Equal(t, byte(146), data[21])
|
||||
assert.Equal(t, byte(11), data[21])
|
||||
mainArena.MatchState = PAUSE_PERIOD
|
||||
mainArena.matchStartTime = time.Now().Add(-time.Duration(16 * time.Second))
|
||||
data = dsConn.encodeControlPacket()
|
||||
|
||||
@@ -42,27 +42,27 @@ func RefereeDisplayHandler(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
match := mainArena.currentMatch
|
||||
matchType := match.CapitalizedType()
|
||||
red1 := mainArena.AllianceStations["R1"].team
|
||||
red1 := mainArena.AllianceStations["R1"].Team
|
||||
if red1 == nil {
|
||||
red1 = &Team{}
|
||||
}
|
||||
red2 := mainArena.AllianceStations["R2"].team
|
||||
red2 := mainArena.AllianceStations["R2"].Team
|
||||
if red2 == nil {
|
||||
red2 = &Team{}
|
||||
}
|
||||
red3 := mainArena.AllianceStations["R3"].team
|
||||
red3 := mainArena.AllianceStations["R3"].Team
|
||||
if red3 == nil {
|
||||
red3 = &Team{}
|
||||
}
|
||||
blue1 := mainArena.AllianceStations["B1"].team
|
||||
blue1 := mainArena.AllianceStations["B1"].Team
|
||||
if blue1 == nil {
|
||||
blue1 = &Team{}
|
||||
}
|
||||
blue2 := mainArena.AllianceStations["B2"].team
|
||||
blue2 := mainArena.AllianceStations["B2"].Team
|
||||
if blue2 == nil {
|
||||
blue2 = &Team{}
|
||||
}
|
||||
blue3 := mainArena.AllianceStations["B3"].team
|
||||
blue3 := mainArena.AllianceStations["B3"].Team
|
||||
if blue3 == nil {
|
||||
blue3 = &Team{}
|
||||
}
|
||||
|
||||
@@ -10,9 +10,14 @@ var websocket;
|
||||
var handleStatus = function(data) {
|
||||
// Update the team status view.
|
||||
$.each(data.AllianceStations, function(station, stationStatus) {
|
||||
if (stationStatus.Team) {
|
||||
$("#status" + station + " .team").text(stationStatus.Team.Id);
|
||||
} else {
|
||||
$("#status" + station + " .team").text("");
|
||||
}
|
||||
|
||||
if (stationStatus.DsConn) {
|
||||
var dsConn = stationStatus.DsConn;
|
||||
$("#status" + station + " .team").text(stationStatus.DsConn.TeamId);
|
||||
$("#status" + station + " .ds-status").attr("data-status-ok", dsConn.DsLinked);
|
||||
$("#status" + station + " .ds-status").text(dsConn.MBpsToRobot.toFixed(1) + "/" + dsConn.MBpsFromRobot.toFixed(1));
|
||||
$("#status" + station + " .robot-status").attr("data-status-ok", dsConn.RobotLinked);
|
||||
|
||||
Reference in New Issue
Block a user