Add websocket config to CLI

This commit is contained in:
Paul Hauner 2019-09-14 22:57:46 -04:00
parent da26341011
commit 9c5eded1ab
No known key found for this signature in database
GPG Key ID: 303E4494BB28068C
6 changed files with 74 additions and 21 deletions

View File

@ -173,6 +173,7 @@ impl Config {
self.network.apply_cli_args(args)?; self.network.apply_cli_args(args)?;
self.rpc.apply_cli_args(args)?; self.rpc.apply_cli_args(args)?;
self.rest_api.apply_cli_args(args)?; self.rest_api.apply_cli_args(args)?;
self.websocket_server.apply_cli_args(args)?;
if let Some(log_file) = args.value_of("logfile") { if let Some(log_file) = args.value_of("logfile") {
self.log_file = PathBuf::from(log_file); self.log_file = PathBuf::from(log_file);

View File

@ -552,6 +552,7 @@ impl ConfigBuilder {
self.client_config.network.discovery_port += bump; self.client_config.network.discovery_port += bump;
self.client_config.rpc.port += bump; self.client_config.rpc.port += bump;
self.client_config.rest_api.port += bump; self.client_config.rest_api.port += bump;
self.client_config.websocket_server.port += bump;
} }
if self.eth2_config.spec_constants != self.client_config.spec_constants { if self.eth2_config.spec_constants != self.client_config.spec_constants {

View File

@ -147,7 +147,7 @@ fn main() {
.conflicts_with("port-bump") .conflicts_with("port-bump")
.takes_value(true), .takes_value(true),
) )
/* Client related arguments */ /* REST API related arguments */
.arg( .arg(
Arg::with_name("no-api") Arg::with_name("no-api")
.long("no-api") .long("no-api")
@ -169,6 +169,29 @@ fn main() {
.conflicts_with("port-bump") .conflicts_with("port-bump")
.takes_value(true), .takes_value(true),
) )
/* Websocket related arguments */
.arg(
Arg::with_name("no-ws")
.long("no-ws")
.help("Disable websocket server.")
.takes_value(false),
)
.arg(
Arg::with_name("ws-address")
.long("ws-address")
.value_name("ADDRESS")
.help("Set the listen address for the websocket server.")
.conflicts_with_all(&["no-ws"])
.takes_value(true),
)
.arg(
Arg::with_name("ws-port")
.long("ws-port")
.value_name("PORT")
.help("Set the listen TCP port for the websocket server.")
.conflicts_with_all(&["no-ws", "port-bump"])
.takes_value(true),
)
/* /*
* Eth1 Integration * Eth1 Integration

View File

@ -8,6 +8,7 @@ edition = "2018"
[dependencies] [dependencies]
beacon_chain = { path = "../beacon_chain" } beacon_chain = { path = "../beacon_chain" }
clap = "2.32.0"
exit-future = "0.1.3" exit-future = "0.1.3"
futures = "0.1.25" futures = "0.1.25"
serde = "1.0" serde = "1.0"

View File

@ -0,0 +1,45 @@
use clap::ArgMatches;
use serde::{Deserialize, Serialize};
use std::net::Ipv4Addr;
/// The core configuration of a Lighthouse beacon node.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Config {
pub enabled: bool,
/// The IPv4 address the REST API HTTP server will listen on.
pub listen_address: Ipv4Addr,
/// The port the REST API HTTP server will listen on.
pub port: u16,
}
impl Default for Config {
fn default() -> Self {
Config {
enabled: true,
listen_address: Ipv4Addr::new(127, 0, 0, 1),
port: 5053,
}
}
}
impl Config {
pub fn apply_cli_args(&mut self, args: &ArgMatches) -> Result<(), &'static str> {
if args.is_present("no-ws") {
self.enabled = false;
}
if let Some(rpc_address) = args.value_of("ws-address") {
self.listen_address = rpc_address
.parse::<Ipv4Addr>()
.map_err(|_| "ws-address is not a valid IPv4 address.")?;
}
if let Some(rpc_port) = args.value_of("ws-port") {
self.port = rpc_port
.parse::<u16>()
.map_err(|_| "ws-port is not a valid u16.")?;
}
Ok(())
}
}

View File

@ -1,31 +1,13 @@
use beacon_chain::events::{EventHandler, EventKind}; use beacon_chain::events::{EventHandler, EventKind};
use serde::{Deserialize, Serialize};
use slog::{error, info, Logger}; use slog::{error, info, Logger};
use std::marker::PhantomData; use std::marker::PhantomData;
use std::net::Ipv4Addr;
use std::thread; use std::thread;
use types::EthSpec; use types::EthSpec;
use ws::{Sender, WebSocket}; use ws::{Sender, WebSocket};
/// The core configuration of a Lighthouse beacon node. mod config;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Config {
pub enabled: bool,
/// The IPv4 address the REST API HTTP server will listen on.
pub listen_address: Ipv4Addr,
/// The port the REST API HTTP server will listen on.
pub port: u16,
}
impl Default for Config { pub use config::Config;
fn default() -> Self {
Config {
enabled: true,
listen_address: Ipv4Addr::new(127, 0, 0, 1),
port: 5053,
}
}
}
pub struct WebSocketSender<T: EthSpec> { pub struct WebSocketSender<T: EthSpec> {
sender: Option<Sender>, sender: Option<Sender>,