MCPcopy Create free account
hub / github.com/NativeScript/SimDeck / handle_socket_inner

Function handle_socket_inner

packages/server/src/devtools.rs:1250–1314  ·  view source on GitHub ↗
(
    socket: WebSocket,
    target: ChromeDevToolsTargetRuntime,
    query: DevToolsQuery,
)

Source from the content-addressed store, hash-verified

1248}
1249
1250async fn handle_socket_inner(
1251 socket: WebSocket,
1252 target: ChromeDevToolsTargetRuntime,
1253 query: DevToolsQuery,
1254) -> Result<(), String> {
1255 let (mut writer, mut reader) = socket.split();
1256 let mut state = CdpState::default();
1257
1258 while let Some(message) = reader.next().await {
1259 let text = match message {
1260 Ok(Message::Text(text)) => text.to_string(),
1261 Ok(Message::Binary(bytes)) => String::from_utf8(bytes.to_vec())
1262 .map_err(|error| format!("Invalid UTF-8 DevTools frame: {error}"))?,
1263 Ok(Message::Close(_)) => break,
1264 Ok(Message::Ping(_)) | Ok(Message::Pong(_)) => continue,
1265 Err(error) => return Err(format!("WebSocket client error: {error}")),
1266 };
1267
1268 let request = serde_json::from_str::<Value>(&text)
1269 .map_err(|error| format!("Malformed DevTools JSON: {error}"))?;
1270 let id = request.get("id").cloned();
1271 let method = request
1272 .get("method")
1273 .and_then(Value::as_str)
1274 .unwrap_or_default()
1275 .to_owned();
1276 let params = request.get("params").cloned().unwrap_or(Value::Null);
1277 let outcome =
1278 match handle_cdp_method(&mut state, &target, query.clone(), &method, params).await {
1279 Ok(outcome) => outcome,
1280 Err(message) => {
1281 let response = json!({
1282 "id": id.unwrap_or(Value::Null),
1283 "error": {
1284 "code": -32000,
1285 "message": message,
1286 },
1287 });
1288 writer
1289 .send(Message::Text(response.to_string().into()))
1290 .await
1291 .map_err(|error| format!("Unable to send DevTools response: {error}"))?;
1292 continue;
1293 }
1294 };
1295 let response = json!({
1296 "id": id.unwrap_or(Value::Null),
1297 "result": outcome.result,
1298 });
1299
1300 writer
1301 .send(Message::Text(response.to_string().into()))
1302 .await
1303 .map_err(|error| format!("Unable to send DevTools response: {error}"))?;
1304
1305 for event in outcome.events {
1306 writer
1307 .send(Message::Text(event.to_string().into()))

Callers 1

handle_socketFunction · 0.85

Calls 5

handle_cdp_methodFunction · 0.85
TextInterface · 0.85
getMethod · 0.65
cloneMethod · 0.65
sendMethod · 0.65

Tested by

no test coverage detected