mirror of
https://github.com/GIKExe/rust_mc_serv.git
synced 2025-06-24 10:22:57 +03:00
on_disconnect
This commit is contained in:
parent
9d6c0cd04d
commit
03a23eb267
@ -46,7 +46,9 @@ rust_mc_serv = { git = "https://github.com/GIKExe/rust_mc_serv.git" }
|
||||
let config = Arc::new(Config::default());
|
||||
let mut server = ServerContext::new(config);
|
||||
|
||||
server.add_packet_handler(Box::new(PlayHandler)); // Добавляем дефолтную обработку режима Play
|
||||
// Добавляем дефолтную обработку режима Play
|
||||
server.add_packet_handler(Box::new(PlayHandler));
|
||||
server.add_packet_handler(Box::new(PlayListener));
|
||||
|
||||
server.add_listener(Box::new(ExampleListener)); // Добавляем пример листенера
|
||||
server.add_packet_handler(Box::new(ExamplePacketHandler)); // Добавляем пример пакет хандлера
|
||||
|
@ -37,9 +37,27 @@ macro_rules! trigger_event {
|
||||
}};
|
||||
}
|
||||
|
||||
/// Игнорирует результат листенеров
|
||||
#[macro_export]
|
||||
macro_rules! trigger_event_ignore {
|
||||
($client:ident, $event:ident $(, $arg_ty:expr)* $(,)?) => {{
|
||||
paste::paste! {
|
||||
for handler in $client.server.listeners(
|
||||
|o| o.[<on_ $event _priority>]()
|
||||
).iter() {
|
||||
let _ = handler.[<on_ $event>](
|
||||
$client.clone()
|
||||
$(, $arg_ty)*
|
||||
);
|
||||
}
|
||||
}
|
||||
}};
|
||||
}
|
||||
|
||||
pub trait Listener: Sync + Send {
|
||||
generate_handlers!(status, &mut String);
|
||||
generate_handlers!(plugin_message, &str, &[u8]);
|
||||
generate_handlers!(disconnect);
|
||||
}
|
||||
|
||||
pub trait PacketHandler: Sync + Send {
|
||||
|
@ -98,6 +98,8 @@ pub fn start_server(server: Arc<ServerContext>) {
|
||||
}
|
||||
};
|
||||
|
||||
trigger_event_ignore!(client, disconnect);
|
||||
|
||||
// Удаляем клиента из списка клиентов
|
||||
server.clients.remove(&client.addr);
|
||||
|
||||
|
@ -8,7 +8,7 @@ use rust_mc_serv::{
|
||||
context::ServerContext,
|
||||
data::text_component::TextComponent,
|
||||
event::{Listener, PacketHandler},
|
||||
play::PlayHandler,
|
||||
play::{PlayHandler, PlayListener},
|
||||
player::context::ClientContext,
|
||||
protocol::ConnectionState,
|
||||
start_server,
|
||||
@ -154,7 +154,9 @@ fn main() {
|
||||
// Передается во все подключения
|
||||
let mut server = ServerContext::new(config);
|
||||
|
||||
server.add_packet_handler(Box::new(PlayHandler)); // Добавляем дефолтную обработку режима Play
|
||||
// Добавляем дефолтную обработку режима Play
|
||||
server.add_packet_handler(Box::new(PlayHandler));
|
||||
server.add_packet_handler(Box::new(PlayListener));
|
||||
|
||||
server.add_listener(Box::new(ExampleListener)); // Добавляем пример листенера
|
||||
server.add_packet_handler(Box::new(ExamplePacketHandler)); // Добавляем пример пакет хандлера
|
||||
|
@ -9,6 +9,7 @@ use helper::{
|
||||
use rust_mc_proto::{DataReader, DataWriter, Packet};
|
||||
use uuid::Uuid;
|
||||
|
||||
use crate::event::Listener;
|
||||
use crate::player::context::EntityInfo;
|
||||
use crate::{
|
||||
ServerError, data::text_component::TextComponent, event::PacketHandler,
|
||||
@ -56,6 +57,14 @@ impl PacketHandler for PlayHandler {
|
||||
}
|
||||
}
|
||||
|
||||
pub struct PlayListener;
|
||||
|
||||
impl Listener for PlayListener {
|
||||
fn on_disconnect(&self, client: Arc<ClientContext>) -> Result<(), ServerError> {
|
||||
handle_disconnect(client)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn send_login(client: Arc<ClientContext>) -> Result<(), ServerError> {
|
||||
// Отправка пакета Login
|
||||
let mut packet = Packet::empty(clientbound::play::LOGIN);
|
||||
@ -478,3 +487,9 @@ pub fn handle_play_state(
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn handle_disconnect(
|
||||
client: Arc<ClientContext>, // Контекст клиента
|
||||
) -> Result<(), ServerError> {
|
||||
Ok(())
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user