aboutsummaryrefslogtreecommitdiff
path: root/client-native-gui/src
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2022-10-22 12:42:35 +0200
committermetamuffin <metamuffin@disroot.org>2022-10-22 12:42:35 +0200
commit5aca67feb3ab9e25ee07ac56896921249d8879fe (patch)
tree6c9f316a4392cfd27ab7167ef99cece1f6255ad9 /client-native-gui/src
parent23c7be33dbb46ce35d53f94a8c6e48aabb7e983c (diff)
downloadkeks-meet-5aca67feb3ab9e25ee07ac56896921249d8879fe.tar
keks-meet-5aca67feb3ab9e25ee07ac56896921249d8879fe.tar.bz2
keks-meet-5aca67feb3ab9e25ee07ac56896921249d8879fe.tar.zst
stuff
Diffstat (limited to 'client-native-gui/src')
-rw-r--r--client-native-gui/src/main.rs58
1 files changed, 44 insertions, 14 deletions
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<HashMap<usize, GuiPeer>>,
+ peers: RwLock<HashMap<usize, GuiPeer>>,
}
struct GuiPeer {
peer: Arc<Peer>,
+ username: Option<String>,
}
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::peer::Peer>,
) -> 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<Peer>,
+ 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 {})
+ }
}