Skip to content

Commit

Permalink
Client will keep a connection after sending a message. Client ids
Browse files Browse the repository at this point in the history
  • Loading branch information
zazedd committed Feb 7, 2024
1 parent 69cf802 commit 8d3a890
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 33 deletions.
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ tungstenite = "0.21.0"
env_logger = "0.11.0"
url = "2.5.0"
serial_test = "3.0.0"
x25519-dalek = "2.0.1"

[[bin]]
name = "server"
Expand Down
55 changes: 37 additions & 18 deletions src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use base64::prelude::*;
use strange_cipher::common;

enum ClientState {
Waiting,
Syncing,
Encrypting,
Encrypted(String),
Expand Down Expand Up @@ -39,33 +40,51 @@ pub fn main() {
}

let seed = (-10.0, -7.0, 35.0);
let sigma = 25.0;
let rho = 2.0;
let sigma = 10.0;
let rho = 28.0;
let beta = 8.0 / 3.0;
let h = 0.01;
let mut stream_state = ClientState::Syncing;
let mut stream_state = ClientState::Waiting;
let mut key_stream = Vec::new();

let mut state = common::lorenz_attractor(seed.0, None, seed.1, seed.2, sigma, rho, beta, h);

let mut input = String::new();
print!("Type a message you want to encrypt: ");
io::stdout().flush().unwrap();
io::stdin().read_line(&mut input).unwrap();
let input = input.trim().to_string();

common::send_request(&mut socket, "Sync Request", 1);
common::receive_msg(&mut socket);

match socket.get_mut() {
tungstenite::stream::MaybeTlsStream::Plain(stream) => stream.set_nonblocking(true),
_ => unimplemented!(),
}
.expect("Could not make socket non-blocking");

loop {
match stream_state {
ClientState::Waiting => {
match socket.get_mut() {
tungstenite::stream::MaybeTlsStream::Plain(stream) => {
stream.set_nonblocking(false)
}
_ => unimplemented!(),
}
.expect("Could not make socket non-blocking");

print!("Type a message you want to encrypt (Empty to Cancel): ");
input.clear();
io::stdout().flush().unwrap();
io::stdin().read_line(&mut input).unwrap();
let input = input.trim().to_string();

if input == "" {
common::send_request(&mut socket, "Cancel Request", 0);
break;
}

common::send_request(&mut socket, "Sync Request", 1);
common::receive_msg(&mut socket);
stream_state = ClientState::Syncing;
}
ClientState::Syncing => {
match socket.get_mut() {
tungstenite::stream::MaybeTlsStream::Plain(stream) => {
stream.set_nonblocking(true)
}
_ => unimplemented!(),
}
.expect("Could not make socket non-blocking");

state =
common::lorenz_attractor(state.0, None, state.1, state.2, sigma, rho, beta, h);
socket
Expand Down Expand Up @@ -118,7 +137,7 @@ pub fn main() {
.expect("Could not send byte")
});

break;
stream_state = ClientState::Waiting;
}
}
}
Expand Down
38 changes: 23 additions & 15 deletions src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ fn main() {
let server = TcpListener::bind("127.0.0.1:3012").unwrap();
println!("Server Started");

for stream in server.incoming() {
for (i, stream) in server.incoming().enumerate() {
spawn(move || {
let callback = |req: &Request, response: Response| {
println!("New Client connected");
Expand All @@ -63,8 +63,8 @@ fn main() {
.expect("Couldn't make socket non-blocking");

let mut seed = (0.0, 1.0, 2.0);
let sigma = 25.0;
let rho = 2.0;
let sigma = 10.0;
let rho = 28.0;
let beta = 8.0 / 3.0;
let h = 0.01;
let mut last_y = 0.;
Expand All @@ -81,16 +81,24 @@ fn main() {
);
seed = (new_x, new_y, new_z);

if let Some(Message::Binary(v)) = common::read_non_blocking(&mut websocket)
{
if v.as_slice() == [1] {
time = SystemTime::now();
println!("Received: Sync Request");
websocket
.send(Message::Text("Sync Request approved".to_string()))
.unwrap();
stream_state = ServerState::Syncing;
}
match common::read_non_blocking(&mut websocket) {
Some(Message::Binary(v)) => match v.as_slice() {
[1] => {
time = SystemTime::now();
println!("Received: Sync Request");
websocket
.send(Message::Text("Sync Request approved".to_string()))
.unwrap();
stream_state = ServerState::Syncing;
}
[0] => {
println!("Received: Cancel Request");
println!("Client Number {} Left", i);
break;
}
_ => panic!("Invalid Request Received"),
},
_ => (),
}
}
ServerState::Syncing => {
Expand Down Expand Up @@ -202,9 +210,9 @@ fn main() {
}
}
ServerState::Decrypted(ref plaintext) => {
println!("Decoded message: {}", plaintext);
println!("Decoded message from client {}: {}", i, plaintext.trim());
println!("Took: {}ms", time.elapsed().unwrap().as_millis());
break;
stream_state = ServerState::Unsynced;
}
}
}
Expand Down

0 comments on commit 8d3a890

Please sign in to comment.