diff options
author | Eddy Bruel <ejpbruel@mozilla.com> | 2016-09-06 12:23:00 +0200 |
---|---|---|
committer | Eddy Bruel <ejpbruel@mozilla.com> | 2016-09-12 11:02:09 +0200 |
commit | 8856671f2e6d66ee0fd85cc6aab63a615351c288 (patch) | |
tree | d6ae504719330ff58ee847fa29439379ce7a24cb /components/debugger/lib.rs | |
parent | 77651959e2ccab73d6785a67e242d85445e81dfb (diff) | |
download | servo-8856671f2e6d66ee0fd85cc6aab63a615351c288.tar.gz servo-8856671f2e6d66ee0fd85cc6aab63a615351c288.zip |
Implement a WebSocket server for debugging.
Diffstat (limited to 'components/debugger/lib.rs')
-rw-r--r-- | components/debugger/lib.rs | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/components/debugger/lib.rs b/components/debugger/lib.rs new file mode 100644 index 00000000000..d2f9713c4f9 --- /dev/null +++ b/components/debugger/lib.rs @@ -0,0 +1,50 @@ +/* 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/. */ + +extern crate util; +extern crate websocket; + +use util::thread::spawn_named; +use websocket::{Message, Receiver, Sender, Server}; +use websocket::message::Type; + +pub fn start_server(port: u16) { + println!("Starting debugger server."); + spawn_named("debugger-server".to_owned(), move || { + run_server(port) + }); +} + +fn run_server(port: u16) { + let server = Server::bind(("127.0.0.1", port)).unwrap(); + for connection in server { + spawn_named("debugger-connection".to_owned(), move || { + let connection = connection.unwrap(); + let request = connection.read_request().unwrap(); + let response = request.accept(); + let client = response.send().unwrap(); + let (mut sender, mut receiver) = client.split(); + for message in receiver.incoming_messages() { + let message: Message = message.unwrap(); + match message.opcode { + Type::Close => { + let message = Message::close(); + sender.send_message(&message).unwrap(); + break; + } + Type::Ping => { + let message = Message::pong(message.payload); + sender.send_message(&message).unwrap(); + } + Type::Text => { + sender.send_message(&message).unwrap(); + } + _ => { + panic!("Unexpected message type."); + } + } + } + }); + } +} |