Skip to content

Commit 8270390

Browse files
committed
listener and sending support
1 parent 0b5486f commit 8270390

File tree

5 files changed

+63
-9
lines changed

5 files changed

+63
-9
lines changed

src/cli.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ pub struct Args {
1313
/// Node's role
1414
#[arg(short, long, default_value_t = Role::Sender)]
1515
pub role: Role,
16+
17+
/// Node's address
18+
#[arg(short, long, default_value_t = String::from("127.0.0.1:8000"))]
19+
pub address: String,
1620
}
1721

1822
#[derive(Clone, Debug, ValueEnum)]

src/comms/message.rs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,27 @@
1-
#[derive(Debug)]
1+
use std::fmt::Display;
2+
3+
use serde::Serialize;
4+
5+
#[derive(Debug, Serialize)]
26
pub enum Message {
37
RememeberMe,
8+
Comms(String),
9+
}
10+
11+
impl From<String> for Message {
12+
fn from(s: String) -> Self {
13+
match s.as_str() {
14+
"RememeberMe" => Message::RememeberMe,
15+
s => Message::Comms(s.to_owned()),
16+
}
17+
}
18+
}
19+
20+
impl Display for Message {
21+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
22+
match self {
23+
Message::RememeberMe => write!(f, "RememeberMe"),
24+
Message::Comms(s) => write!(f, "{s}"),
25+
}
26+
}
427
}

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
pub mod cli;
22
pub mod comms;
3+
pub mod storage;
34

45
pub mod tracing {
56
use tracing_subscriber::{EnvFilter, layer::SubscriberExt as _};

src/main.rs

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
use std::{
2-
io::Read,
3-
net::{Ipv4Addr, SocketAddrV4, TcpListener},
2+
io::{self, Read, Write as _},
3+
net::{Ipv4Addr, SocketAddrV4, TcpListener, TcpStream},
44
};
55

66
use clap::Parser as _;
7-
use peer_node::cli::Args;
7+
use peer_node::{
8+
cli::{Args, Role},
9+
comms::message::Message,
10+
};
811

912
#[tokio::main]
1013
async fn main() -> Result<(), std::io::Error> {
@@ -17,12 +20,35 @@ async fn main() -> Result<(), std::io::Error> {
1720
tracing::info!("Node address: {}", address);
1821
tracing::info!("A {}", args.role);
1922

20-
loop {
21-
for mut incoming_stream in listerner.incoming().flatten() {
22-
let mut msg = [0; 16];
23-
let _byte_count = incoming_stream.read(&mut msg)?;
23+
match args.role {
24+
Role::Receiver => loop {
25+
for mut incoming_stream in listerner.incoming().flatten() {
26+
let mut msg = [0; 5];
27+
let _byte_count = incoming_stream.read(&mut msg)?;
28+
29+
let msg: Message = String::from_utf8_lossy(&msg).trim().to_string().into();
30+
31+
// If it's a rememberMe, store to some DHT and if Comms: Act as instructed
32+
33+
tracing::info!("Message received: {msg:?}");
34+
}
35+
},
36+
Role::Sender => {
37+
let mut msg = String::new();
38+
io::stdin().read_line(&mut msg)?;
39+
40+
tracing::info!("Sending: {msg}");
41+
42+
let mut outgoing_stream = TcpStream::connect(args.address)?;
43+
44+
let msg: Message = msg.into();
45+
46+
outgoing_stream.write_all(msg.to_string().as_bytes())?;
47+
48+
// Wait for the message to be sent before exiting
49+
outgoing_stream.flush()?;
2450

25-
tracing::info!("Message received: {:?}", msg);
51+
Ok(())
2652
}
2753
}
2854
}

src/storage/mod.rs

Whitespace-only changes.

0 commit comments

Comments
 (0)