#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub struct PeerId(pub u64);
impl PeerId {
pub const SERVER: PeerId = PeerId(0);
}
#[derive(Clone, Debug)]
pub enum NetworkMode {
Host { port: u16 },
Client { addr: String },
}
#[derive(Clone, Debug)]
pub struct NetworkConfig {
pub mode: NetworkMode,
pub max_peers: u32,
}
impl Default for NetworkConfig {
fn default() -> Self {
Self {
mode: NetworkMode::Host { port: 7777 },
max_peers: 8,
}
}
}
impl NetworkConfig {
pub fn host(port: u16) -> Self {
Self { mode: NetworkMode::Host { port }, max_peers: 8 }
}
pub fn client(addr: impl Into<String>) -> Self {
Self { mode: NetworkMode::Client { addr: addr.into() }, max_peers: 8 }
}
}
#[derive(Clone, Debug, Default)]
pub struct NetworkEvents {
pub peers_connected: Vec<PeerId>,
pub peers_disconnected: Vec<PeerId>,
pub packets: Vec<(PeerId, Vec<u8>)>,
}