mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 14:01:02 +00:00
Add block event forwarding into the Overseer (#1192)
* Add block event forwarding into the Overseer * Add a doc comment * Fix a doc comment
This commit is contained in:
Generated
+1
@@ -3309,6 +3309,7 @@ dependencies = [
|
||||
"kv-log-macro",
|
||||
"log 0.4.8",
|
||||
"polkadot-primitives",
|
||||
"sc-client-api",
|
||||
"streamunordered",
|
||||
]
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ log = "0.4.8"
|
||||
futures-timer = "3.0.2"
|
||||
streamunordered = "0.5.1"
|
||||
polkadot-primitives = { path = "../primitives" }
|
||||
client = { package = "sc-client-api", git = "https://github.com/paritytech/substrate", branch = "master" }
|
||||
|
||||
[dev-dependencies]
|
||||
futures = { version = "0.3.5", features = ["thread-pool"] }
|
||||
|
||||
@@ -71,7 +71,8 @@ use futures::{
|
||||
use futures_timer::Delay;
|
||||
use streamunordered::{StreamYield, StreamUnordered};
|
||||
|
||||
use polkadot_primitives::{BlockNumber, Hash};
|
||||
use polkadot_primitives::{Block, BlockNumber, Hash};
|
||||
use client::{BlockImportNotification, BlockchainEvents, FinalityNotification};
|
||||
|
||||
/// An error type that describes faults that may happen
|
||||
///
|
||||
@@ -154,6 +155,26 @@ pub struct BlockInfo {
|
||||
pub number: BlockNumber,
|
||||
}
|
||||
|
||||
impl From<BlockImportNotification<Block>> for BlockInfo {
|
||||
fn from(n: BlockImportNotification<Block>) -> Self {
|
||||
BlockInfo {
|
||||
hash: n.hash,
|
||||
parent_hash: n.header.parent_hash,
|
||||
number: n.header.number,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<FinalityNotification<Block>> for BlockInfo {
|
||||
fn from(n: FinalityNotification<Block>) -> Self {
|
||||
BlockInfo {
|
||||
hash: n.hash,
|
||||
parent_hash: n.header.parent_hash,
|
||||
number: n.header.number,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Some event from outer world.
|
||||
enum Event {
|
||||
BlockImported(BlockInfo),
|
||||
@@ -172,6 +193,7 @@ pub enum OutboundMessage {
|
||||
/// A handler used to communicate with the [`Overseer`].
|
||||
///
|
||||
/// [`Overseer`]: struct.Overseer.html
|
||||
#[derive(Clone)]
|
||||
pub struct OverseerHandler {
|
||||
events_tx: mpsc::Sender<Event>,
|
||||
}
|
||||
@@ -206,6 +228,43 @@ impl OverseerHandler {
|
||||
}
|
||||
}
|
||||
|
||||
/// Glues together the [`Overseer`] and `BlockchainEvents` by forwarding
|
||||
/// import and finality notifications into the [`OverseerHandler`].
|
||||
///
|
||||
/// [`Overseer`]: struct.Overseer.html
|
||||
/// [`OverseerHandler`]: struct.OverseerHandler.html
|
||||
pub async fn forward_events<P: BlockchainEvents<Block>>(
|
||||
client: P,
|
||||
mut handler: OverseerHandler,
|
||||
) -> SubsystemResult<()> {
|
||||
let mut finality = client.finality_notification_stream();
|
||||
let mut imports = client.import_notification_stream();
|
||||
|
||||
loop {
|
||||
select! {
|
||||
f = finality.next() => {
|
||||
match f {
|
||||
Some(block) => {
|
||||
handler.block_finalized(block.into()).await?;
|
||||
}
|
||||
None => break,
|
||||
}
|
||||
},
|
||||
i = imports.next() => {
|
||||
match i {
|
||||
Some(block) => {
|
||||
handler.block_imported(block.into()).await?;
|
||||
}
|
||||
None => break,
|
||||
}
|
||||
},
|
||||
complete => break,
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
impl Debug for ToOverseer {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
|
||||
Reference in New Issue
Block a user