@@ -31,6 +31,8 @@ pub struct UnityMessagingClient {
3131 last_compilation_finished : Arc < Mutex < Option < SystemTime > > > ,
3232 /// Compile errors collected after compilation finishes
3333 last_compile_errors : Arc < Mutex < Vec < String > > > ,
34+ /// Whether we have received the first message from Unity (used to trigger initial GetCompileErrors)
35+ first_message_received : Arc < Mutex < bool > > ,
3436}
3537
3638impl UnityMessagingClient {
@@ -66,6 +68,7 @@ impl UnityMessagingClient {
6668 is_in_play_mode : Arc :: new ( Mutex :: new ( false ) ) ,
6769 last_compilation_finished : Arc :: new ( Mutex :: new ( None ) ) ,
6870 last_compile_errors : Arc :: new ( Mutex :: new ( Vec :: new ( ) ) ) ,
71+ first_message_received : Arc :: new ( Mutex :: new ( false ) ) ,
6972 } )
7073 }
7174
@@ -91,8 +94,7 @@ impl UnityMessagingClient {
9194 let is_online = self . is_online . clone ( ) ;
9295 let current_test_run_id = self . current_test_run_id . clone ( ) ;
9396 let is_in_play_mode = self . is_in_play_mode . clone ( ) ;
94- let last_compilation_finished = self . last_compilation_finished . clone ( ) ;
95- let last_compile_errors = self . last_compile_errors . clone ( ) ;
97+ let first_message_received = self . first_message_received . clone ( ) ;
9698
9799 // Spawn background task for message listening
98100 let task = tokio:: spawn ( async move {
@@ -103,7 +105,8 @@ impl UnityMessagingClient {
103105 last_response_time,
104106 is_online,
105107 current_test_run_id,
106- is_in_play_mode
108+ is_in_play_mode,
109+ first_message_received
107110 )
108111 . await ;
109112 } ) ;
@@ -163,6 +166,7 @@ impl UnityMessagingClient {
163166 is_online : Arc < Mutex < bool > > ,
164167 current_test_run_id : Arc < Mutex < Option < String > > > ,
165168 is_in_play_mode : Arc < Mutex < bool > > ,
169+ first_message_received : Arc < Mutex < bool > > ,
166170 ) {
167171 let mut buffer = [ 0u8 ; 8192 ] ;
168172 let mut ping_interval = tokio:: time:: interval ( Duration :: from_secs ( 1 ) ) ;
@@ -196,6 +200,24 @@ impl UnityMessagingClient {
196200 info_log!( "Unity {:?}: {}" , message. message_type, message. value) ;
197201 }
198202
203+ let mut just_received_first_message = false ;
204+ // Check if this is the first message from Unity (excluding Ping/Pong)
205+ if let Ok ( mut first_received) = first_message_received. lock( ) {
206+ if !* first_received {
207+ * first_received = true ;
208+ debug_log!( "First message received from Unity, requesting initial compile errors" ) ;
209+ just_received_first_message = true ;
210+ }
211+ }
212+
213+ if just_received_first_message {
214+ // Send GetCompileErrors request to get initial compile errors
215+ let get_compile_errors_message = Message :: new( MessageType :: GetCompileErrors , String :: new( ) ) ;
216+ if let Err ( e) = socket. send_to( & get_compile_errors_message. serialize( ) , unity_address) . await {
217+ error_log!( "Failed to send initial GetCompileErrors request: {}" , e) ;
218+ }
219+ }
220+
199221 // Update last response time for any valid message
200222 if let Ok ( mut time) = last_response_time. lock( ) {
201223 * time = Some ( std:: time:: Instant :: now( ) ) ;
0 commit comments