use core::iter;
use futures::{channel::mpsc, prelude::*};
fn main() {
env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init();
let (tasks_spawner, mut tasks_receiver) = mpsc::unbounded();
async_std::task::spawn(async move {
let mut all_tasks = stream::FuturesUnordered::new();
loop {
futures::select! {
(_, new_task) = tasks_receiver.select_next_some() => {
all_tasks.push(new_task);
},
() = all_tasks.select_next_some() => {},
}
}
});
let mut client = smoldot_light::Client::<
smoldot_light::platform::async_std::AsyncStdTcpWebSocket,
>::new(smoldot_light::ClientConfig {
tasks_spawner,
system_name: env!("CARGO_PKG_NAME").into(),
system_version: env!("CARGO_PKG_VERSION").into(),
});
let (json_rpc_responses_tx, mut json_rpc_responses_rx) = mpsc::channel(32);
let chain_id = client.add_chain(smoldot_light::AddChainConfig {
specification: include_str!("../../polkadot.json"),
json_rpc_responses: Some(json_rpc_responses_tx),
potential_relay_chains: iter::empty(),
database_content: "",
user_data: (),
});
if let Some(error_msg) = client.chain_is_erroneous(chain_id) {
let error_msg = error_msg.to_owned();
let _ = client.remove_chain(chain_id);
panic!("Error while creating chain: {}", error_msg);
}
client
.json_rpc_request(
r#"{"id":1,"jsonrpc":"2.0","method":"chain_subscribeNewHeads","params":[]}"#,
chain_id,
)
.unwrap();
async_std::task::block_on(async move {
loop {
let response = json_rpc_responses_rx.next().await.unwrap();
println!("JSON-RPC response: {}", response);
}
})
}