use async_channel::{Receiver, Sender};
use stratum_apps::{stratum_core::sv1_api::json_rpc, utils::types::DownstreamId};
use tokio_util::sync::CancellationToken;
use tracing::debug;
#[derive(Clone, Debug)]
pub struct DownstreamChannelState {
pub downstream_sv1_sender: Sender<json_rpc::Message>,
pub downstream_sv1_receiver: Receiver<json_rpc::Message>,
pub sv1_server_sender: Sender<(DownstreamId, json_rpc::Message)>,
pub sv1_server_receiver: Receiver<json_rpc::Message>,
pub connection_token: CancellationToken,
}
#[cfg_attr(not(test), hotpath::measure_all)]
impl DownstreamChannelState {
pub fn new(
downstream_sv1_sender: Sender<json_rpc::Message>,
downstream_sv1_receiver: Receiver<json_rpc::Message>,
sv1_server_sender: Sender<(DownstreamId, json_rpc::Message)>,
sv1_server_receiver: Receiver<json_rpc::Message>,
connection_token: CancellationToken,
) -> Self {
Self {
downstream_sv1_receiver,
downstream_sv1_sender,
sv1_server_receiver,
sv1_server_sender,
connection_token,
}
}
pub fn drop(&self) {
debug!("Dropping downstream channel state");
self.connection_token.cancel();
self.downstream_sv1_receiver.close();
self.downstream_sv1_sender.close();
}
}