syndicate-rs/src/main.rs

54 lines
1.3 KiB
Rust
Raw Normal View History

#![recursion_limit="512"]
2018-12-09 13:28:01 +00:00
mod bag;
2019-10-20 15:01:27 +00:00
mod dataspace;
2019-10-16 15:47:56 +00:00
mod packets;
2019-10-16 15:54:58 +00:00
mod peer;
2019-10-20 15:01:27 +00:00
mod skeleton;
mod spaces;
2018-12-09 13:28:01 +00:00
2019-10-20 15:01:27 +00:00
use preserves::value;
2019-10-16 15:54:58 +00:00
use std::sync::{Mutex, Arc};
use tokio::net::TcpListener;
2018-12-09 13:28:01 +00:00
2019-10-22 21:37:37 +00:00
use std::sync::atomic::{AtomicUsize, Ordering};
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum Syndicate {
Placeholder(usize),
}
impl value::Domain for Syndicate {}
static NEXT_PLACEHOLDER: AtomicUsize = AtomicUsize::new(0);
impl Syndicate {
pub fn new_placeholder() -> Self {
Self::Placeholder(NEXT_PLACEHOLDER.fetch_add(1, Ordering::SeqCst))
}
}
2019-10-16 15:54:58 +00:00
pub type ConnId = u64;
2019-10-22 21:37:37 +00:00
pub type V = value::ArcValue<Syndicate>;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
2019-10-20 15:01:27 +00:00
let spaces = Arc::new(Mutex::new(spaces::Spaces::new()));
let mut id = 0;
let port = 8001;
let mut listener = TcpListener::bind(format!("0.0.0.0:{}", port)).await?;
println!("Listening on port {}", port);
loop {
let (stream, addr) = listener.accept().await?;
let connid = id;
2019-10-16 13:16:50 +00:00
let spaces = Arc::clone(&spaces);
2019-10-20 13:02:51 +00:00
id += 1;
tokio::spawn(async move {
2019-10-16 15:54:58 +00:00
match peer::Peer::new(connid, stream).await.run(spaces).await {
Ok(_) => (),
Err(e) => println!("Connection {:?} died with {:?}", addr, e),
}
});
}
2018-12-09 13:28:01 +00:00
}