moving to the single binary (#1710)
This commit is contained in:
		
							parent
							
								
									856657e39a
								
							
						
					
					
						commit
						f614a69929
					
				@ -65,10 +65,6 @@ ipc = ["ethcore/ipc"]
 | 
			
		||||
path = "parity/main.rs"
 | 
			
		||||
name = "parity"
 | 
			
		||||
 | 
			
		||||
[[bin]]
 | 
			
		||||
path = "parity/sync/main.rs"
 | 
			
		||||
name = "sync"
 | 
			
		||||
 | 
			
		||||
[profile.release]
 | 
			
		||||
debug = true
 | 
			
		||||
lto = false
 | 
			
		||||
 | 
			
		||||
@ -78,6 +78,7 @@ mod account;
 | 
			
		||||
mod blockchain;
 | 
			
		||||
mod presale;
 | 
			
		||||
mod run;
 | 
			
		||||
mod sync;
 | 
			
		||||
 | 
			
		||||
use std::{process, env};
 | 
			
		||||
use cli::print_version;
 | 
			
		||||
@ -111,6 +112,12 @@ fn start() -> Result<String, String> {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn main() {
 | 
			
		||||
	// just redirect to the sync::main()
 | 
			
		||||
	if std::env::args().nth(1).map(|arg| arg == "sync").unwrap_or(false) {
 | 
			
		||||
		sync::main();
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	match start() {
 | 
			
		||||
		Ok(result) => {
 | 
			
		||||
			print!("{}", result);
 | 
			
		||||
 | 
			
		||||
@ -25,6 +25,13 @@ use self::no_ipc_deps::*;
 | 
			
		||||
use self::ipc_deps::*;
 | 
			
		||||
use ethcore_logger::Config as LogConfig;
 | 
			
		||||
 | 
			
		||||
pub mod service_urls {
 | 
			
		||||
	pub const CLIENT: &'static str = "ipc:///tmp/parity-chain.ipc";
 | 
			
		||||
	pub const SYNC: &'static str = "ipc:///tmp/parity-sync.ipc";
 | 
			
		||||
	pub const SYNC_NOTIFY: &'static str = "ipc:///tmp/parity-sync-notify.ipc";
 | 
			
		||||
	pub const NETWORK_MANAGER: &'static str = "ipc:///tmp/parity-manage-net.ipc";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(not(feature="ipc"))]
 | 
			
		||||
mod no_ipc_deps {
 | 
			
		||||
	pub use ethsync::{EthSync, SyncProvider, ManageNetwork};
 | 
			
		||||
@ -51,7 +58,6 @@ mod ipc_deps {
 | 
			
		||||
	pub use ipc::binary::serialize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#[cfg(feature="ipc")]
 | 
			
		||||
pub fn hypervisor() -> Option<Hypervisor> {
 | 
			
		||||
	Some(Hypervisor::new())
 | 
			
		||||
@ -74,11 +80,11 @@ fn sync_arguments(sync_cfg: SyncConfig, net_cfg: NetworkConfiguration, log_setti
 | 
			
		||||
 | 
			
		||||
	// client service url and logging settings are passed in command line
 | 
			
		||||
	let mut cli_args = Vec::new();
 | 
			
		||||
	cli_args.push("ipc:///tmp/parity-chain.ipc".to_owned());
 | 
			
		||||
	cli_args.push("sync".to_owned());
 | 
			
		||||
	if !log_settings.color { cli_args.push("--no-color".to_owned()); }
 | 
			
		||||
	if let Some(ref init) = log_settings.init {
 | 
			
		||||
	if let Some(ref mode) = log_settings.mode {
 | 
			
		||||
		cli_args.push("-l".to_owned());
 | 
			
		||||
		cli_args.push(init.to_owned());
 | 
			
		||||
		cli_args.push(mode.to_owned());
 | 
			
		||||
	}
 | 
			
		||||
	if let Some(ref file) = log_settings.file {
 | 
			
		||||
		cli_args.push("--log-file".to_owned());
 | 
			
		||||
@ -100,14 +106,14 @@ pub fn sync
 | 
			
		||||
	-> Result<SyncModules, ethcore::error::Error>
 | 
			
		||||
{
 | 
			
		||||
	let mut hypervisor = hypervisor_ref.take().expect("There should be hypervisor for ipc configuration");
 | 
			
		||||
	hypervisor = hypervisor.module(SYNC_MODULE_ID, "sync", sync_arguments(sync_cfg, net_cfg, log_settings));
 | 
			
		||||
	hypervisor = hypervisor.module(SYNC_MODULE_ID, "parity", sync_arguments(sync_cfg, net_cfg, log_settings));
 | 
			
		||||
 | 
			
		||||
	hypervisor.start();
 | 
			
		||||
	hypervisor.wait_for_startup();
 | 
			
		||||
 | 
			
		||||
	let sync_client = init_client::<SyncClient<_>>("ipc:///tmp/parity-sync.ipc").unwrap();
 | 
			
		||||
	let notify_client = init_client::<ChainNotifyClient<_>>("ipc:///tmp/parity-sync-notify.ipc").unwrap();
 | 
			
		||||
	let manage_client = init_client::<NetworkManagerClient<_>>("ipc:///tmp/parity-manage-net.ipc").unwrap();
 | 
			
		||||
	let sync_client = init_client::<SyncClient<_>>(service_urls::SYNC).unwrap();
 | 
			
		||||
	let notify_client = init_client::<ChainNotifyClient<_>>(service_urls::SYNC_NOTIFY).unwrap();
 | 
			
		||||
	let manage_client = init_client::<NetworkManagerClient<_>>(service_urls::NETWORK_MANAGER).unwrap();
 | 
			
		||||
 | 
			
		||||
	*hypervisor_ref = Some(hypervisor);
 | 
			
		||||
	Ok((sync_client, manage_client, notify_client))
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,8 @@ use ethcore::account_provider::AccountProvider;
 | 
			
		||||
use ethcore::miner::{Miner, MinerService, ExternalMiner, MinerOptions};
 | 
			
		||||
use ethsync::SyncConfig;
 | 
			
		||||
use informant::Informant;
 | 
			
		||||
#[cfg(feature="ipc")]
 | 
			
		||||
use ethcore::client::ChainNotify;
 | 
			
		||||
 | 
			
		||||
use rpc::{HttpServer, IpcServer, HttpConfiguration, IpcConfiguration};
 | 
			
		||||
use signer::SignerServer;
 | 
			
		||||
 | 
			
		||||
@ -16,18 +16,9 @@
 | 
			
		||||
 | 
			
		||||
//! Parity sync service
 | 
			
		||||
 | 
			
		||||
extern crate ethcore_ipc_nano as nanoipc;
 | 
			
		||||
extern crate ethcore_ipc_hypervisor as hypervisor;
 | 
			
		||||
extern crate ethcore_ipc as ipc;
 | 
			
		||||
extern crate ctrlc;
 | 
			
		||||
#[macro_use] extern crate log;
 | 
			
		||||
extern crate ethsync;
 | 
			
		||||
extern crate rustc_serialize;
 | 
			
		||||
extern crate docopt;
 | 
			
		||||
extern crate ethcore;
 | 
			
		||||
extern crate ethcore_util as util;
 | 
			
		||||
extern crate ethcore_logger;
 | 
			
		||||
 | 
			
		||||
use nanoipc;
 | 
			
		||||
use ipc;
 | 
			
		||||
use std;
 | 
			
		||||
use std::sync::Arc;
 | 
			
		||||
use hypervisor::{HypervisorServiceClient, SYNC_MODULE_ID, HYPERVISOR_IPC_URL};
 | 
			
		||||
use ctrlc::CtrlC;
 | 
			
		||||
@ -37,13 +28,13 @@ use ethcore::client::{RemoteClient, ChainNotify};
 | 
			
		||||
use ethsync::{SyncProvider, EthSync, ManageNetwork, ServiceConfiguration};
 | 
			
		||||
use std::thread;
 | 
			
		||||
use nanoipc::IpcInterface;
 | 
			
		||||
 | 
			
		||||
use modules::service_urls;
 | 
			
		||||
use ethcore_logger::{Config as LogConfig, setup_log};
 | 
			
		||||
 | 
			
		||||
const USAGE: &'static str = "
 | 
			
		||||
Ethcore sync service
 | 
			
		||||
Usage:
 | 
			
		||||
  sync <client-url> [options]
 | 
			
		||||
  parity sync [options]
 | 
			
		||||
 | 
			
		||||
 Options:
 | 
			
		||||
  -l --logging LOGGING     Specify the logging level. Must conform to the same
 | 
			
		||||
@ -55,7 +46,6 @@ Usage:
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, RustcDecodable)]
 | 
			
		||||
struct Args {
 | 
			
		||||
	arg_client_url: String,
 | 
			
		||||
	flag_logging: Option<String>,
 | 
			
		||||
	flag_log_file: Option<String>,
 | 
			
		||||
	flag_no_color: bool,
 | 
			
		||||
@ -83,7 +73,7 @@ fn run_service<T: ?Sized + Send + Sync + 'static>(addr: &str, stop_guard: Arc<At
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn main() {
 | 
			
		||||
pub fn main() {
 | 
			
		||||
	use std::io::{self, Read};
 | 
			
		||||
 | 
			
		||||
	let args: Args = Docopt::new(USAGE)
 | 
			
		||||
@ -96,16 +86,16 @@ fn main() {
 | 
			
		||||
	io::stdin().read_to_end(&mut buffer).expect("Failed to read initialisation payload");
 | 
			
		||||
	let service_config = ipc::binary::deserialize::<ServiceConfiguration>(&buffer).expect("Failed deserializing initialisation payload");
 | 
			
		||||
 | 
			
		||||
	let remote_client = nanoipc::init_client::<RemoteClient<_>>(&args.arg_client_url).unwrap();
 | 
			
		||||
	let remote_client = nanoipc::init_client::<RemoteClient<_>>(service_urls::CLIENT).unwrap();
 | 
			
		||||
 | 
			
		||||
	remote_client.handshake().unwrap();
 | 
			
		||||
 | 
			
		||||
	let stop = Arc::new(AtomicBool::new(false));
 | 
			
		||||
	let sync = EthSync::new(service_config.sync, remote_client.service().clone(), service_config.net).unwrap();
 | 
			
		||||
 | 
			
		||||
	run_service("ipc:///tmp/parity-sync.ipc", stop.clone(), sync.clone() as Arc<SyncProvider>);
 | 
			
		||||
	run_service("ipc:///tmp/parity-manage-net.ipc", stop.clone(), sync.clone() as Arc<ManageNetwork>);
 | 
			
		||||
	run_service("ipc:///tmp/parity-sync-notify.ipc", stop.clone(), sync.clone() as Arc<ChainNotify>);
 | 
			
		||||
	run_service(service_urls::SYNC, stop.clone(), sync.clone() as Arc<SyncProvider>);
 | 
			
		||||
	run_service(service_urls::NETWORK_MANAGER, stop.clone(), sync.clone() as Arc<ManageNetwork>);
 | 
			
		||||
	run_service(service_urls::SYNC_NOTIFY, stop.clone(), sync.clone() as Arc<ChainNotify>);
 | 
			
		||||
 | 
			
		||||
	let hypervisor_client = nanoipc::init_client::<HypervisorServiceClient<_>>(HYPERVISOR_IPC_URL).unwrap();
 | 
			
		||||
	hypervisor_client.handshake().unwrap();
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user