mod listeners;
mod messaging;
use sn_interface::messaging::{
data::{CmdError, OperationId, QueryResponse},
MsgId,
};
use sn_interface::network_knowledge::prefix_map::NetworkPrefixMap;
use sn_interface::types::PeerLinks;
use dashmap::DashMap;
use qp2p::Endpoint;
use std::sync::Arc;
use tokio::{
sync::{mpsc::Sender, RwLock},
time::Duration,
};
type PendingQueryResponses = Arc<DashMap<OperationId, Vec<(MsgId, QueryResponseSender)>>>;
type QueryResponseSender = Sender<QueryResponse>;
type CmdResponse = (std::net::SocketAddr, Option<CmdError>);
type PendingCmdAcks = Arc<DashMap<MsgId, Sender<CmdResponse>>>;
#[derive(Debug)]
pub struct QueryResult {
pub response: QueryResponse,
pub operation_id: OperationId,
}
#[derive(Clone, Debug)]
pub(super) struct Session {
endpoint: Endpoint,
pending_queries: PendingQueryResponses,
#[allow(dead_code)]
incoming_err_sender: Arc<Sender<CmdError>>,
pending_cmds: PendingCmdAcks,
network: Arc<NetworkPrefixMap>,
genesis_key: bls::PublicKey,
initial_connection_check_msg_id: Arc<RwLock<Option<MsgId>>>,
cmd_ack_wait: Duration,
peer_links: PeerLinks,
}