2021-07-15 07:13:31 +00:00
|
|
|
use std::sync::Arc;
|
|
|
|
|
|
|
|
use structopt::StructOpt;
|
|
|
|
|
|
|
|
use syndicate::actor::*;
|
2021-09-19 14:53:37 +00:00
|
|
|
use syndicate::language;
|
2021-07-15 07:13:31 +00:00
|
|
|
use syndicate::relay;
|
|
|
|
use syndicate::schemas::dataspace::Observe;
|
|
|
|
use syndicate::sturdy;
|
|
|
|
use syndicate::value::NestedValue;
|
2020-05-11 21:57:24 +00:00
|
|
|
|
2020-05-11 20:02:56 +00:00
|
|
|
use tokio::net::TcpStream;
|
2021-07-15 07:13:31 +00:00
|
|
|
|
2020-05-11 21:31:00 +00:00
|
|
|
use core::time::Duration;
|
|
|
|
use tokio::time::interval;
|
2020-05-11 20:02:56 +00:00
|
|
|
|
2021-07-15 07:13:31 +00:00
|
|
|
#[derive(Clone, Debug, StructOpt)]
|
|
|
|
pub struct Config {
|
|
|
|
#[structopt(short = "d", default_value = "b4b303726566b10973796e646963617465b584b210a6480df5306611ddd0d3882b546e197784")]
|
|
|
|
dataspace: String,
|
2020-06-15 14:15:52 +00:00
|
|
|
}
|
|
|
|
|
2020-05-11 20:02:56 +00:00
|
|
|
#[tokio::main]
|
|
|
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
2021-07-15 07:13:31 +00:00
|
|
|
syndicate::convenient_logging()?;
|
2021-09-28 11:00:48 +00:00
|
|
|
let config = Config::from_args();
|
|
|
|
let sturdyref = sturdy::SturdyRef::from_hex(&config.dataspace)?;
|
|
|
|
let (i, o) = TcpStream::connect("127.0.0.1:8001").await?.into_split();
|
2021-07-24 21:22:01 +00:00
|
|
|
Actor::new().boot(syndicate::name!("consumer"), |t| {
|
2021-10-05 19:11:16 +00:00
|
|
|
relay::connect_stream(t, i, o, false, sturdyref, (), |_state, t, ds| {
|
2021-09-28 11:00:48 +00:00
|
|
|
let consumer = syndicate::entity(0)
|
|
|
|
.on_message(|message_count, _t, m: AnyValue| {
|
|
|
|
if m.value().is_boolean() {
|
|
|
|
tracing::info!("{:?} messages in the last second", message_count);
|
|
|
|
*message_count = 0;
|
|
|
|
} else {
|
|
|
|
*message_count += 1;
|
|
|
|
}
|
|
|
|
Ok(())
|
|
|
|
})
|
|
|
|
.create_cap(t);
|
|
|
|
ds.assert(t, language(), &Observe {
|
|
|
|
pattern: syndicate_macros::pattern!{<Says $ $>},
|
|
|
|
observer: Arc::clone(&consumer),
|
|
|
|
});
|
2021-07-15 07:13:31 +00:00
|
|
|
|
2021-09-28 11:00:48 +00:00
|
|
|
t.linked_task(syndicate::name!("tick"), async move {
|
|
|
|
let mut stats_timer = interval(Duration::from_secs(1));
|
|
|
|
loop {
|
|
|
|
stats_timer.tick().await;
|
|
|
|
let consumer = Arc::clone(&consumer);
|
|
|
|
external_event(&Arc::clone(&consumer.underlying.mailbox),
|
|
|
|
&Account::new(syndicate::name!("account")),
|
|
|
|
Box::new(move |t| t.with_entity(
|
|
|
|
&consumer.underlying,
|
|
|
|
|t, e| e.message(t, AnyValue::new(true)))))?;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
Ok(None)
|
|
|
|
});
|
|
|
|
Ok(())
|
2021-07-24 21:22:01 +00:00
|
|
|
}).await??;
|
2021-07-15 07:13:31 +00:00
|
|
|
Ok(())
|
2020-05-11 20:02:56 +00:00
|
|
|
}
|