devtools/
network_handler.rs1use std::net::TcpStream;
6use std::sync::{Arc, Mutex};
7
8use devtools_traits::NetworkEvent;
9use serde::Serialize;
10
11use crate::actor::ActorRegistry;
12use crate::actors::network_event::NetworkEventActor;
13use crate::actors::watcher::WatcherActor;
14use crate::resource::{ResourceArrayType, ResourceAvailable};
15
16#[derive(Clone, Serialize)]
17pub struct Cause {
18 #[serde(rename = "type")]
19 pub type_: String,
20 #[serde(rename = "loadingDocumentUri")]
21 pub loading_document_uri: Option<String>,
22}
23
24pub(crate) fn handle_network_event(
25 actors: Arc<Mutex<ActorRegistry>>,
26 netevent_actor_name: String,
27 mut connections: Vec<TcpStream>,
28 network_event: NetworkEvent,
29) {
30 let mut actors = actors.lock().unwrap();
31 let actor = actors.find_mut::<NetworkEventActor>(&netevent_actor_name);
32 let watcher_name = actor.watcher_name.clone();
33 match network_event {
34 NetworkEvent::HttpRequest(httprequest) => {
35 actor.add_request(httprequest);
36
37 let event_actor = actor.event_actor();
38 let resource_updates = actor.resource_updates();
39 let watcher_actor = actors.find::<WatcherActor>(&watcher_name);
40
41 for stream in &mut connections {
42 watcher_actor.resource_array(
43 event_actor.clone(),
44 "network-event".to_string(),
45 ResourceArrayType::Available,
46 stream,
47 );
48
49 watcher_actor.resource_array(
51 resource_updates.clone(),
52 "network-event".to_string(),
53 ResourceArrayType::Updated,
54 stream,
55 );
56 }
57 },
58
59 NetworkEvent::HttpRequestUpdate(httprequest) => {
60 actor.add_request(httprequest);
61 let resource = actor.resource_updates();
62 let watcher_actor = actors.find::<WatcherActor>(&watcher_name);
63
64 for stream in &mut connections {
65 watcher_actor.resource_array(
66 resource.clone(),
67 "network-event".to_string(),
68 ResourceArrayType::Updated,
69 stream,
70 );
71 }
72 },
73 NetworkEvent::HttpResponse(httpresponse) => {
74 actor.add_response(httpresponse);
76 let resource = actor.resource_updates();
77 let watcher_actor = actors.find::<WatcherActor>(&watcher_name);
78
79 for stream in &mut connections {
80 watcher_actor.resource_array(
81 resource.clone(),
82 "network-event".to_string(),
83 ResourceArrayType::Updated,
84 stream,
85 );
86 }
87 },
88 }
89}