elseware/src/common/serverstate.rs

27 lines
653 B
Rust
Raw Normal View History

use libpso::PacketParseError;
use libpso::crypto::PSOCipher;
pub enum OnConnect<S: SendServerPacket> {
Packet(S),
Cipher((Box<dyn PSOCipher>, Box<dyn PSOCipher>)),
}
pub trait RecvServerPacket: Sized {
fn from_bytes(data: &Vec<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, pkt: &Self::RecvPacket) -> Box<dyn Iterator<Item = Self::SendPacket>>;
}