proxy_agent/src/shared_state.rs (55 lines of code) (raw):

// Copyright (c) Microsoft Corporation // SPDX-License-Identifier: MIT pub mod agent_status_wrapper; pub mod key_keeper_wrapper; pub mod provision_wrapper; pub mod proxy_server_wrapper; pub mod redirector_wrapper; pub mod telemetry_wrapper; use tokio_util::sync::CancellationToken; const UNKNOWN_STATUS_MESSAGE: &str = "Status unknown."; /// The shared state is used to share the state between different modules. /// It contains the cancellation token, which is used to cancel the agent when the agent is stopped. /// It also contains the senders for the key keeper, telemetry event, provision, agent status, redirector, and proxy server modules. /// The shared state is used to start the modules and get the senders for the modules. /// The shared state is used to get the cancellation token and cancel the cancellation token. /// Example: /// ```rust /// use proxy_agent::shared_state::SharedState; /// let shared_state = SharedState::start_all(); /// let key_keeper_shared_state = shared_state.get_key_keeper_shared_state(); /// let telemetry_shared_state = shared_state.get_telemetry_shared_state(); /// let provision_shared_state = shared_state.get_provision_shared_state(); /// let agent_status_shared_state = shared_state.get_agent_status_shared_state(); /// let redirector_shared_state = shared_state.get_redirector_shared_state(); /// let proxy_server_shared_state = shared_state.get_proxy_server_shared_state(); /// let cancellation_token = shared_state.get_cancellation_token(); /// shared_state.cancel_cancellation_token(); /// ``` #[derive(Clone)] pub struct SharedState { /// The cancellation token is used to cancel the agent when the agent is stopped cancellation_token: CancellationToken, /// The sender for the key keeper module key_keeper_shared_state: key_keeper_wrapper::KeyKeeperSharedState, /// The sender for the telemetry event modules telemetry_shared_state: telemetry_wrapper::TelemetrySharedState, /// The sender for the provision module provision_shared_state: provision_wrapper::ProvisionSharedState, /// The sender for the agent status module agent_status_shared_state: agent_status_wrapper::AgentStatusSharedState, /// The sender for the redirector module redirector_shared_state: redirector_wrapper::RedirectorSharedState, /// The sender for the proxy server module proxy_server_shared_state: proxy_server_wrapper::ProxyServerSharedState, } impl SharedState { pub fn start_all() -> Self { SharedState { cancellation_token: CancellationToken::new(), key_keeper_shared_state: key_keeper_wrapper::KeyKeeperSharedState::start_new(), telemetry_shared_state: telemetry_wrapper::TelemetrySharedState::start_new(), provision_shared_state: provision_wrapper::ProvisionSharedState::start_new(), agent_status_shared_state: agent_status_wrapper::AgentStatusSharedState::start_new(), redirector_shared_state: redirector_wrapper::RedirectorSharedState::start_new(), proxy_server_shared_state: proxy_server_wrapper::ProxyServerSharedState::start_new(), } } pub fn get_key_keeper_shared_state(&self) -> key_keeper_wrapper::KeyKeeperSharedState { self.key_keeper_shared_state.clone() } pub fn get_telemetry_shared_state(&self) -> telemetry_wrapper::TelemetrySharedState { self.telemetry_shared_state.clone() } pub fn get_provision_shared_state(&self) -> provision_wrapper::ProvisionSharedState { self.provision_shared_state.clone() } pub fn get_agent_status_shared_state(&self) -> agent_status_wrapper::AgentStatusSharedState { self.agent_status_shared_state.clone() } pub fn get_redirector_shared_state(&self) -> redirector_wrapper::RedirectorSharedState { self.redirector_shared_state.clone() } pub fn get_proxy_server_shared_state(&self) -> proxy_server_wrapper::ProxyServerSharedState { self.proxy_server_shared_state.clone() } pub fn get_cancellation_token(&self) -> CancellationToken { self.cancellation_token.clone() } pub fn cancel_cancellation_token(&self) { self.cancellation_token.cancel(); } }