elseware/src/login/main.rs

80 lines
2.8 KiB
Rust
Raw Normal View History

mod login;
mod character;
mod models;
use std::net::{SocketAddr, Ipv4Addr};
2019-07-14 00:54:29 -07:00
use std::net;
use std::thread;
use std::env;
2019-07-14 00:54:29 -07:00
use mio::tcp::TcpListener;
2019-07-14 00:54:29 -07:00
use mio::{Events, Poll, Token, Ready, PollOpt};
use dotenv::dotenv;
2019-07-14 00:54:29 -07:00
use diesel::r2d2;
use diesel::prelude::*;
use diesel::pg::PgConnection;
2019-07-14 00:54:29 -07:00
use models::{NewUser, UserAccount};
2019-07-14 00:54:29 -07:00
fn main() {
dotenv().ok();
2019-07-14 00:54:29 -07:00
//let database_url = env::var("DATABASE_URL").unwrap();
//let conn = PgConnection::establish(&database_url).unwrap();
2019-07-14 00:54:29 -07:00
//use elseware::schema::user_accounts::dsl::*;
//use elseware::schema::user_accounts::table;
2019-07-14 00:54:29 -07:00
/*let u = NewUser::new("hi".to_string(), "qwer".to_string());
diesel::insert_into(user_accounts).values(&u).execute(&conn).unwrap();
let u = NewUser::new("hi2".to_string(), "qwer".to_string());
diesel::insert_into(user_accounts).values(&u).execute(&conn).unwrap();*/
2019-07-14 00:54:29 -07:00
println!("[login+character] starting server");
let database_url = env::var("DATABASE_URL").unwrap();
let connection_manager = r2d2::ConnectionManager::<PgConnection>::new(database_url);
let connection_pool = r2d2::Pool::builder()
.build(connection_manager).unwrap();
let login_listener = TcpListener::bind(&SocketAddr::from((Ipv4Addr::new(0,0,0,0), login::LOGIN_PORT))).unwrap();
let character_listener = TcpListener::bind(&SocketAddr::from((Ipv4Addr::new(0,0,0,0), character::CHARACTER_PORT))).unwrap();
let login_shared_state = login::SharedLoginState::new(connection_pool);
2019-07-14 00:54:29 -07:00
let poll = Poll::new().unwrap();
poll.register(&login_listener, Token(0), Ready::readable(), PollOpt::edge()).unwrap();
poll.register(&character_listener, Token(1), Ready::readable(), PollOpt::edge()).unwrap();
2019-07-14 00:54:29 -07:00
let mut events = Events::with_capacity(1024);
2019-07-14 00:54:29 -07:00
loop {
poll.poll(&mut events, None).unwrap();
for event in &events {
match event.token() {
Token(0) => {
login_listener.accept().map(|(socket, addr)| {
let shared_state_clone = login_shared_state.clone();
thread::spawn(move || {
println!("[login] accepted connection: {}", addr);
login::new_client(socket, shared_state_clone);
});
});
},
Token(1) => {
character_listener.accept().map(|(socket, addr)| {
let shared_state_clone = login_shared_state.clone();
thread::spawn(move || {
println!("[character] accepted connection: {}", addr);
character::new_client(socket, shared_state_clone);
});
});
},
_ => {}
2019-07-14 00:54:29 -07:00
}
}
}
}