#[cfg(not(target_os="emscripten"))] mod recv_system;
#[cfg(not(target_os="emscripten"))] mod send_system;
#[cfg(not(target_os="emscripten"))] mod new_peer_system;
#[cfg(not(target_os="emscripten"))] mod server;
#[cfg(not(target_os="emscripten"))] mod server_resource;
#[cfg(not(target_os="emscripten"))] mod udp;
#[cfg(not(target_os="emscripten"))] mod tcp;
#[cfg(test)]
mod tests;
use std::fmt::Debug;
use std::net::SocketAddr;
use std::collections::vec_deque::VecDeque;
use std::collections::HashMap;
use std::ops::Range;
use serde::Serialize;
use serde::de::DeserializeOwned;
use futures;
use specs;
use ::AutoResource;
#[cfg(not(target_os="emscripten"))] pub use self::recv_system::RecvSystem;
#[cfg(not(target_os="emscripten"))] pub use self::send_system::SendSystem;
#[cfg(not(target_os="emscripten"))] pub use self::new_peer_system::NewPeerSystem;
#[cfg(not(target_os="emscripten"))] pub use self::server::Server;
#[cfg(not(target_os="emscripten"))] pub use self::server_resource::ServerResource;
pub trait GameMessage : 'static + Serialize + DeserializeOwned + Debug + Eq + PartialEq + Send + Sync + Clone {}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
pub enum WireMessage<G> {
Hello,
Goodbye,
Game(G),
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
pub struct RecvWireMessage<G> {
src: SocketAddr,
message: Result<WireMessage<G>, ()>,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
pub struct SendWireMessage<G> {
dest: SocketAddr,
message: WireMessage<G>,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
pub struct RecvMessage<G> {
pub source: PeerId,
pub game_message: G,
}
#[derive(Debug, Clone, Copy)]
pub enum Transport {
UDP,
TCP,
}
#[derive(Debug)]
pub struct SendMessage<G> {
pub destination: Destination,
pub game_message: G,
pub transport: Transport,
}
#[derive(Debug)]
pub enum Destination {
One(PeerId),
EveryoneElse,
EveryoneElseExcept(PeerId),
Master,
}
pub struct RecvMessageQueue<G> {
pub queue: VecDeque<RecvMessage<G>>,
}
impl<G: GameMessage> AutoResource for RecvMessageQueue<G> {
fn new(_world: &mut specs::World) -> RecvMessageQueue<G> {
RecvMessageQueue {
queue: VecDeque::<RecvMessage<G>>::new(),
}
}
}
pub struct SendMessageQueue<G> {
pub queue: VecDeque<SendMessage<G>>,
}
impl<G: GameMessage> AutoResource for SendMessageQueue<G> {
fn new(_world: &mut specs::World) -> SendMessageQueue<G> {
SendMessageQueue {
queue: VecDeque::<SendMessage<G>>::new(),
}
}
}
#[derive(Clone, Copy, Serialize, Deserialize, Debug, Eq, PartialEq)]
pub struct PeerId(pub u16);
pub struct NewPeer<G> {
pub tcp_sender: futures::sync::mpsc::Sender<WireMessage<G>>,
pub socket_addr: SocketAddr,
pub ready_to_receive_tx: futures::sync::oneshot::Sender<()>,
}
pub struct NetworkPeer<G> {
pub id: PeerId,
pub tcp_sender: futures::sync::mpsc::Sender<WireMessage<G>>,
pub socket_addr: SocketAddr,
}
pub struct NetworkPeers<G> {
pub peers: Vec<NetworkPeer<G>>,
pub new_peers: VecDeque<PeerId>,
}
impl<G: GameMessage> AutoResource for NetworkPeers<G> {
fn new(_world: &mut specs::World) -> NetworkPeers<G> {
NetworkPeers {
peers: Vec::<NetworkPeer<G>>::new(),
new_peers: VecDeque::<PeerId>::new(),
}
}
}
pub struct EntityIds {
pub range: Range<u64>,
pub mapping: HashMap<u64, specs::Entity>,
}
impl AutoResource for EntityIds {
fn new(_world: &mut specs::World) -> EntityIds {
EntityIds {
range: 0..100,
mapping: HashMap::new(),
}
}
}
pub struct NetMarker {
pub id: u64,
}
impl specs::Component for NetMarker {
type Storage = specs::DenseVecStorage<Self>;
}
pub struct NodeResource {
pub is_master: bool,
}
impl AutoResource for NodeResource {
fn new(_world: &mut specs::World) -> NodeResource {
NodeResource {
is_master: false,
}
}
}