mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
DevTools - add DeviceActor and update Root to own global actors
This commit is contained in:
parent
cdd7f0a658
commit
5c8492d760
3 changed files with 123 additions and 1 deletions
86
components/devtools/actors/device.rs
Normal file
86
components/devtools/actors/device.rs
Normal file
|
@ -0,0 +1,86 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use actor::{Actor, ActorMessageStatus, ActorRegistry};
|
||||
use serde_json::{Map, Value};
|
||||
use std::net::TcpStream;
|
||||
use protocol::{ActorDescription, Method};
|
||||
use protocol::JsonPacketStream;
|
||||
|
||||
#[derive(Serialize)]
|
||||
struct GetDescriptionReply {
|
||||
from: String,
|
||||
value: SystemInfo,
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
struct SystemInfo {
|
||||
apptype: String,
|
||||
platformVersion: String,
|
||||
}
|
||||
|
||||
pub struct DeviceActor {
|
||||
pub name: String,
|
||||
}
|
||||
|
||||
impl Actor for DeviceActor {
|
||||
fn name(&self) -> String {
|
||||
self.name.clone()
|
||||
}
|
||||
fn handle_message(
|
||||
&self,
|
||||
_registry: &ActorRegistry,
|
||||
msg_type: &str,
|
||||
_msg: &Map<String, Value>,
|
||||
stream: &mut TcpStream,
|
||||
) -> Result<ActorMessageStatus, ()> {
|
||||
|
||||
Ok(match msg_type {
|
||||
"getDescription" => {
|
||||
|
||||
let msg = GetDescriptionReply {
|
||||
from: self.name(),
|
||||
value: SystemInfo {
|
||||
apptype: "servo".to_string(),
|
||||
platformVersion: "63.0".to_string(),
|
||||
}
|
||||
};
|
||||
stream.write_json_packet(&msg);
|
||||
ActorMessageStatus::Processed
|
||||
},
|
||||
|
||||
_ => ActorMessageStatus::Ignored,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl DeviceActor {
|
||||
pub fn new(name: String) -> DeviceActor {
|
||||
DeviceActor { name: name }
|
||||
}
|
||||
|
||||
pub fn description() -> ActorDescription {
|
||||
ActorDescription {
|
||||
category: "actor",
|
||||
typeName: "device",
|
||||
methods: vec![Method {
|
||||
name: "getDescription",
|
||||
request: Value::Null,
|
||||
response: Value::Object(
|
||||
vec![(
|
||||
"value".to_owned(),
|
||||
Value::Object(
|
||||
vec![("_retval".to_owned(), Value::String("json".to_owned()))]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
),
|
||||
)].into_iter()
|
||||
.collect(),
|
||||
),
|
||||
}],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue