42 lines
1.1 KiB
Rust
42 lines
1.1 KiB
Rust
|
|
|
|
use crate::protocol::{
|
|
client::status::{CPingResponse, CStatusResponse},
|
|
server::{
|
|
handshake::SHandShake,
|
|
status::{SPingRequest, SStatusRequest},
|
|
},
|
|
};
|
|
|
|
use super::Client;
|
|
|
|
pub trait ClientPacketProcessor {
|
|
// Handshake
|
|
fn handle_handshake(&mut self, handshake: SHandShake);
|
|
// Status
|
|
fn handle_status_request(&mut self, status_request: SStatusRequest);
|
|
fn handle_ping_request(&mut self, ping_request: SPingRequest);
|
|
}
|
|
|
|
impl ClientPacketProcessor for Client {
|
|
fn handle_handshake(&mut self, handshake: SHandShake) {
|
|
// TODO set protocol version and check protocol version
|
|
self.connection_state = handshake.next_state;
|
|
dbg!("handshake");
|
|
}
|
|
|
|
fn handle_status_request(&mut self, _status_request: SStatusRequest) {
|
|
dbg!("sending status");
|
|
|
|
self.send_packet(CStatusResponse::new(
|
|
serde_json::to_string(&self.server.status_response).unwrap(),
|
|
))
|
|
}
|
|
|
|
fn handle_ping_request(&mut self, ping_request: SPingRequest) {
|
|
dbg!("ping");
|
|
self.send_packet(CPingResponse::new(ping_request.payload));
|
|
self.close();
|
|
}
|
|
}
|