buf_reader_and_writer
This commit is contained in:
parent
4a6f1bec74
commit
beb13c3703
1 changed files with 78 additions and 66 deletions
70
src/main.rs
70
src/main.rs
|
@ -1,7 +1,7 @@
|
||||||
use std::fs::{File, Metadata, self};
|
use std::fs::{File, Metadata, self};
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
use std::net::{TcpListener, TcpStream};
|
use std::net::{TcpListener, TcpStream};
|
||||||
use std::io::{Read, Write, self};
|
use std::io::{Read, Write, self, BufWriter, BufReader, BufRead};
|
||||||
use std::env::{self};
|
use std::env::{self};
|
||||||
|
|
||||||
|
|
||||||
|
@ -76,12 +76,25 @@ impl FileInfo
|
||||||
let mut iteration = (self.metadata.as_ref().unwrap().len()/BUFFER_SIZE as u64)+1;
|
let mut iteration = (self.metadata.as_ref().unwrap().len()/BUFFER_SIZE as u64)+1;
|
||||||
let mut handshake = [0u8;BUFFER_SIZE];
|
let mut handshake = [0u8;BUFFER_SIZE];
|
||||||
handshake[..self.metadata.as_ref().unwrap().len().to_string().as_bytes().len()].copy_from_slice(self.metadata.as_ref().unwrap().len().to_string().as_bytes());
|
handshake[..self.metadata.as_ref().unwrap().len().to_string().as_bytes().len()].copy_from_slice(self.metadata.as_ref().unwrap().len().to_string().as_bytes());
|
||||||
match stream.write_all(&mut handshake)
|
let mut writer_stream = BufWriter::new(stream.try_clone().unwrap());
|
||||||
|
let mut reader_stream = BufReader::new(stream.try_clone().unwrap());
|
||||||
|
match writer_stream.write_all(&mut handshake)
|
||||||
{
|
{
|
||||||
Ok(_) =>
|
Ok(_) =>
|
||||||
{
|
{
|
||||||
|
match writer_stream.flush()
|
||||||
|
{
|
||||||
|
Ok(_) =>
|
||||||
|
{
|
||||||
|
println!("Done: Flush Handshake -> {}", self.location);
|
||||||
|
}
|
||||||
|
Err(err_val) =>
|
||||||
|
{
|
||||||
|
println!("Error: Flush Handshake -> {} | Error: {}", self.location, err_val);
|
||||||
|
}
|
||||||
|
}
|
||||||
let mut handshake_callback = [0u8;BUFFER_SIZE];
|
let mut handshake_callback = [0u8;BUFFER_SIZE];
|
||||||
match stream.read_exact(&mut handshake_callback)
|
match reader_stream.read_exact(&mut handshake_callback)
|
||||||
{
|
{
|
||||||
Ok(_) =>
|
Ok(_) =>
|
||||||
{
|
{
|
||||||
|
@ -96,20 +109,22 @@ impl FileInfo
|
||||||
Err(err_val) =>
|
Err(err_val) =>
|
||||||
{
|
{
|
||||||
println!("Error: Handshake Send -> {} | Error: {}", self.location, err_val);
|
println!("Error: Handshake Send -> {} | Error: {}", self.location, err_val);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while iteration != 0
|
while iteration != 0
|
||||||
{
|
{
|
||||||
iteration -= 1;
|
iteration -= 1;
|
||||||
let mut buffer = [0u8;BUFFER_SIZE];
|
let mut buffer = [0u8;BUFFER_SIZE];
|
||||||
match self.file.as_ref().as_mut().unwrap().read(&mut buffer)
|
let mut file_reader = BufReader::new(self.file.as_ref().unwrap());
|
||||||
|
match file_reader.read(&mut buffer)
|
||||||
{
|
{
|
||||||
Ok(read_size) =>
|
Ok(read_size) =>
|
||||||
{
|
{
|
||||||
self.size_current += read_size;
|
self.size_current += read_size;
|
||||||
if iteration != 0
|
if iteration != 0
|
||||||
{
|
{
|
||||||
match stream.write_all(&mut buffer)
|
match writer_stream.write_all(&mut buffer)
|
||||||
{
|
{
|
||||||
Ok(_) =>
|
Ok(_) =>
|
||||||
{
|
{
|
||||||
|
@ -121,22 +136,11 @@ impl FileInfo
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
match stream.flush()
|
|
||||||
{
|
|
||||||
Ok(_) =>
|
|
||||||
{
|
|
||||||
println!("Done: Flush -> {}", self.location);
|
|
||||||
}
|
|
||||||
Err(err_val) =>
|
|
||||||
{
|
|
||||||
println!("Error: Flush -> {} | Error: {}", self.location, err_val);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
let mut last_buffer:Vec<u8> = (&buffer[..(self.metadata.as_ref().unwrap().len()%BUFFER_SIZE as u64)as usize]).to_vec();
|
let mut last_buffer:Vec<u8> = (&buffer[..(self.metadata.as_ref().unwrap().len()%BUFFER_SIZE as u64)as usize]).to_vec();
|
||||||
match stream.write_all(&mut last_buffer)
|
match writer_stream.write_all(&mut last_buffer)
|
||||||
{
|
{
|
||||||
Ok(_) =>
|
Ok(_) =>
|
||||||
{
|
{
|
||||||
|
@ -148,6 +152,17 @@ impl FileInfo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
match writer_stream.flush()
|
||||||
|
{
|
||||||
|
Ok(_) =>
|
||||||
|
{
|
||||||
|
println!("Done: Flush -> {}", self.location);
|
||||||
|
}
|
||||||
|
Err(err_val) =>
|
||||||
|
{
|
||||||
|
println!("Error: Flush -> {} | Error: {}", self.location, err_val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Err(err_val) =>
|
Err(err_val) =>
|
||||||
|
@ -163,16 +178,17 @@ impl FileInfo
|
||||||
{
|
{
|
||||||
//use match, there is a chance to fail creation. don't pass with just some
|
//use match, there is a chance to fail creation. don't pass with just some
|
||||||
self.file = Some(File::create(&self.location).expect("Error: Create File"));
|
self.file = Some(File::create(&self.location).expect("Error: Create File"));
|
||||||
match self.file
|
let mut file_reader = BufReader::new(self.file.as_ref().unwrap());
|
||||||
{
|
let mut file_writer = BufWriter::new(self.file.as_ref().unwrap());
|
||||||
Some(ref mut file_descriptor) =>
|
let mut stream_reader = BufReader::new(stream.try_clone().unwrap());
|
||||||
{
|
let mut stream_writer = BufWriter::new(stream.try_clone().unwrap());
|
||||||
let mut handshake = [0u8;BUFFER_SIZE];
|
|
||||||
let mut size:u64 = 0;
|
let mut size:u64 = 0;
|
||||||
match stream.read_exact(&mut handshake)
|
let mut handshake:Vec<u8> = Vec::new();
|
||||||
|
match stream_reader.read_until(b'\n',&mut handshake)
|
||||||
{
|
{
|
||||||
Ok(_) =>
|
Ok(_) =>
|
||||||
{
|
{
|
||||||
|
//read until and take
|
||||||
todo!();
|
todo!();
|
||||||
size = String::from_utf8(handshake.to_vec()).unwrap().parse().unwrap();
|
size = String::from_utf8(handshake.to_vec()).unwrap().parse().unwrap();
|
||||||
println!("Done: Handshake Recv -> {}", self.location);
|
println!("Done: Handshake Recv -> {}", self.location);
|
||||||
|
@ -219,12 +235,8 @@ impl FileInfo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
None =>
|
|
||||||
{
|
|
||||||
println!("Error: File None");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
enum Connection
|
enum Connection
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue