From 5aca67feb3ab9e25ee07ac56896921249d8879fe Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 22 Oct 2022 12:42:35 +0200 Subject: stuff --- client-native-gui/src/main.rs | 58 ++++++++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 14 deletions(-) (limited to 'client-native-gui/src') diff --git a/client-native-gui/src/main.rs b/client-native-gui/src/main.rs index e376d14..c95ac68 100644 --- a/client-native-gui/src/main.rs +++ b/client-native-gui/src/main.rs @@ -1,16 +1,17 @@ #![feature(box_syntax)] +use async_std::task::block_on; +use client_native_lib::{ + instance::Instance, peer::Peer, protocol::RelayMessage, Config, EventHandler, +}; +use eframe::{egui, epaint::ahash::HashMap}; +use egui::{Ui, Visuals}; use std::{ future::Future, ops::Deref, pin::Pin, sync::{Arc, RwLock}, }; - -use async_std::task::block_on; -use client_native_lib::{instance::Instance, peer::Peer, Config, EventHandler}; -use eframe::{egui, epaint::ahash::HashMap}; -use egui::{Ui, Visuals}; use tokio::task::{block_in_place, JoinHandle}; #[tokio::main] @@ -84,25 +85,29 @@ struct Ingame { impl Ingame { pub async fn new(config: Config) -> Self { let handler = Arc::new(Handler::new()); - Self { - instance: Instance::new(config, handler.clone()).await, - handler, + let instance = Instance::new(config, handler.clone()).await; + instance.spawn_ping().await; + { + let instance = instance.clone(); + tokio::spawn(instance.receive_loop()); } + Self { instance, handler } } pub fn ui(&self, ui: &mut Ui) { for (pid, peer) in self.handler.peers.read().unwrap().deref() { - ui.heading(format!("{}", pid)); + ui.collapsing(peer.display_name(), |ui| {}); } } } struct Handler { - peers: std::sync::RwLock>, + peers: RwLock>, } struct GuiPeer { peer: Arc, + username: Option, } impl Handler { @@ -113,15 +118,26 @@ impl Handler { } } +impl GuiPeer { + pub fn display_name(&self) -> String { + self.username + .clone() + .unwrap_or_else(|| format!("Unknown ({})", self.peer.id)) + } +} + impl EventHandler for Handler { fn peer_join( &self, peer: std::sync::Arc, ) -> client_native_lib::DynFut<()> { - self.peers - .write() - .unwrap() - .insert(peer.id, GuiPeer { peer: peer.clone() }); + self.peers.write().unwrap().insert( + peer.id, + GuiPeer { + peer: peer.clone(), + username: None, + }, + ); Box::pin(async move {}) } @@ -157,4 +173,18 @@ impl EventHandler for Handler { ) -> client_native_lib::DynFut<()> { Box::pin(async move {}) } + + fn on_relay( + &self, + peer: Arc, + message: &client_native_lib::protocol::RelayMessage, + ) -> client_native_lib::DynFut<()> { + let mut guard = self.peers.write().unwrap(); + let p = guard.get_mut(&peer.id).unwrap(); + match message.clone() { + RelayMessage::Identify { username } => p.username = Some(username), + _ => (), + }; + Box::pin(async move {}) + } } -- cgit v1.2.3-70-g09d2