Skip to content

Commit c26c5e2

Browse files
committed
fix: added some explaination on the readme
1 parent 56b8316 commit c26c5e2

3 files changed

Lines changed: 126 additions & 47 deletions

File tree

README.md

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,78 @@
1-
# common
1+
# Common
2+
This library contains all the code that is common between each component (clients and servers).
3+
4+
## How to Instantiate a generic Node (client or server)
5+
It follows an example implementation of a generic Node (in this case a Server):
6+
7+
```rust
8+
pub struct Server {
9+
routing_handler: RoutingHandler,
10+
received_messages: Vec<(String, String)>,
11+
communication_server: Vec<NodeId>,
12+
controller_recv: Receiver<Box<dyn Any>>,
13+
packet_recv: Receiver<Packet>,
14+
assembler: FragmentAssembler,
15+
...
16+
}
17+
18+
impl Server {
19+
#[must_use]
20+
pub fn new(
21+
id: NodeId,
22+
neighbors: HashMap<NodeId, Sender<Packet>>,
23+
packet_recv: Receiver<Packet>,
24+
controller_recv: Receiver<Box<dyn Any>>,
25+
controller_send: Sender<Box<dyn Any>>,
26+
...
27+
) -> Self {
28+
let routing_handler = RoutingHandler::new(id, NodeType::Client, neighbors, controller_send);
29+
30+
Self {
31+
routing_handler,
32+
received_messages: vec![],
33+
communication_server: vec![],
34+
controller_recv,
35+
packet_recv,
36+
assembler: FragmentAssembler::default()
37+
...
38+
}
39+
}
40+
}
41+
42+
43+
impl Processor for Server {
44+
fn controller_recv(&self) -> &Receiver<Box<dyn Any>> {
45+
&self.controller_recv
46+
}
47+
48+
fn packet_recv(&self) -> &Receiver<Packet> {
49+
&self.packet_recv
50+
}
51+
52+
fn handle_command(&mut self, cmd: Box<dyn Any>) {
53+
if let Ok(cmd) = cmd.downcast::<ServerCommand>() {
54+
match *cmd {
55+
// match on server command
56+
}
57+
}
58+
59+
}
60+
61+
fn assembler(&mut self) -> &mut FragmentAssembler {
62+
&mut self.assembler
63+
}
64+
65+
fn routing_header(&mut self) -> &mut RoutingHandler {
66+
&mut self.routing_handler
67+
}
68+
69+
fn handle_msg(&mut self, msg: Vec<u8>) {
70+
71+
if let Ok(msg) = serde_json::from_slice::<ClientRequest>(&msg) {
72+
match msg {
73+
// match on ClientRequest
74+
}
75+
}
76+
}
77+
}
78+
```

src/routing_handler.rs

Lines changed: 47 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -266,12 +266,7 @@ impl RoutingHandler {
266266
NackType::UnexpectedRecipient(_) => todo!(),
267267
}
268268

269-
if let Some(packet) =
270-
self.buffer
271-
.get_fragment_by_id(session_id, nack.fragment_index, source_id)
272-
{
273-
self.try_send(packet)?;
274-
}
269+
self.retry_send(session_id, nack.fragment_index, source_id)?;
275270

276271
Ok(())
277272
}
@@ -341,7 +336,6 @@ impl RoutingHandler {
341336
destination: NodeId,
342337
session_id: Option<u64>,
343338
) -> Result<(), NetworkError> {
344-
// devo inviare con lo stesso session_id del packetto o con il mio??????????
345339
let chunks: Vec<&[u8]> = message.chunks(128).collect();
346340
let total_n_fragments = chunks.len();
347341

@@ -375,7 +369,11 @@ impl RoutingHandler {
375369

376370
self.try_send(packet.clone())?;
377371
let session_id = packet.session_id;
378-
self.buffer.insert(packet, session_id, self.id);
372+
self.buffer.insert(
373+
packet,
374+
session_id,
375+
self.id
376+
);
379377
}
380378

381379
Ok(())
@@ -452,25 +450,29 @@ mod tests {
452450
assert!(!handler.network_view.nodes[0].get_adjacents().contains(&2));
453451
}
454452

455-
// #[test]
456-
// fn test_start_flood() {
457-
// let (sender, receiver) = unbounded();
458-
// let mut handler = RoutingHandler::new(1, NodeType::Client, HashMap::new(), sender);
459-
//
460-
// let (neighbor_sender, neighbor_receiver) = unbounded();
461-
// handler.add_neighbor(2, neighbor_sender);
462-
//
463-
// handler.start_flood().unwrap();
464-
//
465-
// let packet = receiver.try_recv().unwrap();
466-
// assert!(matches!(packet.try_into().unwrap(), NodeEvent::FloodStarted(_, _)));
467-
//
468-
// let neighbor_packet = neighbor_receiver.try_recv().unwrap();
469-
// assert!(matches!(
470-
// neighbor_packet.pack_type,
471-
// PacketType::FloodRequest(_)
472-
// ));
473-
// }
453+
#[test]
454+
fn test_start_flood() {
455+
let (sender, receiver) = unbounded();
456+
let mut handler = RoutingHandler::new(1, NodeType::Client, HashMap::new(), sender);
457+
458+
let (neighbor_sender, neighbor_receiver) = unbounded();
459+
handler.add_neighbor(2, neighbor_sender);
460+
461+
handler.start_flood().unwrap();
462+
463+
let packet = receiver.try_recv().unwrap();
464+
if let Ok(cmd) = packet.downcast::<NodeEvent>() {
465+
466+
assert!(matches!(*cmd, NodeEvent::FloodStarted(_, _)));
467+
468+
}
469+
470+
let neighbor_packet = neighbor_receiver.try_recv().unwrap();
471+
assert!(matches!(
472+
neighbor_packet.pack_type,
473+
PacketType::FloodRequest(_)
474+
));
475+
}
474476

475477
#[test]
476478
fn test_handle_flood_response() {
@@ -505,22 +507,22 @@ mod tests {
505507
assert!(matches!(packet.pack_type, PacketType::MsgFragment(_)));
506508
}
507509

508-
// #[test]
509-
// fn test_handle_ack() {
510-
// let (sender, _receiver) = unbounded();
511-
// let mut handler = RoutingHandler::new(1, NodeType::Client, HashMap::new(), sender);
512-
//
513-
// let (neighbor_sender, _neighbor_receiver) = unbounded();
514-
// handler.add_neighbor(2, neighbor_sender);
515-
//
516-
// let message = b"Hello, world!".to_vec();
517-
// handler.send_message(&message, 2).unwrap();
518-
//
519-
// let ack = Ack {
520-
// fragment_index: 0,
521-
// };
522-
//
523-
// handler.handle_ack(&ack, 1, 2);
524-
//
525-
// }
510+
#[test]
511+
fn test_handle_ack() {
512+
let (sender, _receiver) = unbounded();
513+
let mut handler = RoutingHandler::new(1, NodeType::Client, HashMap::new(), sender);
514+
515+
let (neighbor_sender, _neighbor_receiver) = unbounded();
516+
handler.add_neighbor(2, neighbor_sender);
517+
518+
let message = b"Hello, world!".to_vec();
519+
handler.send_message(&message, 2, None).unwrap();
520+
521+
let ack = Ack {
522+
fragment_index: 0,
523+
};
524+
525+
handler.handle_ack(&ack, 1, 2);
526+
527+
}
526528
}

src/types.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,5 +85,5 @@ pub enum ClientType {
8585
#[derive(Debug, Clone, PartialEq)]
8686
pub enum ServerType {
8787
ChatServer,
88-
WebServer,
88+
MediaServer,
8989
}

0 commit comments

Comments
 (0)