use common::Uid;
use main::Config;
use mio::Token;
use std::net::SocketAddr;
#[derive(Debug, Clone, Copy)]
pub struct ConnectionId {
pub active_connection: Option<Token>,
pub currently_handshaking: usize,
}
#[derive(Debug)]
pub struct ConnectionInfoResult<UID> {
pub result_token: u32,
pub result: ::Res<PrivConnectionInfo<UID>>,
}
#[derive(Debug)]
pub struct PrivConnectionInfo<UID> {
#[doc(hidden)]
pub id: UID,
#[doc(hidden)]
pub for_direct: Vec<SocketAddr>,
}
impl<UID: Uid> PrivConnectionInfo<UID> {
pub fn to_pub_connection_info(&self) -> PubConnectionInfo<UID> {
PubConnectionInfo {
for_direct: self.for_direct.clone(),
id: self.id,
}
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct PubConnectionInfo<UID> {
#[doc(hidden)]
pub id: UID,
#[doc(hidden)]
pub for_direct: Vec<SocketAddr>,
}
impl<UID: Uid> PubConnectionInfo<UID> {
pub fn id(&self) -> UID {
self.id
}
}
#[derive(Default)]
pub struct ConfigWrapper {
pub cfg: Config,
pub is_modified_for_next_refresh: bool,
}
impl ConfigWrapper {
pub fn new(cfg: Config) -> Self {
Self {
cfg,
is_modified_for_next_refresh: false,
}
}
pub fn check_for_update_and_mark_modified(&mut self, new_cfg: Config) {
if self.cfg != new_cfg {
self.cfg = new_cfg;
self.is_modified_for_next_refresh = true;
}
}
pub fn check_for_refresh_and_reset_modified(&mut self, new_cfg: Config) -> bool {
let should_refresh = if self.cfg != new_cfg {
self.cfg = new_cfg;
true
} else {
self.is_modified_for_next_refresh
};
self.is_modified_for_next_refresh = false;
should_refresh
}
}