1+ use std:: sync:: atomic:: { AtomicBool , Ordering } ;
12use std:: sync:: Arc ;
23use std:: thread;
4+ use tauri:: Emitter ;
35#[ cfg( feature = "steam" ) ]
46use tauri:: Manager ;
57use tiny_http:: { Response , Server } ;
@@ -44,6 +46,9 @@ fn preflight_response() -> Response<std::io::Empty> {
4446
4547pub struct ControlServer {
4648 pub port : u16 ,
49+
50+ #[ allow( dead_code) ]
51+ pub game_connected : Arc < AtomicBool > ,
4752}
4853
4954impl ControlServer {
@@ -62,17 +67,29 @@ impl ControlServer {
6267
6368 tracing:: info!( "Control server started on port {}" , port) ;
6469
70+ let game_connected = Arc :: new ( AtomicBool :: new ( false ) ) ;
71+ let game_connected_clone = Arc :: clone ( & game_connected) ;
72+
6573 thread:: spawn ( move || {
66- Self :: run_server ( server, app_handle, presence_manager) ;
74+ Self :: run_server ( server, app_handle, presence_manager, game_connected_clone ) ;
6775 } ) ;
6876
69- Ok ( Self { port } )
77+ Ok ( Self {
78+ port,
79+ game_connected,
80+ } )
81+ }
82+
83+ #[ allow( dead_code) ]
84+ pub fn reset_connected_flag ( & self ) {
85+ self . game_connected . store ( false , Ordering :: SeqCst ) ;
7086 }
7187
7288 fn run_server (
7389 server : Server ,
7490 app_handle : tauri:: AppHandle ,
7591 presence_manager : Arc < PresenceManager > ,
92+ game_connected : Arc < AtomicBool > ,
7693 ) {
7794 for request in server. incoming_requests ( ) {
7895 // Handle CORS preflight requests
@@ -94,6 +111,13 @@ impl ControlServer {
94111
95112 tracing:: debug!( "Control server received request: {}" , url. path( ) ) ;
96113
114+ if !game_connected. swap ( true , Ordering :: SeqCst ) {
115+ tracing:: info!( "Game connected to control server" ) ;
116+ if let Some ( session) = presence_manager. get_game_session ( ) {
117+ app_handle. emit ( "game-connected" , & session. server_name ) . ok ( ) ;
118+ }
119+ }
120+
97121 match url. path ( ) {
98122 "/restart" => {
99123 Self :: handle_restart ( request, & app_handle, & presence_manager) ;
0 commit comments