Эх сурвалжийг харах

split ProgramOptions into its own module

narodnik 4 жил өмнө
parent
commit
fe34207435

+ 2 - 77
bin/ircd/src/main.rs

@@ -23,10 +23,12 @@ use drk::{
 };
 
 mod privmsg;
+mod program_options;
 mod protocol_privmsg;
 mod irc_server;
 
 use crate::privmsg::PrivMsg;
+use crate::program_options::ProgramOptions;
 use crate::protocol_privmsg::ProtocolPrivMsg;
 use crate::irc_server::IrcServerConnection;
 
@@ -160,83 +162,6 @@ async fn start(executor: Arc<Executor<'_>>, options: ProgramOptions) -> Result<(
     }
 }
 
-struct ProgramOptions {
-    network_settings: net::Settings,
-    log_path: Box<std::path::PathBuf>,
-    irc_accept_addr: SocketAddr,
-}
-
-impl ProgramOptions {
-    fn load() -> Result<ProgramOptions> {
-        let app = clap_app!(dfi =>
-            (version: "0.1.0")
-            (author: "Amir Taaki <amir@dyne.org>")
-            (about: "Dark node")
-            (@arg ACCEPT: -a --accept +takes_value "Accept address")
-            (@arg SEED_NODES: -s --seeds +takes_value ... "Seed nodes")
-            (@arg CONNECTS: -c --connect +takes_value ... "Manual connections")
-            (@arg CONNECT_SLOTS: --slots +takes_value "Connection slots")
-            (@arg LOG_PATH: --log +takes_value "Logfile path")
-            (@arg IRC_ACCEPT: -r --irc +takes_value "IRC accept address")
-        )
-        .get_matches();
-
-        let accept_addr = if let Some(accept_addr) = app.value_of("ACCEPT") {
-            Some(accept_addr.parse()?)
-        } else {
-            None
-        };
-
-        let mut seed_addrs: Vec<SocketAddr> = vec![];
-        if let Some(seeds) = app.values_of("SEED_NODES") {
-            for seed in seeds {
-                seed_addrs.push(seed.parse()?);
-            }
-        }
-
-        let mut manual_connects: Vec<SocketAddr> = vec![];
-        if let Some(connections) = app.values_of("CONNECTS") {
-            for connect in connections {
-                manual_connects.push(connect.parse()?);
-            }
-        }
-
-        let connection_slots = if let Some(connection_slots) = app.value_of("CONNECT_SLOTS") {
-            connection_slots.parse()?
-        } else {
-            0
-        };
-
-        let log_path = Box::new(
-            if let Some(log_path) = app.value_of("LOG_PATH") {
-                std::path::Path::new(log_path)
-            } else {
-                std::path::Path::new("/tmp/darkfid.log")
-            }
-            .to_path_buf(),
-        );
-
-        let irc_accept_addr = if let Some(accept_addr) = app.value_of("IRC_ACCEPT") {
-            accept_addr.parse()?
-        } else {
-            ([127, 0, 0, 1], 6667).into()
-        };
-
-        Ok(ProgramOptions {
-            network_settings: net::Settings {
-                inbound: accept_addr,
-                outbound_connections: connection_slots,
-                external_addr: accept_addr,
-                peers: manual_connects,
-                seeds: seed_addrs,
-                ..Default::default()
-            },
-            log_path,
-            irc_accept_addr,
-        })
-    }
-}
-
 fn main() -> Result<()> {
     TermLogger::init(
         LevelFilter::Debug,

+ 99 - 0
bin/ircd/src/program_options.rs

@@ -0,0 +1,99 @@
+use std::{
+    io,
+    net::{SocketAddr, TcpListener, TcpStream},
+    sync::Arc,
+};
+
+use async_executor::Executor;
+use async_std::io::BufReader;
+use futures::{
+    io::{ReadHalf, WriteHalf},
+    AsyncBufReadExt, AsyncReadExt, AsyncWriteExt, Future, FutureExt,
+};
+use log::{debug, error, info, warn};
+use simplelog::{ColorChoice, LevelFilter, TermLogger, TerminalMode};
+use smol::Async;
+
+use drk::{
+    net,
+    serial::{Decodable, Encodable},
+    Error, Result,
+};
+
+pub struct ProgramOptions {
+    pub network_settings: net::Settings,
+    pub log_path: Box<std::path::PathBuf>,
+    pub irc_accept_addr: SocketAddr,
+}
+
+impl ProgramOptions {
+    pub fn load() -> Result<ProgramOptions> {
+        let app = clap_app!(dfi =>
+            (version: "0.1.0")
+            (author: "Amir Taaki <amir@dyne.org>")
+            (about: "Dark node")
+            (@arg ACCEPT: -a --accept +takes_value "Accept address")
+            (@arg SEED_NODES: -s --seeds +takes_value ... "Seed nodes")
+            (@arg CONNECTS: -c --connect +takes_value ... "Manual connections")
+            (@arg CONNECT_SLOTS: --slots +takes_value "Connection slots")
+            (@arg LOG_PATH: --log +takes_value "Logfile path")
+            (@arg IRC_ACCEPT: -r --irc +takes_value "IRC accept address")
+        )
+        .get_matches();
+
+        let accept_addr = if let Some(accept_addr) = app.value_of("ACCEPT") {
+            Some(accept_addr.parse()?)
+        } else {
+            None
+        };
+
+        let mut seed_addrs: Vec<SocketAddr> = vec![];
+        if let Some(seeds) = app.values_of("SEED_NODES") {
+            for seed in seeds {
+                seed_addrs.push(seed.parse()?);
+            }
+        }
+
+        let mut manual_connects: Vec<SocketAddr> = vec![];
+        if let Some(connections) = app.values_of("CONNECTS") {
+            for connect in connections {
+                manual_connects.push(connect.parse()?);
+            }
+        }
+
+        let connection_slots = if let Some(connection_slots) = app.value_of("CONNECT_SLOTS") {
+            connection_slots.parse()?
+        } else {
+            0
+        };
+
+        let log_path = Box::new(
+            if let Some(log_path) = app.value_of("LOG_PATH") {
+                std::path::Path::new(log_path)
+            } else {
+                std::path::Path::new("/tmp/darkfid.log")
+            }
+            .to_path_buf(),
+        );
+
+        let irc_accept_addr = if let Some(accept_addr) = app.value_of("IRC_ACCEPT") {
+            accept_addr.parse()?
+        } else {
+            ([127, 0, 0, 1], 6667).into()
+        };
+
+        Ok(ProgramOptions {
+            network_settings: net::Settings {
+                inbound: accept_addr,
+                outbound_connections: connection_slots,
+                external_addr: accept_addr,
+                peers: manual_connects,
+                seeds: seed_addrs,
+                ..Default::default()
+            },
+            log_path,
+            irc_accept_addr,
+        })
+    }
+}
+