Asynchronous RPC support (#2017)

* Async RPC

* Limiting number of transactions in queue

* Fixing tests

* Bumping serde and jsonrpc-core

* serde updated to 0.8

* fixed failing tests

* Bumping ipc server

* Fixing API for endpoints

* Experimenting with tests without --release mode
This commit is contained in:
Tomasz Drwięga
2016-09-01 12:00:00 +02:00
committed by Arkadiy Paronyan
parent ca03cfa58a
commit b4f3c4bd7a
43 changed files with 657 additions and 515 deletions

View File

@@ -22,7 +22,7 @@ use std::path::{PathBuf, Path};
use std::sync::Arc;
use std::str::FromStr;
use jsonrpc_core::IoHandler;
use util::H256;
use util::{H256, Mutex};
#[cfg(feature = "ui")]
mod signer {
@@ -95,7 +95,7 @@ fn add_headers(mut response: ws::Response, mime: &str) -> ws::Response {
}
pub struct Session {
out: ws::Sender,
out: Arc<Mutex<ws::Sender>>,
skip_origin_validation: bool,
self_origin: String,
authcodes_path: PathBuf,
@@ -145,12 +145,16 @@ impl ws::Handler for Session {
fn on_message(&mut self, msg: ws::Message) -> ws::Result<()> {
let req = try!(msg.as_text());
match self.handler.handle_request(req) {
Some(res) => {
self.out.send(res)
},
None => Ok(()),
if let Some(async) = self.handler.handle_request(req) {
let out = self.out.clone();
async.on_result(move |result| {
let res = out.lock().send(result);
if let Err(e) = res {
warn!(target: "signer", "Error while sending response: {:?}", e);
}
});
}
Ok(())
}
}
@@ -177,7 +181,7 @@ impl ws::Factory for Factory {
fn connection_made(&mut self, sender: ws::Sender) -> Self::Handler {
Session {
out: sender,
out: Arc::new(Mutex::new(sender)),
handler: self.handler.clone(),
skip_origin_validation: self.skip_origin_validation,
self_origin: self.self_origin.clone(),