@@ -5,15 +5,15 @@ import (
5
5
"flag"
6
6
"fmt"
7
7
"github.com/RoboCup-SSL/ssl-game-controller/internal/app/state"
8
+ "github.com/RoboCup-SSL/ssl-game-controller/pkg/sslnet"
8
9
"github.com/golang/protobuf/proto"
9
10
"log"
10
11
"math"
11
- "net"
12
- "time"
12
+ "os"
13
+ "os/signal"
14
+ "syscall"
13
15
)
14
16
15
- const maxDatagramSize = 8192
16
-
17
17
var refereeAddress = flag .String ("address" , "224.5.23.1:10003" , "The multicast address of ssl-game-controller" )
18
18
var fullScreen = flag .Bool ("fullScreen" , false , "Print the formatted message to the console, clearing the screen during print" )
19
19
@@ -22,64 +22,48 @@ var history []state.Referee_Command
22
22
func main () {
23
23
flag .Parse ()
24
24
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 )
33
27
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
+ }
38
33
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
+ }
58
43
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" )
62
47
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 ("," )
71
55
}
72
- fmt .Println ()
73
- fmt .Println ()
56
+ }
57
+ fmt .Println ()
58
+ fmt .Println ()
74
59
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 )
83
66
}
67
+ log .Print (string (b ))
84
68
}
85
69
}
0 commit comments