use crate::console::Message;
use serde::Serialize;
use std::net::SocketAddr;
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use tokio::net::TcpStream;
use tracing::debug;
pub struct Client {
address: SocketAddr,
}
impl Client {
pub fn new(address: SocketAddr) -> Self {
Self { address }
}
pub async fn send<S: Serialize, M: Serialize>(
&self,
service_id: S,
message: &M,
) -> anyhow::Result<()> {
let console_message = Message::new(service_id, message)?;
let mut stream = TcpStream::connect(self.address).await?;
debug!("Connected to server");
let mut welcome = vec![0; 512];
let _ = stream.read(&mut welcome).await?;
let bytes = bcs::to_bytes(&console_message)?;
stream.write_all(&bytes).await?;
Ok(())
}
}