- add: mouse cmd packet handling
- add: change map handler - update: logout handler to send the reply packet - update: character id list change from u8 to u32
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
use crate::auth_client::AuthClient;
|
||||
use crate::bufferpool::BufferPool;
|
||||
use crate::character_client::CharacterClient;
|
||||
use crate::connection_service::ConnectionService;
|
||||
use crate::handlers::*;
|
||||
use crate::metrics::{ACTIVE_CONNECTIONS, PACKETS_RECEIVED};
|
||||
use crate::packet::Packet;
|
||||
use crate::packet_type::PacketType;
|
||||
use std::error::Error;
|
||||
@@ -8,10 +12,6 @@ use tokio::io::AsyncReadExt;
|
||||
use tokio::net::TcpStream;
|
||||
use tokio::sync::Mutex;
|
||||
use tracing::{debug, warn};
|
||||
use crate::bufferpool::BufferPool;
|
||||
use crate::character_client::CharacterClient;
|
||||
use crate::connection_service::ConnectionService;
|
||||
use crate::metrics::{ACTIVE_CONNECTIONS, PACKETS_RECEIVED};
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct PacketRouter {
|
||||
@@ -32,7 +32,7 @@ impl PacketRouter {
|
||||
}
|
||||
let packet_size = u16::from_le_bytes(buffer[0..2].try_into()?) as usize;
|
||||
if packet_size > 6 {
|
||||
let mut body_handle = stream.take((packet_size-6) as u64);
|
||||
let mut body_handle = stream.take((packet_size - 6) as u64);
|
||||
let n = body_handle.read(&mut buffer[6..]).await?;
|
||||
if n == 0 {
|
||||
break; // Connection closed
|
||||
@@ -66,7 +66,7 @@ impl PacketRouter {
|
||||
ACTIVE_CONNECTIONS.dec();
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
pub async fn route_packet(&self, stream: &mut TcpStream, packet: Packet, connection_id: String) -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
debug!("Routing packet: {:?}", packet);
|
||||
match packet.packet_type {
|
||||
@@ -86,12 +86,16 @@ impl PacketRouter {
|
||||
PacketType::PakcsDeleteCharReq => character::handle_delete_char_req(stream, packet, self.character_client.clone(), self.connection_service.clone(), connection_id).await,
|
||||
PacketType::PakcsSelectCharReq => character::handle_select_char_req(stream, packet, self.character_client.clone(), self.connection_service.clone(), connection_id).await,
|
||||
|
||||
// World Packets
|
||||
PacketType::PakcsChangeMapReq => world::handle_change_map_req(stream, packet, self.character_client.clone(), self.connection_service.clone(), connection_id).await,
|
||||
PacketType::PakcsMouseCmd => world::handle_mouse_cmd_req(stream, packet, self.connection_service.clone(), connection_id).await,
|
||||
|
||||
// 1 => chat::handle_chat(packet).await?,
|
||||
// 2 => movement::handle_movement(packet).await?,
|
||||
_ => {
|
||||
warn!("Unhandled packet type: {:?}", packet.packet_type);
|
||||
Ok(())
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user