rlibdht 0.1.0

Rust DHT library
Documentation
use std::time::{SystemTime, UNIX_EPOCH};
use crate::messages::inter::method_message_base::MethodMessageBase;
use crate::rpc::events::inter::response_callback::ResponseCallback;
use crate::rpc::response_tracker::STALLED_TIME;
use crate::utils::node::Node;

pub struct Call {
    message: Box<dyn MethodMessageBase>,
    node: Option<Node>,
    callback: Box<dyn ResponseCallback>,
    sent_time: u128
}

impl Call {

    pub fn new(message: &dyn MethodMessageBase, callback: Box<dyn ResponseCallback>) -> Self {
        let now = SystemTime::now()
            .duration_since(UNIX_EPOCH)
            .expect("Time went backwards")
            .as_millis();

        Self {
            message: message.dyn_clone(),
            node: None,
            callback,
            sent_time: now
        }
    }

    pub fn get_message(&self) -> &dyn MethodMessageBase {
        self.message.as_ref()
    }

    pub fn has_node(&self) -> bool {
        self.node.is_some()
    }

    pub fn set_node(&mut self, node: Node) {
        self.node = Some(node);
    }

    pub fn get_node(&self) -> Node {
        self.node.unwrap()
    }

    pub fn get_response_callback(&self) -> &dyn ResponseCallback {
        self.callback.as_ref()
    }

    pub fn set_response_callback(&mut self, callback: Box<dyn ResponseCallback>) {
        self.callback = callback;
    }

    pub fn set_sent_time(&mut self, sent_time: u128) {
        self.sent_time = sent_time;
    }

    pub fn get_sent_time(&self) -> u128 {
        self.sent_time
    }

    pub fn is_stalled(&self, now: u128) -> bool {
        now-self.sent_time > STALLED_TIME
    }
}