2019-08-23 23:01:36 -07:00
|
|
|
#![feature(const_generics)]
|
|
|
|
|
2019-08-20 17:59:00 -07:00
|
|
|
mod login;
|
|
|
|
mod character;
|
2019-08-23 23:01:36 -07:00
|
|
|
mod dataaccess;
|
2019-08-20 17:59:00 -07:00
|
|
|
mod models;
|
|
|
|
|
|
|
|
use std::net::{SocketAddr, Ipv4Addr};
|
2019-08-23 23:01:36 -07:00
|
|
|
//use std::net;
|
2019-07-14 00:54:29 -07:00
|
|
|
use std::thread;
|
2019-08-20 17:59:00 -07:00
|
|
|
use std::env;
|
2019-07-14 00:54:29 -07:00
|
|
|
|
2019-08-20 17:59:00 -07:00
|
|
|
use mio::tcp::TcpListener;
|
2019-07-14 00:54:29 -07:00
|
|
|
use mio::{Events, Poll, Token, Ready, PollOpt};
|
2019-08-20 17:59:00 -07:00
|
|
|
use dotenv::dotenv;
|
2019-07-14 00:54:29 -07:00
|
|
|
|
2019-08-20 17:59:00 -07:00
|
|
|
use diesel::r2d2;
|
2019-08-23 23:01:36 -07:00
|
|
|
//use diesel::prelude::*;
|
2019-08-20 17:59:00 -07:00
|
|
|
use diesel::pg::PgConnection;
|
2019-07-14 00:54:29 -07:00
|
|
|
|
2019-08-23 23:01:36 -07:00
|
|
|
//use models::{NewUser, UserAccount, UserSettings, NewUserSettings};
|
|
|
|
use dataaccess::DBAccess;
|
2019-07-14 00:54:29 -07:00
|
|
|
|
2019-08-20 17:59:00 -07:00
|
|
|
fn main() {
|
|
|
|
dotenv().ok();
|
2019-08-23 23:01:36 -07:00
|
|
|
let database_url = env::var("DATABASE_URL").unwrap();
|
2019-07-14 00:54:29 -07:00
|
|
|
|
2019-08-23 23:01:36 -07:00
|
|
|
/*if let Some(arg) = env::args().nth(1) {
|
|
|
|
if arg == "dbstuff" {
|
|
|
|
let conn = PgConnection::establish(&database_url).unwrap();
|
|
|
|
|
|
|
|
use elseware::schema::user_accounts::dsl::*;
|
|
|
|
use elseware::schema::user_settings::dsl::*;
|
|
|
|
|
|
|
|
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());
|
|
|
|
let user: UserAccount = diesel::insert_into(user_accounts).values(&u).get_result(&conn).unwrap();
|
2019-07-14 00:54:29 -07:00
|
|
|
|
2019-08-23 23:01:36 -07:00
|
|
|
let mut s = models::EUserSettings(libpso::character::settings::UserSettings::default());
|
|
|
|
s.0.blocked_users[5] = 99;
|
|
|
|
s.0.blocked_users[6] = 123;
|
2019-07-14 00:54:29 -07:00
|
|
|
|
2019-08-23 23:01:36 -07:00
|
|
|
diesel::insert_into(user_settings).values(& NewUserSettings {
|
|
|
|
user_id: user.id,
|
|
|
|
settings: s,
|
|
|
|
}).execute(&conn).unwrap();
|
|
|
|
|
|
|
|
let us = user_settings.load::<UserSettings>(&conn).unwrap();
|
|
|
|
for u in us {
|
|
|
|
println!("{:?}", u.settings.0.blocked_users[4]);
|
|
|
|
println!("{:?}", u.settings.0.blocked_users[5]);
|
|
|
|
println!("{:?}", u.settings.0.blocked_users[6]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}*/
|
|
|
|
|
|
|
|
//let database_url = env::var("DATABASE_URL").unwrap();
|
2019-07-14 00:54:29 -07:00
|
|
|
|
2019-08-20 17:59:00 -07:00
|
|
|
println!("[login+character] starting server");
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
2019-08-23 23:01:36 -07:00
|
|
|
let login_shared_state = login::SharedLoginState::new(DBAccess::new(connection_pool));
|
2019-07-14 00:54:29 -07:00
|
|
|
|
2019-08-20 17:59:00 -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-08-20 17:59:00 -07:00
|
|
|
|
2019-07-14 00:54:29 -07:00
|
|
|
loop {
|
|
|
|
poll.poll(&mut events, None).unwrap();
|
|
|
|
|
2019-08-20 17:59:00 -07:00
|
|
|
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
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|