28 lines
717 B
Rust
28 lines
717 B
Rust
use libpso::PacketParseError;
|
|
use libpso::crypto::PSOCipher;
|
|
|
|
pub type ClientId = usize;
|
|
|
|
pub enum OnConnect<S: SendServerPacket> {
|
|
Packet(S),
|
|
Cipher((Box<dyn PSOCipher + Send>, Box<dyn PSOCipher + Send>)),
|
|
}
|
|
|
|
pub trait RecvServerPacket: Sized {
|
|
fn from_bytes(data: &[u8]) -> Result<Self, PacketParseError>;
|
|
}
|
|
|
|
pub trait SendServerPacket: Sized {
|
|
fn as_bytes(&self) -> Vec<u8>;
|
|
}
|
|
|
|
pub trait ServerState {
|
|
type SendPacket: SendServerPacket;
|
|
type RecvPacket: RecvServerPacket;
|
|
type PacketError;
|
|
|
|
fn on_connect(&mut self) -> Vec<OnConnect<Self::SendPacket>>;
|
|
fn handle(&mut self, id: ClientId, pkt: &Self::RecvPacket) -> Box<dyn Iterator<Item = (ClientId, Self::SendPacket)>>;
|
|
}
|
|
|