PaperTrader/src/libtrader/client/initializer.rs

120 lines
3.7 KiB
Rust
Raw Normal View History

2020-08-11 11:49:29 +00:00
use mio::net::TcpStream;
use crate::common::misc::path_exists::path_exists;
use crate::common::misc::gen_tls_client_config::gen_tls_client_config;
use crate::common::misc::lookup_ipv4::lookup_ipv4;
use crate::client::network::tls_client::TlsClient;
2020-07-23 15:04:14 +00:00
/// 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<(), String> {
2020-07-28 19:43:00 +00:00
info!("Started Logger.");
2020-07-31 08:16:18 +00:00
#[cfg(not(debug_assertions))]
2020-07-31 07:40:34 +00:00
gen_log();
2020-07-31 08:16:18 +00:00
2020-08-10 10:33:17 +00:00
#[cfg(debug_assertions)] {
2020-07-31 08:16:18 +00:00
use simplelog::*;
use std::fs::File;
if !path_exists("log") {
match std::fs::create_dir("log") {
Ok(()) => {},
Err(err) => panic!("GEN_LOG_FAILED_DIR_CREATION: {}", err)
};
}
CombinedLogger::init(vec![
#[cfg(debug_assertions)]
2020-08-10 14:01:21 +00:00
TermLogger::new(LevelFilter::Warn, Config::default(), TerminalMode::Mixed),
2020-07-31 08:16:18 +00:00
#[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();
};
2020-07-28 19:43:00 +00:00
Ok(())
}
2020-08-11 11:49:29 +00:00
/// Client Initialization of the library.
///
2020-08-11 11:49:29 +00:00
/// Public function that initializes the library, and connects to a libtrader server
/// This funciton should not return.
///
/// Example:
/// ```rust
2020-08-11 11:49:29 +00:00
/// libtrader_init_client()?;
/// ```
2020-08-11 11:49:29 +00:00
pub fn libtrader_init_client() -> Result<(), String> {
2020-07-31 11:41:15 +00:00
#[cfg(not(test))]
2020-07-28 19:43:00 +00:00
match libtrader_init_log() {
Ok(()) => {},
Err(err) => panic!("This should not happen!\n{}", err),
};
2020-08-10 14:21:49 +00:00
let addr = lookup_ipv4("0.0.0.0", 4000);
let config = gen_tls_client_config();
let sock = match TcpStream::connect(addr) {
Ok(socket) => socket,
Err(err) => {
error!("LIBTRADER_INIT_CLIENT_CONNECT_FAILED: {}", err);
2020-08-10 14:27:26 +00:00
return Err("could not connect to server!".to_string());
2020-08-10 14:21:49 +00:00
}
};
2020-08-10 14:27:26 +00:00
let dns_name = webpki::DNSNameRef::try_from_ascii_str("localhost").unwrap();
2020-08-10 14:21:49 +00:00
let mut tls_client = TlsClient::new(sock, dns_name, config);
let mut poll = mio::Poll::new().unwrap();
let mut events = mio::Events::with_capacity(32);
tls_client.register(poll.registry());
loop {
poll.poll(&mut events, None).unwrap();
for ev in &events {
tls_client.ready(&ev);
tls_client.reregister(poll.registry());
2020-08-12 03:41:02 +00:00
use crate::client::account::creation::acc_create;
match acc_create(&mut tls_client, &mut poll, "test", "email", "password") {
Ok(_) => println!("we did it"),
Err(err) => panic!("panik!"),
}
2020-08-10 14:21:49 +00:00
}
}
}
2020-07-31 11:27:27 +00:00
#[cfg(test)]
mod test {
2020-07-31 11:41:15 +00:00
use crate::db::config::{DB_USER, DB_PASS};
use crate::db::initializer::{db_connect};
use crate::ds::generic::company::Company;
use super::*;
2020-07-31 11:27:27 +00:00
#[test]
2020-07-31 11:41:15 +00:00
fn test_libtrader_init_log() {
2020-07-31 11:27:27 +00:00
match libtrader_init_log() {
Ok(()) => {},
Err(err) => panic!("TEST_INIT_LOG_FAILED: {}", err)
2020-07-31 11:41:15 +00:00
};
}
2020-07-31 11:27:27 +00:00
}