@@ -328,10 +328,15 @@ async fn broker(mut events: Receiver<Event>) -> Result<()> {
328
328
}
329
329
}
330
330
}
331
- Event::NewPeer { name, stream} => {
332
- let (client_sender, client_receiver) = mpsc::unbounded();
333
- peers.insert(name.clone(), client_sender); <4>
334
- spawn_and_log_error(client_writer(client_receiver, stream)); <5>
331
+ Event::NewPeer { name, stream } => {
332
+ match peers.entry(name) {
333
+ Entry::Occupied(..) => (),
334
+ Entry::Vacant(entry) => {
335
+ let (client_sender, client_receiver) = mpsc::unbounded();
336
+ entry.insert(client_sender); <4>
337
+ spawn_and_log_error(client_writer(client_receiver, stream)); <5>
338
+ }
339
+ }
335
340
}
336
341
}
337
342
}
@@ -354,10 +359,16 @@ At this point, we only need to start broker to get a fully-functioning (in the h
354
359
----
355
360
#![feature(async_await)]
356
361
357
- use std::{net::ToSocketAddrs, sync::Arc, collections::HashMap};
362
+ use std::{
363
+ net::ToSocketAddrs,
364
+ sync::Arc,
365
+ collections::hash_map::{HashMap, Entry},
366
+ };
358
367
359
- use futures::channel::mpsc;
360
- use futures::SinkExt;
368
+ use futures::{
369
+ channel::mpsc,
370
+ SinkExt,
371
+ };
361
372
362
373
use async_std::{
363
374
io::BufReader,
@@ -456,9 +467,14 @@ async fn broker(mut events: Receiver<Event>) -> Result<()> {
456
467
}
457
468
}
458
469
Event::NewPeer { name, stream} => {
459
- let (client_sender, client_receiver) = mpsc::unbounded();
460
- peers.insert(name.clone(), client_sender);
461
- spawn_and_log_error(client_writer(client_receiver, stream));
470
+ match peers.entry(name) {
471
+ Entry::Occupied(..) => (),
472
+ Entry::Vacant(entry) => {
473
+ let (client_sender, client_receiver) = mpsc::unbounded();
474
+ entry.insert(client_sender); <4>
475
+ spawn_and_log_error(client_writer(client_receiver, stream)); <5>
476
+ }
477
+ }
462
478
}
463
479
}
464
480
}
@@ -532,10 +548,15 @@ async fn broker(mut events: Receiver<Event>) -> Result<()> {
532
548
}
533
549
}
534
550
Event::NewPeer { name, stream} => {
535
- let (client_sender, client_receiver) = mpsc::unbounded();
536
- peers.insert(name.clone(), client_sender);
537
- let handle = spawn_and_log_error(client_writer(client_receiver, stream));
538
- writers.push(handle);
551
+ match peers.entry(name) {
552
+ Entry::Occupied(..) => (),
553
+ Entry::Vacant(entry) => {
554
+ let (client_sender, client_receiver) = mpsc::unbounded();
555
+ entry.insert(client_sender);
556
+ let handle = spawn_and_log_error(client_writer(client_receiver, stream));
557
+ writers.push(handle); <4>
558
+ }
559
+ }
539
560
}
540
561
}
541
562
}
0 commit comments