98 lines
3.2 KiB
Rust
98 lines
3.2 KiB
Rust
use std::net;
|
|
use mio::net::TcpListener;
|
|
|
|
use crate::common::misc::path_exists::path_exists;
|
|
use crate::common::misc::gen_tls_server_config::gen_tls_server_config;
|
|
use crate::common::misc::return_flags::ReturnFlags;
|
|
|
|
use crate::server::network::tls_server::TlsServer;
|
|
|
|
#[cfg(not(debug_assertions))]
|
|
use crate::common::misc::gen_log::gen_log;
|
|
|
|
/// Initializes global logger.
|
|
///
|
|
/// Private function used by libtrader_init() to initialize the logger. Log destinations are
|
|
/// platfrom dependent.
|
|
/// On unix systems: /var/log/papertrader/
|
|
/// On windows/unkown systems: $(pwd)/log/
|
|
///
|
|
/// Returns: nothing on success, on error contains the reason of failure.
|
|
///
|
|
/// Example:
|
|
/// ```rust
|
|
/// match libtrader_init_log() {
|
|
/// Ok(()) => {},
|
|
/// Err(err) => panic!("failed initializing log, reason: {}", err)
|
|
/// };
|
|
/// ```
|
|
///
|
|
fn libtrader_init_log() -> Result<(), ReturnFlags> {
|
|
info!("Started Logger.");
|
|
#[cfg(not(debug_assertions))]
|
|
gen_log();
|
|
|
|
#[cfg(debug_assertions)] {
|
|
use simplelog::*;
|
|
use std::fs::File;
|
|
|
|
if !path_exists("log") {
|
|
match std::fs::create_dir("log") {
|
|
Ok(()) => {},
|
|
Err(_err) => return Err(ReturnFlags::COMMON_GEN_LOG_DIR_CREATION_FAILED)
|
|
};
|
|
}
|
|
CombinedLogger::init(vec![
|
|
#[cfg(debug_assertions)]
|
|
TermLogger::new(LevelFilter::Warn, Config::default(), TerminalMode::Mixed),
|
|
#[cfg(not(debug_assertions))]
|
|
TermLogger::new(LevelFilter::Warn, Config::default(), TerminalMode::Mixed),
|
|
WriteLogger::new(LevelFilter::Info, Config::default(),
|
|
File::create(format!("log/log-{}.txt",
|
|
chrono::Utc::now().to_rfc2822())).unwrap())
|
|
]).unwrap();
|
|
};
|
|
|
|
Ok(())
|
|
}
|
|
|
|
/// Server Initialization of the library.
|
|
///
|
|
/// Public function that initializes the library, and starts the libtrader server.
|
|
/// This function should not return.
|
|
///
|
|
/// Example:
|
|
/// ```rust
|
|
/// libtrader_init_server()?;
|
|
/// ```
|
|
pub fn libtrader_init_server() -> Result<(), ReturnFlags> {
|
|
// Initialize log.
|
|
#[cfg(not(test))]
|
|
match libtrader_init_log() {
|
|
Ok(()) => {},
|
|
Err(err) => return Err(ReturnFlags::LIBTRADER_INIT_LOG_FAILED | err),
|
|
};
|
|
let addr: net::SocketAddr = "0.0.0.0:4000".parse().unwrap();
|
|
let config = gen_tls_server_config("certs/test_tls.crt", "certs/test_tls.key", None);
|
|
|
|
let mut listener = TcpListener::bind(addr).expect("LIBTRADER_INIT_SERVER_FAILED");
|
|
let mut poll = mio::Poll::new().unwrap();
|
|
|
|
poll.registry().register(&mut listener, mio::Token(0), mio::Interest::READABLE).unwrap();
|
|
|
|
let mut tls_server = TlsServer::new(listener, config);
|
|
let mut events = mio::Events::with_capacity(256);
|
|
loop {
|
|
poll.poll(&mut events, None).unwrap();
|
|
|
|
for event in &events {
|
|
match event.token() {
|
|
mio::Token(0) => {
|
|
tls_server.accept(poll.registry()).expect("error accepting socket");
|
|
},
|
|
_ => tls_server.conn_event(poll.registry(), &event)
|
|
}
|
|
}
|
|
}
|
|
}
|