cfxcore/sync/message/
handleable.rs1use crate::{
6 message::Message,
7 sync::{
8 request_manager::RequestMessage, Error, SynchronizationProtocolHandler,
9 },
10};
11use network::{node_table::NodeId, NetworkContext};
12
13pub struct Context<'a> {
14 pub io: &'a dyn NetworkContext,
15 pub node_id: NodeId,
16 pub manager: &'a SynchronizationProtocolHandler,
17}
18
19impl<'a> Context<'a> {
20 pub fn match_request(
21 &self, request_id: u64,
22 ) -> Result<RequestMessage, Error> {
23 self.manager
24 .request_manager
25 .match_request(&self.node_id, request_id)
26 }
27
28 pub fn send_response(&self, response: &dyn Message) -> Result<(), Error> {
29 response.send(self.io, &self.node_id)?;
30 Ok(())
31 }
32
33 pub fn insert_peer_node_tag(&self, peer: NodeId, key: &str, value: &str) {
34 self.io.insert_peer_node_tag(peer, key, value)
35 }
36
37 pub fn node_id(&self) -> NodeId { self.node_id.clone() }
38}
39
40pub trait Handleable {
42 fn handle(self, ctx: &Context) -> Result<(), Error>;
43}