First stab at a dataspace index
This commit is contained in:
parent
9f5e9ede5f
commit
176a01b496
25
src/main.rs
25
src/main.rs
|
@ -11,6 +11,7 @@ use tokio::sync::mpsc::{unbounded_channel, UnboundedSender, UnboundedReceiver};
|
||||||
use tokio::codec::{Framed, Encoder, Decoder};
|
use tokio::codec::{Framed, Encoder, Decoder};
|
||||||
use futures::select;
|
use futures::select;
|
||||||
use std::io;
|
use std::io;
|
||||||
|
use std::sync::{Mutex, RwLock, Arc};
|
||||||
|
|
||||||
// use self::skeleton::Index;
|
// use self::skeleton::Index;
|
||||||
|
|
||||||
|
@ -165,7 +166,7 @@ impl Peer {
|
||||||
Peer{ id, tx, rx, frames }
|
Peer{ id, tx, rx, frames }
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn run(&mut self) -> Result<(), io::Error> {
|
async fn run(&mut self, spaces: Arc<Mutex<Map<V, ()>>>) -> Result<(), io::Error> {
|
||||||
println!("{:?}: got {:?}", self.id, &self.frames.get_ref());
|
println!("{:?}: got {:?}", self.id, &self.frames.get_ref());
|
||||||
|
|
||||||
let firstpacket = self.frames.next().await;
|
let firstpacket = self.frames.next().await;
|
||||||
|
@ -178,7 +179,21 @@ impl Peer {
|
||||||
return Ok(())
|
return Ok(())
|
||||||
};
|
};
|
||||||
|
|
||||||
println!("{:?}: connected to dataspace {:?}", self.id, dsname);
|
let is_new = {
|
||||||
|
let mut s = spaces.lock().unwrap();
|
||||||
|
match s.get(&dsname) {
|
||||||
|
Some(_) => false,
|
||||||
|
None => {
|
||||||
|
s.insert(dsname.clone(), ());
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
println!("{:?}: connected to {} dataspace {:?}",
|
||||||
|
self.id,
|
||||||
|
if is_new { "new" } else { "existing" },
|
||||||
|
dsname);
|
||||||
|
|
||||||
let mut running = true;
|
let mut running = true;
|
||||||
while running {
|
while running {
|
||||||
|
@ -244,8 +259,7 @@ impl Drop for Peer {
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
// let i = Index::new();
|
let spaces = Arc::new(Mutex::new(Map::new()));
|
||||||
|
|
||||||
let mut id = 0;
|
let mut id = 0;
|
||||||
|
|
||||||
let port = 8001;
|
let port = 8001;
|
||||||
|
@ -254,9 +268,10 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
loop {
|
loop {
|
||||||
let (stream, addr) = listener.accept().await?;
|
let (stream, addr) = listener.accept().await?;
|
||||||
let connid = id;
|
let connid = id;
|
||||||
|
let spaces = Arc::clone(&spaces);
|
||||||
id = id + 1;
|
id = id + 1;
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
match Peer::new(connid, stream).await.run().await {
|
match Peer::new(connid, stream).await.run(spaces).await {
|
||||||
Ok(_) => (),
|
Ok(_) => (),
|
||||||
Err(e) => println!("Connection {:?} died with {:?}", addr, e),
|
Err(e) => println!("Connection {:?} died with {:?}", addr, e),
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue