I am trying to transmit packets/bytes from a TcpStream
to another and vice-versa. I've created a struct Connection
:
pub struct Connection {
pub client_socket: TcpStream,
pub server_socket: TcpStream
}
I'm trying to open two threads so I can transmit all bytes in both directions. Sadly I'm trying to use a moved value because I called connection a second time. How can I fix that ?
thread::spawn(move || loop { connection.transfer_server_client_packet(); });
thread::spawn(move || loop { connection.transfer_client_server_packet(); });
impl Connection {
fn get_packet(&mut self, from_client: bool) -> Result<Packet, io::Error> {
unimplemented!()
}
pub fn get_client_packet(&mut self) -> Result<Packet, io::Error> {
self.get_packet(true)
}
pub fn get_server_packet(&mut self) -> Result<Packet, io::Error> {
self.get_packet(false)
}
fn send_packet(&mut self, from_client: bool, mut packet: Packet) -> Result<Packet, io::Error> {
unimplemented!()
}
pub fn send_client_packet(&mut self, packet: Packet) -> Result<Packet, io::Error> {
self.send_packet(true, packet)
}
pub fn send_server_packet(&mut self, packet: Packet) -> Result<Packet, io::Error> {
self.send_packet(false, packet)
}
fn transfer_packet(&mut self, from_client: bool, to_client: bool) -> Result<usize, io::Error> {
let packet = if from_client {
self.get_client_packet()?
} else {
self.get_server_packet()?
};
if to_client {
self.send_client_packet(packet)?
} else {
self.send_server_packet(packet)?
};
Ok(0)
}
pub fn transfer_client_server_packet(&mut self) -> Result<usize, io::Error> {
self.transfer_packet(true, false)
}
pub fn transfer_server_client_packet(&mut self) -> Result<usize, io::Error> {
self.transfer_packet(false, true)
}
}