| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- /*! The networking methods for our client components to call. In
- particular, this file provides a send() method to handle connecting
- to a server process and sending it data. */
- use tokio::io::{AsyncReadExt, AsyncWriteExt};
- use tokio::net::TcpStream;
- // may need to change strings to byte vectors in the future
- pub async fn send(addr: String, payload: Vec<u8>) -> Vec<u8> {
- let mut stream = TcpStream::connect(&addr)
- .await
- .expect("Failed to create TcpStream");
- // send number of bytes in payload
- let payload_size = usize::to_be_bytes(payload.len());
- stream
- .write_all(&payload_size)
- .await
- .expect("Failed to write number of bytes to listen for");
- // send data
- stream
- .write_all(&payload)
- .await
- .expect("Failed to write data to stream");
- // get number of bytes in response
- let mut nbuf: [u8; 8] = [0; 8];
- stream
- .read(&mut nbuf)
- .await
- .expect("Failed to get number of bytes to read");
- let n = usize::from_be_bytes(nbuf);
- if n == 0 {
- return vec![0; 0];
- }
- // receive response
- let mut buf = vec![0; n];
- stream
- .read(&mut buf)
- .await
- .expect("Failed to read data from socket");
- buf
- }
|