Respond to the connect message from a devtools client (#35745)

* Respond to the "connect" message

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>

* Bump log levels in devtools implementation a bit

If everything is "debug" then nothing stands out.

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
This commit is contained in:
Simon Wülker 2025-03-02 13:16:51 +01:00 committed by GitHub
parent aa26aa1963
commit e7e8ccea20
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 20 additions and 12 deletions

View file

@ -10,7 +10,7 @@ use std::net::TcpStream;
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
use base::cross_process_instant::CrossProcessInstant; use base::cross_process_instant::CrossProcessInstant;
use log::{debug, warn}; use log::debug;
use serde_json::{Map, Value}; use serde_json::{Map, Value};
/// General actor system infrastructure. /// General actor system infrastructure.
@ -175,21 +175,22 @@ impl ActorRegistry {
let to = match msg.get("to") { let to = match msg.get("to") {
Some(to) => to.as_str().unwrap(), Some(to) => to.as_str().unwrap(),
None => { None => {
warn!("Received unexpected message: {:?}", msg); log::warn!("Received unexpected message: {:?}", msg);
return Err(()); return Err(());
}, },
}; };
match self.actors.get(to) { match self.actors.get(to) {
None => debug!("message received for unknown actor \"{}\"", to), None => log::warn!("message received for unknown actor \"{}\"", to),
Some(actor) => { Some(actor) => {
let msg_type = msg.get("type").unwrap().as_str().unwrap(); let msg_type = msg.get("type").unwrap().as_str().unwrap();
if actor.handle_message(self, msg_type, msg, stream, id)? != if actor.handle_message(self, msg_type, msg, stream, id)? !=
ActorMessageStatus::Processed ActorMessageStatus::Processed
{ {
debug!( log::warn!(
"unexpected message type \"{}\" found for actor \"{}\"", "unexpected message type \"{}\" found for actor \"{}\"",
msg_type, to msg_type,
to
); );
} }
}, },

View file

@ -12,7 +12,7 @@
use std::net::TcpStream; use std::net::TcpStream;
use serde::Serialize; use serde::Serialize;
use serde_json::{Map, Value}; use serde_json::{json, Map, Value};
use crate::actor::{Actor, ActorMessageStatus, ActorRegistry}; use crate::actor::{Actor, ActorMessageStatus, ActorRegistry};
use crate::actors::device::DeviceActor; use crate::actors::device::DeviceActor;
@ -145,6 +145,13 @@ impl Actor for RootActor {
_id: StreamId, _id: StreamId,
) -> Result<ActorMessageStatus, ()> { ) -> Result<ActorMessageStatus, ()> {
Ok(match msg_type { Ok(match msg_type {
"connect" => {
let message = json!({
"from": "root",
});
let _ = stream.write_json_packet(&message);
ActorMessageStatus::Processed
},
"listAddons" => { "listAddons" => {
let actor = ListAddonsReply { let actor = ListAddonsReply {
from: "root".to_owned(), from: "root".to_owned(),

View file

@ -28,7 +28,7 @@ use devtools_traits::{
}; };
use embedder_traits::{AllowOrDeny, EmbedderMsg, EmbedderProxy}; use embedder_traits::{AllowOrDeny, EmbedderMsg, EmbedderProxy};
use ipc_channel::ipc::{self, IpcSender}; use ipc_channel::ipc::{self, IpcSender};
use log::{debug, trace, warn}; use log::trace;
use serde::Serialize; use serde::Serialize;
use servo_rand::RngCore; use servo_rand::RngCore;
@ -650,10 +650,10 @@ fn allow_devtools_client(stream: &mut TcpStream, embedder: &EmbedderProxy, token
/// Process the input from a single devtools client until EOF. /// Process the input from a single devtools client until EOF.
fn handle_client(actors: Arc<Mutex<ActorRegistry>>, mut stream: TcpStream, id: StreamId) { fn handle_client(actors: Arc<Mutex<ActorRegistry>>, mut stream: TcpStream, id: StreamId) {
debug!("connection established to {}", stream.peer_addr().unwrap()); log::info!("Connection established to {}", stream.peer_addr().unwrap());
let msg = actors.lock().unwrap().find::<RootActor>("root").encodable(); let msg = actors.lock().unwrap().find::<RootActor>("root").encodable();
if let Err(e) = stream.write_json_packet(&msg) { if let Err(e) = stream.write_json_packet(&msg) {
warn!("Error writing response: {:?}", e); log::warn!("Error writing response: {:?}", e);
return; return;
} }
@ -665,17 +665,17 @@ fn handle_client(actors: Arc<Mutex<ActorRegistry>>, mut stream: TcpStream, id: S
&mut stream, &mut stream,
id, id,
) { ) {
debug!("error: devtools actor stopped responding"); log::error!("Devtools actor stopped responding");
let _ = stream.shutdown(Shutdown::Both); let _ = stream.shutdown(Shutdown::Both);
break; break;
} }
}, },
Ok(None) => { Ok(None) => {
debug!("error: EOF"); log::info!("Devtools connection closed");
break; break;
}, },
Err(err_msg) => { Err(err_msg) => {
debug!("error: {}", err_msg); log::error!("Failed to read message from devtools client: {}", err_msg);
break; break;
}, },
} }