More
This commit is contained in:
parent
82252cf4e5
commit
9e256376a1
69
src/main.rs
69
src/main.rs
|
@ -21,9 +21,23 @@ type V = value::ArcValue;
|
||||||
mod packets {
|
mod packets {
|
||||||
use super::V;
|
use super::V;
|
||||||
|
|
||||||
|
pub type EndpointName = V;
|
||||||
|
pub type Assertion = V;
|
||||||
|
pub type Captures = Vec<Assertion>;
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub enum Action {
|
pub enum Action {
|
||||||
Assert(V, V),
|
Assert(EndpointName, Assertion),
|
||||||
|
Clear(EndpointName),
|
||||||
|
Message(Assertion),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
|
||||||
|
pub enum Event {
|
||||||
|
Add(EndpointName, Captures),
|
||||||
|
Del(EndpointName, Captures),
|
||||||
|
Msg(EndpointName, Captures),
|
||||||
|
End(EndpointName),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
|
@ -31,11 +45,14 @@ mod packets {
|
||||||
Connect(V),
|
Connect(V),
|
||||||
Turn(Vec<Action>),
|
Turn(Vec<Action>),
|
||||||
Ping(),
|
Ping(),
|
||||||
|
Pong(),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub enum Out {
|
pub enum Out {
|
||||||
Err(String),
|
Err(String),
|
||||||
|
Turn(Vec<Event>),
|
||||||
|
Ping(),
|
||||||
Pong(),
|
Pong(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -114,17 +131,21 @@ impl Peer {
|
||||||
Some(res) => match res {
|
Some(res) => match res {
|
||||||
Ok(v) => {
|
Ok(v) => {
|
||||||
println!("Input {}: {:?}", self.id, &v);
|
println!("Input {}: {:?}", self.id, &v);
|
||||||
let p = value::from_value(&v).unwrap();
|
match value::from_value(&v) {
|
||||||
self.dataspace.send(DataspaceMessage::Input(self.id, p)).await.unwrap()
|
Ok(p) => {
|
||||||
|
let m = DataspaceMessage::Input(self.id, p);
|
||||||
|
self.dataspace.send(m).await.unwrap()
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
to_send.push(packets::Out::Err(format!("{:?}", e)));
|
||||||
|
running = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Err(value::codec::Error::Eof) => running = false,
|
Err(value::codec::Error::Eof) => running = false,
|
||||||
Err(value::codec::Error::Io(e)) => return Err(e),
|
Err(value::codec::Error::Io(e)) => return Err(e),
|
||||||
Err(value::codec::Error::Syntax(s)) => {
|
Err(value::codec::Error::Syntax(s)) => {
|
||||||
let v = value::to_value(packets::Out::Err(s.to_string())).unwrap();
|
to_send.push(packets::Out::Err(s.to_string()));
|
||||||
to_send.push(v);
|
|
||||||
println!("Connection {} crashed with Preserves syntax error {:?}",
|
|
||||||
self.id,
|
|
||||||
s);
|
|
||||||
running = false;
|
running = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -132,14 +153,18 @@ impl Peer {
|
||||||
},
|
},
|
||||||
msgopt = self.rx.recv().boxed().fuse() => {
|
msgopt = self.rx.recv().boxed().fuse() => {
|
||||||
match msgopt {
|
match msgopt {
|
||||||
Some(msg) => to_send.push(value::to_value(msg).unwrap()),
|
Some(msg) => to_send.push(msg),
|
||||||
None => /* weird. */ running = false,
|
None => /* weird. */ running = false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
for v in to_send {
|
for v in to_send {
|
||||||
println!("Output {}: {:?}", self.id, &v);
|
if let packets::Out::Err(ref msg) = v {
|
||||||
self.frames.send(v).await?;
|
println!("Connection {} crashed with error {:?}", self.id, msg);
|
||||||
|
} else {
|
||||||
|
println!("Output {}: {:?}", self.id, &v);
|
||||||
|
}
|
||||||
|
self.frames.send(value::to_value(v).unwrap()).await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -189,12 +214,6 @@ impl Dataspace {
|
||||||
// self.pending.push(PeerMessage::Leave(i));
|
// self.pending.push(PeerMessage::Leave(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
// async fn broadcast(&mut self, m: &Arc<PeerMessage>) {
|
|
||||||
// for (i, ref mut s) in self.peers.clone() {
|
|
||||||
// self.send(i, s, m).await;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
async fn run(&mut self) {
|
async fn run(&mut self) {
|
||||||
loop {
|
loop {
|
||||||
println!("Dataspace waiting for message ({} connected)", self.peers.len());
|
println!("Dataspace waiting for message ({} connected)", self.peers.len());
|
||||||
|
@ -202,17 +221,6 @@ impl Dataspace {
|
||||||
println!("Dataspace: {:?}", msg);
|
println!("Dataspace: {:?}", msg);
|
||||||
match msg {
|
match msg {
|
||||||
DataspaceMessage::Join(i, s) => {
|
DataspaceMessage::Join(i, s) => {
|
||||||
// let mut ok = true;
|
|
||||||
// let i_join = &Arc::new(PeerMessage::Join(i));
|
|
||||||
// for (p, ref mut r) in self.peers.clone() {
|
|
||||||
// ok = ok && self.send(i, &mut s, &Arc::new(PeerMessage::Join(p))).await;
|
|
||||||
// self.send(p, r, i_join).await;
|
|
||||||
// }
|
|
||||||
// ok = ok && self.send(i, &mut s, i_join).await;
|
|
||||||
// if ok {
|
|
||||||
// self.peers.insert(i, s);
|
|
||||||
// }
|
|
||||||
|
|
||||||
self.peers.insert(i, s);
|
self.peers.insert(i, s);
|
||||||
}
|
}
|
||||||
DataspaceMessage::Input(i, p) => {
|
DataspaceMessage::Input(i, p) => {
|
||||||
|
@ -220,14 +228,11 @@ impl Dataspace {
|
||||||
packets::In::Connect(dsname) => (),
|
packets::In::Connect(dsname) => (),
|
||||||
packets::In::Turn(actions) => (),
|
packets::In::Turn(actions) => (),
|
||||||
packets::In::Ping() => { self.send_to(i, &packets::Out::Pong()).await; }
|
packets::In::Ping() => { self.send_to(i, &packets::Out::Pong()).await; }
|
||||||
|
packets::In::Pong() => (),
|
||||||
}
|
}
|
||||||
// self.broadcast(&Arc::new(PeerMessage::Speak(i, v))).await;
|
|
||||||
}
|
}
|
||||||
DataspaceMessage::Leave(i) => self.remove(i),
|
DataspaceMessage::Leave(i) => self.remove(i),
|
||||||
}
|
}
|
||||||
// while let Some(m) = self.pending.pop() {
|
|
||||||
// self.broadcast(&Arc::new(m)).await;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue