Open a TcpListener upon StartDebugger request

This commit is contained in:
Tad Hardesty 2019-11-30 18:00:00 -08:00
parent 5acc28dbc2
commit 215853d431
2 changed files with 27 additions and 0 deletions

View file

@ -35,6 +35,25 @@ use self::dap_types::*;
use self::launched::Launched;
use self::extools::Extools;
pub fn start_server(dreamseeker_exe: String) -> std::io::Result<u16> {
use std::net::*;
let listener = TcpListener::bind((Ipv4Addr::LOCALHOST, 0))?;
let port = listener.local_addr()?.port();
eprintln!("listening for debugger connection on port {}", port);
std::thread::Builder::new()
.name(format!("DAP listener on port {}", port))
.spawn(|| {
let mut debugger = Debugger::new(dreamseeker_exe);
let (stream, addr) = listener.accept().unwrap();
drop(listener);
// TODO
})?;
Ok(port)
}
pub fn debugger_main<I: Iterator<Item=String>>(mut args: I) {
eprintln!("acting as debug adapter");
let mut dreamseeker_exe = None;

View file

@ -1570,6 +1570,14 @@ handle_method_call! {
Some(DocumentSymbolResponse::Nested(find_document_symbols(&mut iter, end)))
}
}
// ------------------------------------------------------------------------
// debugger entry point
on StartDebugger(&mut self, params) {
extras::StartDebuggerResult {
port: debugger::start_server(params.dreamseeker_exe).map_err(invalid_request)?,
}
}
}
handle_notification! {