cfxcore/sync/message/
handleable.rs

1// Copyright 2019 Conflux Foundation. All rights reserved.
2// Conflux is free software and distributed under GNU General Public License.
3// See http://www.gnu.org/licenses/
4
5use 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
40// todo merge with Request and RequestContext!!!
41pub trait Handleable {
42    fn handle(self, ctx: &Context) -> Result<(), Error>;
43}