File tree Expand file tree Collapse file tree 5 files changed +40
-6
lines changed Expand file tree Collapse file tree 5 files changed +40
-6
lines changed Original file line number Diff line number Diff line change 77 "github.com/gobuffalo/packr"
88 "log"
99 "net/http"
10+ "os"
11+ "os/signal"
12+ "syscall"
1013)
1114
1215var address = flag .String ("address" , "localhost:8081" , "The address on which the UI and API is served" )
@@ -43,6 +46,15 @@ func setupGameController() {
4346
4447 gameController := gc .NewGameController (cfg )
4548 gameController .Start ()
49+
50+ sigs := make (chan os.Signal , 1 )
51+ signal .Notify (sigs , syscall .SIGINT , syscall .SIGTERM )
52+ go func () {
53+ <- sigs
54+ gameController .Stop ()
55+ os .Exit (0 )
56+ }()
57+
4658 // serve the bidirectional web socket
4759 http .HandleFunc ("/api/control" , gameController .ApiServer ().WsHandler )
4860}
Original file line number Diff line number Diff line change @@ -21,6 +21,7 @@ type Server struct {
2121 tickChan chan time.Time
2222 mutex sync.Mutex
2323 gcEngine * engine.Engine
24+ running bool
2425}
2526
2627func NewServer (address string ) * Server {
@@ -32,13 +33,16 @@ func (s *Server) SetEngine(engine *engine.Engine) {
3233}
3334
3435func (s * Server ) Start () {
36+ s .running = true
3537 go s .listen (s .address )
3638}
3739
3840func (s * Server ) Stop () {
41+ s .running = false
3942 if err := s .listener .Close (); err != nil {
4043 log .Printf ("Could not close listener: %v" , err )
4144 }
45+ s .listener = nil
4246}
4347
4448func (s * Server ) listen (address string ) {
@@ -50,7 +54,7 @@ func (s *Server) listen(address string) {
5054 log .Print ("Listening on " , address )
5155 s .listener = listener
5256
53- for {
57+ for s . running {
5458 conn , err := listener .Accept ()
5559 if err != nil {
5660 log .Print ("Could not accept connection: " , err )
Original file line number Diff line number Diff line change @@ -92,12 +92,21 @@ func (c *GameController) Start() {
9292
9393// Stop stops all go routines
9494func (c * GameController ) Stop () {
95- // Note: Stopping is not (yet) implemented correctly by all servers.
95+
96+ switch c .config .TimeAcquisitionMode {
97+ case config .TimeAcquisitionModeSystem :
98+ c .visionReceiver .Stop ()
99+ c .trackerReceiver .Stop ()
100+ break
101+ case config .TimeAcquisitionModeVision :
102+ c .visionReceiver .Stop ()
103+ c .trackerReceiver .Stop ()
104+ case config .TimeAcquisitionModeCi :
105+ c .ciServer .Stop ()
106+ }
107+
96108 c .gcEngine .UnregisterHook ("messageGen" )
97109 c .messageGenerator .Stop ()
98- c .ciServer .Stop ()
99- c .trackerReceiver .Stop ()
100- c .visionReceiver .Stop ()
101110 c .autoRefServer .Server .Stop ()
102111 c .autoRefServerTls .Server .Stop ()
103112 c .teamServer .Server .Stop ()
Original file line number Diff line number Diff line change @@ -25,6 +25,7 @@ func NewMessageGenerator() (m *MessageGenerator) {
2525 m .goal = map [state.Team ]bool {}
2626 m .goal [state .Team_BLUE ] = false
2727 m .goal [state .Team_YELLOW ] = false
28+ m .quit = make (chan int , 1 )
2829
2930 return
3031}
Original file line number Diff line number Diff line change @@ -24,6 +24,7 @@ type Server struct {
2424 trustedKeys map [string ]* rsa.PublicKey
2525 connectionHandler func (net.Conn )
2626 listener net.Listener
27+ running bool
2728}
2829
2930type Client struct {
@@ -49,31 +50,38 @@ func NewServer(address string) (s *Server) {
4950
5051func (s * Server ) Start () {
5152 var err error
53+ s .running = true
5254 if s .Tls {
5355 s .listener , err = s .createTlsListener ()
5456 } else {
5557 s .listener , err = s .createListener ()
5658 }
5759 if err != nil {
60+ s .running = false
5861 log .Printf ("Failed to listen on %v: %v" , s .address , err )
5962 return
6063 }
6164 go s .listen ()
6265}
6366
6467func (s * Server ) Stop () {
68+ if s .listener == nil {
69+ return
70+ }
71+ s .running = false
6572 if err := s .listener .Close (); err != nil {
6673 log .Printf ("Could not close listener: %v" , err )
6774 }
6875 for id := range s .clients {
6976 s .CloseConnection (id )
7077 }
78+ s .listener = nil
7179}
7280
7381func (s * Server ) listen () {
7482 log .Print ("Listening on " , s .address )
7583
76- for {
84+ for s . running {
7785 conn , err := s .listener .Accept ()
7886 if err != nil {
7987 log .Print ("Could not accept connection: " , err )
You can’t perform that action at this time.
0 commit comments