|
@@ -1,4 +1,4 @@
|
|
|
-use mgen::{log, parse_identifier, SerializedMessage};
|
|
|
+use mgen::{log, parse_identifier, updater::Updater, SerializedMessage};
|
|
|
use std::collections::HashMap;
|
|
|
use std::error::Error;
|
|
|
use std::result::Result;
|
|
@@ -24,8 +24,8 @@ async fn main() -> Result<(), Box<dyn Error>> {
|
|
|
ID,
|
|
|
mpsc::UnboundedSender<Arc<SerializedMessage>>,
|
|
|
>::new()));
|
|
|
- // FIXME: this should probably be a Notify + Mutex
|
|
|
- let mut writer_db = HashMap::<ID, mpsc::Sender<(OwnedWriteHalf, watch::Sender<bool>)>>::new();
|
|
|
+
|
|
|
+ let mut writer_db = HashMap::<ID, Updater<(OwnedWriteHalf, watch::Sender<bool>)>>::new();
|
|
|
|
|
|
loop {
|
|
|
let (socket, _) = listener.accept().await?;
|
|
@@ -41,7 +41,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
|
|
|
spawn_message_receiver(rd, snd_db.clone(), watch_rcv);
|
|
|
|
|
|
// give the writer thread the new write half of the socket and watch
|
|
|
- socket_updater.send((wr, watch_snd)).await?;
|
|
|
+ socket_updater.send((wr, watch_snd)).await;
|
|
|
} else {
|
|
|
// newly-registered client
|
|
|
log!("New client");
|
|
@@ -59,8 +59,8 @@ async fn main() -> Result<(), Box<dyn Error>> {
|
|
|
let (watch_snd, watch_rcv) = watch::channel(false);
|
|
|
|
|
|
// socket updater, used to give the sender thread a new socket and watch
|
|
|
- let (socket_updater_snd, socket_updater_rcv) = mpsc::channel(8);
|
|
|
- socket_updater_snd.send((wr, watch_snd)).await?;
|
|
|
+ let (socket_updater_snd, socket_updater_rcv) = Updater::channel();
|
|
|
+ socket_updater_snd.send((wr, watch_snd)).await;
|
|
|
|
|
|
writer_db.insert(id.clone(), socket_updater_snd);
|
|
|
|
|
@@ -147,7 +147,7 @@ async fn get_messages(
|
|
|
/// and sending them out on the associated socket.
|
|
|
async fn send_messages(
|
|
|
mut msg_rcv: mpsc::UnboundedReceiver<Arc<SerializedMessage>>,
|
|
|
- mut socket_updater: mpsc::Receiver<(OwnedWriteHalf, watch::Sender<bool>)>,
|
|
|
+ mut socket_updater: Updater<(OwnedWriteHalf, watch::Sender<bool>)>,
|
|
|
) {
|
|
|
let (mut current_socket, mut current_watch) =
|
|
|
socket_updater.recv().await.expect("socket updater closed");
|