Skip to content

Commit

Permalink
add flume for messages
Browse files Browse the repository at this point in the history
  • Loading branch information
girazoki committed Nov 14, 2024
1 parent 9b39ff1 commit cae06bc
Show file tree
Hide file tree
Showing 5 changed files with 329 additions and 133 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions solo-chains/node/tanssi-relay-service/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ async-io = { workspace = true }
async-trait = { workspace = true }
bitvec = { workspace = true, optional = true }
codec = { workspace = true }
flume = { workspace = true }
futures = { workspace = true }
gum = { workspace = true }
hex-literal = { workspace = true }
Expand Down
81 changes: 81 additions & 0 deletions solo-chains/node/tanssi-relay-service/src/dev_rpcs.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
// Copyright (C) Moondance Labs Ltd.
// This file is part of Tanssi.

// Tanssi is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// Tanssi is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with Tanssi. If not, see <http://www.gnu.org/licenses/>

//! Development Polkadot service. Adapted from `polkadot_service` crate
//! and removed un-necessary components which are not required in dev node.

use codec::{Decode, Encode};
use jsonrpsee::{
core::RpcResult,
proc_macros::rpc,
types::{
error::{INTERNAL_ERROR_CODE, INTERNAL_ERROR_MSG},
ErrorObjectOwned,
},
};

/// This RPC interface is used to provide methods in dev mode only
#[rpc(server)]
#[jsonrpsee::core::async_trait]
pub trait DevApi {
/// Indicate the mock parachain candidate insertion to be active
#[method(name = "mock_enableParaInherentCandidate")]
async fn enable_para_inherent_candidate(&self) -> RpcResult<()>;

/// Indicate the mock parachain candidate insertion to be disabled
#[method(name = "mock_disableParaInherentCandidate")]
async fn disable_para_inherent_candidate(&self) -> RpcResult<()>;
}

pub struct DevRpc {
pub mock_para_inherent_channel: flume::Sender<Vec<u8>>,
}

#[jsonrpsee::core::async_trait]
impl DevApiServer for DevRpc {
async fn enable_para_inherent_candidate(&self) -> RpcResult<()> {
let mock_para_inherent_channel = self.mock_para_inherent_channel.clone();
// Push the message to the shared channel where it will be queued up
// to be injected in to an upcoming block.
mock_para_inherent_channel
.send_async(true.encode())
.await
.map_err(|err| internal_err(err.to_string()))?;

Ok(())
}

async fn disable_para_inherent_candidate(&self) -> RpcResult<()> {
let mock_para_inherent_channel = self.mock_para_inherent_channel.clone();
// Push the message to the shared channel where it will be queued up
// to be injected in to an upcoming block.
mock_para_inherent_channel
.send_async(false.encode())
.await
.map_err(|err| internal_err(err.to_string()))?;

Ok(())
}
}

// This bit cribbed from frontier.
pub fn internal_err<T: ToString>(message: T) -> ErrorObjectOwned {
ErrorObjectOwned::owned(
INTERNAL_ERROR_CODE,
INTERNAL_ERROR_MSG,
Some(message.to_string()),
)
}
Loading

0 comments on commit cae06bc

Please sign in to comment.