Update mod.rs

+ added custom type for a function vector
+ added vector for sending and receiving
+ added functions to push and pop from the transformation stack.
This commit is contained in:
michael-bailey 2021-08-06 17:40:58 +01:00
parent 85f02e553a
commit 312c7bde9f
1 changed files with 31 additions and 0 deletions

View File

@ -17,10 +17,14 @@ use tokio::io::AsyncBufReadExt;
use crate::prelude::StreamMessageSender;
type TransformerVec = Vec<fn(&[u8]) -> &[u8]>;
pub struct SocketSender {
stream_tx: Mutex<WriteHalf<tokio::net::TcpStream>>,
stream_rx: Mutex<BufReader<ReadHalf<tokio::net::TcpStream>>>,
send_transformer: Mutex<TransformerVec>,
recv_transformer: Mutex<TransformerVec>,
}
impl SocketSender {
@ -31,8 +35,35 @@ impl SocketSender {
Arc::new(SocketSender {
stream_tx: Mutex::new(wd),
stream_rx: Mutex::new(reader),
send_transformer: Mutex::new(Vec::new()),
recv_transformer: Mutex::new(Vec::new()),
})
}
pub async fn push_layer(
self: &Arc<Self>,
send_func: fn(&[u8]) -> &[u8],
recv_func: fn(&[u8]) -> &[u8],
) {
let mut send_lock = self.send_transformer.lock().await;
let mut recv_lock = self.recv_transformer.lock().await;
send_lock.push(send_func);
recv_lock.reverse();
recv_lock.push(recv_func);
recv_lock.reverse();
}
pub async fn pop_layer(self: &Arc<Self>,) {
let mut send_lock = self.send_transformer.lock().await;
let mut recv_lock = self.recv_transformer.lock().await;
let _ = send_lock.pop();
recv_lock.reverse();
let _ = recv_lock.pop();
recv_lock.reverse();
}
}
#[async_trait]