31 lines
933 B
Rust
Raw Normal View History

use libpso::PacketParseError;
use libpso::crypto::PSOCipher;
2019-09-14 11:43:02 -07:00
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub struct ClientId(pub usize);
pub enum OnConnect<S: SendServerPacket> {
Packet(S),
2020-01-23 18:00:34 -08:00
Cipher((Box<dyn PSOCipher + Send + Sync>, Box<dyn PSOCipher + Send + Sync>)),
}
pub trait RecvServerPacket: Sized {
2019-09-04 09:17:22 -07:00
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;
2019-09-15 13:15:19 -07:00
fn on_connect(&mut self, id: ClientId) -> Vec<OnConnect<Self::SendPacket>>;
fn handle(&mut self, id: ClientId, pkt: &Self::RecvPacket)
2020-01-23 18:00:34 -08:00
-> Result<Box<dyn Iterator<Item = (ClientId, Self::SendPacket)> + Send>, Self::PacketError>;
2020-01-08 22:02:51 -08:00
fn on_disconnect(&mut self, id: ClientId) -> Vec<(ClientId, Self::SendPacket)>;
}