use async_trait::async_trait;
use bytes::Bytes;
use super::CmServer;
use crate::error::SteamError;
#[async_trait]
pub trait SteamConnection: Send + Sync {
async fn send(&mut self, data: Vec<u8>) -> Result<(), SteamError>;
async fn recv(&mut self) -> Result<Option<Bytes>, SteamError>;
async fn close(self: Box<Self>) -> Result<(), SteamError>;
#[allow(dead_code)]
fn server(&self) -> &CmServer;
#[allow(dead_code)]
fn set_session_key(&mut self, key: Option<Vec<u8>>);
}
#[async_trait]
pub trait CmServerProvider: Send + Sync {
async fn get_server(&self) -> Result<CmServer, SteamError>;
}
#[async_trait]
impl<H, R> CmServerProvider for steam_cm_provider::HttpCmServerProvider<H, R>
where
H: steam_cm_provider::HttpClient + Clone + 'static,
R: steam_cm_provider::CmRng + Send + Sync + Clone + 'static,
{
async fn get_server(&self) -> Result<CmServer, SteamError> {
let provider: &dyn steam_cm_provider::CmServerProvider = self as &dyn steam_cm_provider::CmServerProvider;
Ok(provider.get_server().await?)
}
}
impl steam_cm_provider::CmRng for dyn crate::utils::rng::Rng {
fn gen_u32(&self) -> u32 {
self.gen_u32()
}
fn gen_usize(&self, max: usize) -> usize {
self.gen_usize(max)
}
}