#[tokio::main]
async fn main() -> anyhow::Result<()> {
moq_native::Log::new(tracing::Level::DEBUG).init();
let origin = moq_lite::Origin::produce();
tokio::select! {
res = run_session(origin.consume()) => res,
res = run_broadcast(origin) => res,
}
}
async fn run_session(origin: moq_lite::OriginConsumer) -> anyhow::Result<()> {
let client = moq_native::ClientConfig::default().init()?;
let url = url::Url::parse("https://cdn.moq.dev/anon/chat-example").unwrap();
let session = client.with_publish(origin).connect(url).await?;
session.closed().await.map_err(Into::into)
}
async fn run_broadcast(origin: moq_lite::OriginProducer) -> anyhow::Result<()> {
let mut broadcast = moq_lite::Broadcast::produce();
let mut track = broadcast.create_track(moq_lite::Track {
name: "chat".to_string(),
priority: 0,
})?;
origin.publish_broadcast("", broadcast.consume());
let mut group = track.append_group()?;
group.write_frame(bytes::Bytes::from_static(b"Hello"))?;
group.write_frame(bytes::Bytes::from_static(b"World"))?;
group.finish()?;
tracing::info!("wrote hello + world");
tokio::time::sleep(tokio::time::Duration::from_secs(10)).await;
track.write_frame(bytes::Bytes::from_static(b"foobarbaz"))?;
tracing::info!("wrote foobarbaz");
tokio::time::sleep(tokio::time::Duration::from_secs(10)).await;
Ok(())
}