Skip to content

Commit faff4c1

Browse files
committed
Use multicast server for referee test client
1 parent 5add2ab commit faff4c1

File tree

1 file changed

+40
-56
lines changed

1 file changed

+40
-56
lines changed

cmd/ssl-ref-client/main.go

Lines changed: 40 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ import (
55
"flag"
66
"fmt"
77
"github.com/RoboCup-SSL/ssl-game-controller/internal/app/state"
8+
"github.com/RoboCup-SSL/ssl-game-controller/pkg/sslnet"
89
"github.com/golang/protobuf/proto"
910
"log"
1011
"math"
11-
"net"
12-
"time"
12+
"os"
13+
"os/signal"
14+
"syscall"
1315
)
1416

15-
const maxDatagramSize = 8192
16-
1717
var refereeAddress = flag.String("address", "224.5.23.1:10003", "The multicast address of ssl-game-controller")
1818
var fullScreen = flag.Bool("fullScreen", false, "Print the formatted message to the console, clearing the screen during print")
1919

@@ -22,64 +22,48 @@ var history []state.Referee_Command
2222
func main() {
2323
flag.Parse()
2424

25-
addr, err := net.ResolveUDPAddr("udp", *refereeAddress)
26-
if err != nil {
27-
log.Fatal(err)
28-
}
29-
conn, err := net.ListenMulticastUDP("udp", nil, addr)
30-
if err != nil {
31-
log.Fatal(err)
32-
}
25+
server := sslnet.NewMulticastServer(consume)
26+
server.Start(*refereeAddress)
3327

34-
if err := conn.SetReadBuffer(maxDatagramSize); err != nil {
35-
log.Printf("Could not set read buffer to %v.", maxDatagramSize)
36-
}
37-
log.Println("Receiving from", *refereeAddress)
28+
signals := make(chan os.Signal, 1)
29+
signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM)
30+
<-signals
31+
server.Stop()
32+
}
3833

39-
b := make([]byte, maxDatagramSize)
40-
for {
41-
n, err := conn.Read(b)
42-
if err != nil {
43-
log.Print("Could not read: ", err)
44-
time.Sleep(1 * time.Second)
45-
continue
46-
}
47-
if n >= maxDatagramSize {
48-
log.Fatal("Buffer size too small")
49-
}
50-
refMsg := state.Referee{}
51-
if err := proto.Unmarshal(b[0:n], &refMsg); err != nil {
52-
log.Println("Could not unmarshal referee message")
53-
continue
54-
}
55-
if len(history) == 0 || *refMsg.Command != history[len(history)-1] {
56-
history = append(history, *refMsg.Command)
57-
}
34+
func consume(b []byte) {
35+
refMsg := state.Referee{}
36+
if err := proto.Unmarshal(b, &refMsg); err != nil {
37+
log.Println("Could not unmarshal referee message")
38+
return
39+
}
40+
if len(history) == 0 || *refMsg.Command != history[len(history)-1] {
41+
history = append(history, *refMsg.Command)
42+
}
5843

59-
if *fullScreen {
60-
// clear screen, move cursor to upper left corner
61-
fmt.Print("\033[H\033[2J")
44+
if *fullScreen {
45+
// clear screen, move cursor to upper left corner
46+
fmt.Print("\033[H\033[2J")
6247

63-
// print last commands
64-
fmt.Print("Last commands: ")
65-
n := int(math.Min(float64(len(history)), 5.0))
66-
for i := 0; i < n; i++ {
67-
fmt.Print(history[len(history)-1-i])
68-
if i != n-1 {
69-
fmt.Print(",")
70-
}
48+
// print last commands
49+
fmt.Print("Last commands: ")
50+
n := int(math.Min(float64(len(history)), 5.0))
51+
for i := 0; i < n; i++ {
52+
fmt.Print(history[len(history)-1-i])
53+
if i != n-1 {
54+
fmt.Print(",")
7155
}
72-
fmt.Println()
73-
fmt.Println()
56+
}
57+
fmt.Println()
58+
fmt.Println()
7459

75-
// print message formatted with line breaks
76-
fmt.Print(proto.MarshalTextString(&refMsg))
77-
} else {
78-
b, err := json.Marshal(refMsg)
79-
if err != nil {
80-
log.Fatal(err)
81-
}
82-
log.Print(string(b))
60+
// print message formatted with line breaks
61+
fmt.Print(proto.MarshalTextString(&refMsg))
62+
} else {
63+
b, err := json.Marshal(&refMsg)
64+
if err != nil {
65+
log.Fatal(err)
8366
}
67+
log.Print(string(b))
8468
}
8569
}

0 commit comments

Comments
 (0)