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 config = Arc::new(Config::default());
|
||||||
let mut server = ServerContext::new(config);
|
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_listener(Box::new(ExampleListener)); // Добавляем пример листенера
|
||||||
server.add_packet_handler(Box::new(ExamplePacketHandler)); // Добавляем пример пакет хандлера
|
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 {
|
pub trait Listener: Sync + Send {
|
||||||
generate_handlers!(status, &mut String);
|
generate_handlers!(status, &mut String);
|
||||||
generate_handlers!(plugin_message, &str, &[u8]);
|
generate_handlers!(plugin_message, &str, &[u8]);
|
||||||
|
generate_handlers!(disconnect);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait PacketHandler: Sync + Send {
|
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);
|
server.clients.remove(&client.addr);
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ use rust_mc_serv::{
|
|||||||
context::ServerContext,
|
context::ServerContext,
|
||||||
data::text_component::TextComponent,
|
data::text_component::TextComponent,
|
||||||
event::{Listener, PacketHandler},
|
event::{Listener, PacketHandler},
|
||||||
play::PlayHandler,
|
play::{PlayHandler, PlayListener},
|
||||||
player::context::ClientContext,
|
player::context::ClientContext,
|
||||||
protocol::ConnectionState,
|
protocol::ConnectionState,
|
||||||
start_server,
|
start_server,
|
||||||
@ -154,7 +154,9 @@ fn main() {
|
|||||||
// Передается во все подключения
|
// Передается во все подключения
|
||||||
let mut server = ServerContext::new(config);
|
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_listener(Box::new(ExampleListener)); // Добавляем пример листенера
|
||||||
server.add_packet_handler(Box::new(ExamplePacketHandler)); // Добавляем пример пакет хандлера
|
server.add_packet_handler(Box::new(ExamplePacketHandler)); // Добавляем пример пакет хандлера
|
||||||
|
@ -9,6 +9,7 @@ use helper::{
|
|||||||
use rust_mc_proto::{DataReader, DataWriter, Packet};
|
use rust_mc_proto::{DataReader, DataWriter, Packet};
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
|
use crate::event::Listener;
|
||||||
use crate::player::context::EntityInfo;
|
use crate::player::context::EntityInfo;
|
||||||
use crate::{
|
use crate::{
|
||||||
ServerError, data::text_component::TextComponent, event::PacketHandler,
|
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> {
|
pub fn send_login(client: Arc<ClientContext>) -> Result<(), ServerError> {
|
||||||
// Отправка пакета Login
|
// Отправка пакета Login
|
||||||
let mut packet = Packet::empty(clientbound::play::LOGIN);
|
let mut packet = Packet::empty(clientbound::play::LOGIN);
|
||||||
@ -478,3 +487,9 @@ pub fn handle_play_state(
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn handle_disconnect(
|
||||||
|
client: Arc<ClientContext>, // Контекст клиента
|
||||||
|
) -> Result<(), ServerError> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user