add proper logging
This commit is contained in:
parent
8c4ea9b0d1
commit
6d384f77da
@ -29,4 +29,6 @@ chrono = "*"
|
|||||||
serde = "*"
|
serde = "*"
|
||||||
serde_json = "*"
|
serde_json = "*"
|
||||||
ron = "*"
|
ron = "*"
|
||||||
|
log = "*"
|
||||||
|
fern = { version = "0.5", features = ["colored"] }
|
||||||
|
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
use log::{info, trace, warn};
|
||||||
|
|
||||||
use libpso::crypto::{PSOCipher, NullCipher};
|
use libpso::crypto::{PSOCipher, NullCipher};
|
||||||
|
|
||||||
use crate::common::serverstate::{SendServerPacket, RecvServerPacket, ClientId};
|
use crate::common::serverstate::{SendServerPacket, RecvServerPacket, ClientId};
|
||||||
@ -54,7 +56,7 @@ impl<S, R> Client<S, R> where
|
|||||||
self.send_buffer.drain(..len);
|
self.send_buffer.drain(..len);
|
||||||
},
|
},
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
println!("[client] error sending data to {:?}: {:?}", self.socket, err);
|
warn!("[client] error sending data to {:?}: {:?}", self.socket, err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -95,25 +97,25 @@ impl<S, R> Client<S, R> where
|
|||||||
|
|
||||||
let pkt_data = self.incoming_data.drain(..pkt_len).collect::<Vec<_>>();
|
let pkt_data = self.incoming_data.drain(..pkt_len).collect::<Vec<_>>();
|
||||||
|
|
||||||
//println!("[recv: buf] {:?}", pkt_data);
|
trace!("[recv buf from {:?}] {:?}", self.id, pkt_data);
|
||||||
let pkt = R::from_bytes(&pkt_data[..pkt_size])
|
let pkt = R::from_bytes(&pkt_data[..pkt_size])
|
||||||
.map_err(|err| -> PacketNetworkError { err.into() })?;
|
.map_err(|err| -> PacketNetworkError { err.into() })?;
|
||||||
|
|
||||||
println!("[recv] {:?}", pkt);
|
trace!("[recv from {:?}] {:?}", self.id, pkt);
|
||||||
result.push(pkt);
|
result.push(pkt);
|
||||||
}
|
}
|
||||||
Ok(result)
|
Ok(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn send_pkt(&mut self, pkt: S) {
|
pub fn send_pkt(&mut self, pkt: S) {
|
||||||
println!("[send] {:?}", pkt);
|
trace!("[send to {:?}] {:?}", self.id, pkt);
|
||||||
let buf = pkt.as_bytes();
|
let buf = pkt.as_bytes();
|
||||||
/*if buf.len() < 1024*2 {
|
if buf.len() < 1024*2 {
|
||||||
println!("[send: buf] {:?}", buf);
|
trace!("[send: buf] {:?}", buf);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
println!("[send: buf] [...large buffer...]");
|
trace!("[send: buf] [...large buffer...]");
|
||||||
}*/
|
}
|
||||||
let mut cbuf = self.cipher_out.encrypt(&buf).unwrap();
|
let mut cbuf = self.cipher_out.encrypt(&buf).unwrap();
|
||||||
self.send_buffer.append(&mut cbuf);
|
self.send_buffer.append(&mut cbuf);
|
||||||
self.send_data();
|
self.send_data();
|
||||||
|
@ -6,6 +6,7 @@ use std::net::{SocketAddr, Ipv4Addr};
|
|||||||
use std::sync::mpsc::TryRecvError;
|
use std::sync::mpsc::TryRecvError;
|
||||||
use mio::tcp::TcpListener;
|
use mio::tcp::TcpListener;
|
||||||
use mio::{Events, Poll, Token, Ready, PollOpt};
|
use mio::{Events, Poll, Token, Ready, PollOpt};
|
||||||
|
use log::warn;
|
||||||
|
|
||||||
use crate::common::client::Client;
|
use crate::common::client::Client;
|
||||||
use crate::common::serverstate::{SendServerPacket, RecvServerPacket, ClientId};
|
use crate::common::serverstate::{SendServerPacket, RecvServerPacket, ClientId};
|
||||||
@ -163,7 +164,7 @@ impl<S, R> ClientPool<S, R> where
|
|||||||
match client_read(&self.sender, client) {
|
match client_read(&self.sender, client) {
|
||||||
Ok(()) =>{},
|
Ok(()) =>{},
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
println!("pkt err: {:?}", err);
|
warn!("pkt err: {:?}", err);
|
||||||
match err {
|
match err {
|
||||||
PacketNetworkError::ClientDisconnected => {
|
PacketNetworkError::ClientDisconnected => {
|
||||||
self.poll.deregister(&client.socket).unwrap();
|
self.poll.deregister(&client.socket).unwrap();
|
||||||
|
@ -83,9 +83,6 @@ impl CharacterLevelTable {
|
|||||||
.filter(|stat| {
|
.filter(|stat| {
|
||||||
stat.exp <= exp
|
stat.exp <= exp
|
||||||
})
|
})
|
||||||
.inspect(|k| {
|
|
||||||
println!("{:?}", k)
|
|
||||||
})
|
|
||||||
.fold((0, CharacterStats::default()), |acc, &k| {
|
.fold((0, CharacterStats::default()), |acc, &k| {
|
||||||
(acc.0 + 1, CharacterStats {
|
(acc.0 + 1, CharacterStats {
|
||||||
hp: acc.1.hp + k.hp as u16,
|
hp: acc.1.hp + k.hp as u16,
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use std::thread;
|
use std::thread;
|
||||||
|
use log::warn;
|
||||||
use mio::{Events, Poll, Token, Ready, PollOpt};
|
use mio::{Events, Poll, Token, Ready, PollOpt};
|
||||||
use mio_extras::channel::{channel, Sender, Receiver};
|
use mio_extras::channel::{channel, Sender, Receiver};
|
||||||
|
|
||||||
@ -39,7 +40,7 @@ fn recv_from_clientpool<STATE, S, R, E>(state: &mut STATE,
|
|||||||
},
|
},
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
// TODO: break?
|
// TODO: break?
|
||||||
println!("[handler error]: {:?} {:?}", client_id, err);
|
warn!("[handler error]: {:?} {:?}", client_id, err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use std::io::{Read};
|
use std::io::{Read};
|
||||||
|
use log::trace;
|
||||||
|
|
||||||
use libpso::crypto::{PSOCipher, CipherError};
|
use libpso::crypto::{PSOCipher, CipherError};
|
||||||
use libpso::PacketParseError;
|
use libpso::PacketParseError;
|
||||||
@ -61,7 +62,6 @@ pub fn recv_packet<T: Read>(socket: &mut T, cipher: &mut dyn PSOCipher) -> Resul
|
|||||||
offset += diff;
|
offset += diff;
|
||||||
}
|
}
|
||||||
|
|
||||||
//println!("[encbuf]: {:X?}", data_buf);
|
|
||||||
let mut dec_data_buf = cipher.decrypt(&data_buf.to_vec())?;
|
let mut dec_data_buf = cipher.decrypt(&data_buf.to_vec())?;
|
||||||
|
|
||||||
let mut full_buf = Vec::new();
|
let mut full_buf = Vec::new();
|
||||||
@ -69,6 +69,6 @@ pub fn recv_packet<T: Read>(socket: &mut T, cipher: &mut dyn PSOCipher) -> Resul
|
|||||||
full_buf.append(&mut dec_data_buf);
|
full_buf.append(&mut dec_data_buf);
|
||||||
full_buf = full_buf[..pkt_size].to_vec();
|
full_buf = full_buf[..pkt_size].to_vec();
|
||||||
|
|
||||||
println!("[recv: buf]: {:X?}", full_buf);
|
trace!("[recv: buf]: {:X?}", full_buf);
|
||||||
Ok(full_buf)
|
Ok(full_buf)
|
||||||
}
|
}
|
||||||
|
42
src/main.rs
42
src/main.rs
@ -11,6 +11,7 @@ mod ship;
|
|||||||
|
|
||||||
use std::thread;
|
use std::thread;
|
||||||
use std::time::SystemTime;
|
use std::time::SystemTime;
|
||||||
|
use log::{info};
|
||||||
|
|
||||||
use patch::patch::{PatchServerState, generate_patch_tree, load_config};
|
use patch::patch::{PatchServerState, generate_patch_tree, load_config};
|
||||||
use login::login::LoginServerState;
|
use login::login::LoginServerState;
|
||||||
@ -18,11 +19,44 @@ use login::character::CharacterServerState;
|
|||||||
use ship::ship::ShipServerState;
|
use ship::ship::ShipServerState;
|
||||||
use entity::account::{UserAccount, UserSettings};
|
use entity::account::{UserAccount, UserSettings};
|
||||||
use entity::gateway::{EntityGateway, InMemoryGateway};
|
use entity::gateway::{EntityGateway, InMemoryGateway};
|
||||||
|
use entity::item::ItemLocation;
|
||||||
use libpso::{utf8_to_array, utf8_to_utf16_array};
|
use libpso::{utf8_to_array, utf8_to_utf16_array};
|
||||||
//use crate::utf8_to_utf16_array;
|
//use crate::utf8_to_utf16_array;
|
||||||
|
|
||||||
|
use libpso::item::*;
|
||||||
|
|
||||||
|
fn setup_logger() {
|
||||||
|
let colors = fern::colors::ColoredLevelConfig::new()
|
||||||
|
.error(fern::colors::Color::Red)
|
||||||
|
.warn(fern::colors::Color::Yellow)
|
||||||
|
.info(fern::colors::Color::Green)
|
||||||
|
.debug(fern::colors::Color::White)
|
||||||
|
.trace(fern::colors::Color::BrightBlack);
|
||||||
|
let stdio = fern::Dispatch::new()
|
||||||
|
.level(log::LevelFilter::Debug)
|
||||||
|
.format(move |out, message, record| {
|
||||||
|
out.finish(format_args!(
|
||||||
|
"\x1B[{}m[{}][{}][{}] {}\x1B[0m",
|
||||||
|
colors.get_color(&record.level()).to_fg_str(),
|
||||||
|
chrono::Local::now().format("%Y-%m-%d %H:%M:%S"),
|
||||||
|
record.target(),
|
||||||
|
record.level(),
|
||||||
|
message,
|
||||||
|
))
|
||||||
|
})
|
||||||
|
.chain(std::io::stdout());
|
||||||
|
let fileout = fern::Dispatch::new()
|
||||||
|
.level(log::LevelFilter::Trace)
|
||||||
|
.chain(fern::log_file(format!("elseware-{}.log", chrono::Local::now().format("%Y-%m-%d %H:%M:%S"))).unwrap());
|
||||||
|
fern::Dispatch::new()
|
||||||
|
.chain(stdio)
|
||||||
|
.chain(fileout)
|
||||||
|
.apply().unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
setup_logger();
|
||||||
let mut entity_gateway = InMemoryGateway::new();
|
let mut entity_gateway = InMemoryGateway::new();
|
||||||
|
|
||||||
let fake_user = UserAccount {
|
let fake_user = UserAccount {
|
||||||
@ -47,7 +81,7 @@ fn main() {
|
|||||||
entity_gateway.set_character(&character);
|
entity_gateway.set_character(&character);
|
||||||
|
|
||||||
let patch_thread = thread::spawn(|| {
|
let patch_thread = thread::spawn(|| {
|
||||||
println!("[patch] starting server");
|
info!("[patch] starting server");
|
||||||
let patch_config = load_config();
|
let patch_config = load_config();
|
||||||
let (patch_file_tree, patch_file_lookup) = generate_patch_tree(patch_config.path.as_str());
|
let (patch_file_tree, patch_file_lookup) = generate_patch_tree(patch_config.path.as_str());
|
||||||
let patch_state = PatchServerState::new(patch_file_tree, patch_file_lookup);
|
let patch_state = PatchServerState::new(patch_file_tree, patch_file_lookup);
|
||||||
@ -55,19 +89,19 @@ fn main() {
|
|||||||
});
|
});
|
||||||
let thread_entity_gateway = entity_gateway.clone();
|
let thread_entity_gateway = entity_gateway.clone();
|
||||||
let auth_thread = thread::spawn(|| {
|
let auth_thread = thread::spawn(|| {
|
||||||
println!("[auth] starting server");
|
info!("[auth] starting server");
|
||||||
let auth_state = LoginServerState::new(thread_entity_gateway);
|
let auth_state = LoginServerState::new(thread_entity_gateway);
|
||||||
common::mainloop::mainloop(auth_state, login::login::LOGIN_PORT);
|
common::mainloop::mainloop(auth_state, login::login::LOGIN_PORT);
|
||||||
});
|
});
|
||||||
let thread_entity_gateway = entity_gateway.clone();
|
let thread_entity_gateway = entity_gateway.clone();
|
||||||
let char_thread = thread::spawn(|| {
|
let char_thread = thread::spawn(|| {
|
||||||
println!("[character] starting server");
|
info!("[character] starting server");
|
||||||
let char_state = CharacterServerState::new(thread_entity_gateway);
|
let char_state = CharacterServerState::new(thread_entity_gateway);
|
||||||
common::mainloop::mainloop(char_state, login::character::CHARACTER_PORT);
|
common::mainloop::mainloop(char_state, login::character::CHARACTER_PORT);
|
||||||
});
|
});
|
||||||
let thread_entity_gateway = entity_gateway.clone();
|
let thread_entity_gateway = entity_gateway.clone();
|
||||||
let ship_thread = thread::spawn(|| {
|
let ship_thread = thread::spawn(|| {
|
||||||
println!("[ship] starting server");
|
info!("[ship] starting server");
|
||||||
let ship_state = ShipServerState::new(thread_entity_gateway);
|
let ship_state = ShipServerState::new(thread_entity_gateway);
|
||||||
common::mainloop::mainloop(ship_state, ship::ship::SHIP_PORT);
|
common::mainloop::mainloop(ship_state, ship::ship::SHIP_PORT);
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user