aboutsummaryrefslogtreecommitdiff
path: root/client-native-rift
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-03-18 18:29:20 +0100
committermetamuffin <metamuffin@disroot.org>2024-03-18 18:29:20 +0100
commit5370e79e69771976e27079f4a9fffe807efabd83 (patch)
tree895e8ab93a416e95143dfb57b448b76783353da4 /client-native-rift
parent7d410d53274fdd6840261c286bc2785222256436 (diff)
downloadkeks-meet-5370e79e69771976e27079f4a9fffe807efabd83.tar
keks-meet-5370e79e69771976e27079f4a9fffe807efabd83.tar.bz2
keks-meet-5370e79e69771976e27079f4a9fffe807efabd83.tar.zst
rift: chat
Diffstat (limited to 'client-native-rift')
-rw-r--r--client-native-rift/Cargo.toml2
-rw-r--r--client-native-rift/src/main.rs43
2 files changed, 36 insertions, 9 deletions
diff --git a/client-native-rift/Cargo.toml b/client-native-rift/Cargo.toml
index 9f79cd8..cc6b92d 100644
--- a/client-native-rift/Cargo.toml
+++ b/client-native-rift/Cargo.toml
@@ -8,7 +8,7 @@ libkeks = { path = "../client-native-lib" }
clap = { version = "4.5.3", features = ["derive"] }
pretty_env_logger = "0.5.0"
-log = "0.4"
+log = { version = "0.4", features = ["kv"] }
tokio = { version = "1.36", features = ["full"] }
bytes = "1.5.0"
diff --git a/client-native-rift/src/main.rs b/client-native-rift/src/main.rs
index 40b9aab..f3db429 100644
--- a/client-native-rift/src/main.rs
+++ b/client-native-rift/src/main.rs
@@ -13,11 +13,11 @@ use file::{DownloadHandler, FileSender};
use libkeks::{
instance::Instance,
peer::{Peer, TransportChannel},
- protocol::ProvideInfo,
+ protocol::{ChatMesssage, ProvideInfo, RelayMessage},
webrtc::data_channel::RTCDataChannel,
Config, DynFut, EventHandler,
};
-use log::{error, info, warn};
+use log::{error, info, trace, warn};
use port::{ForwardHandler, PortExposer};
use rustyline::{error::ReadlineError, DefaultEditor};
use std::{
@@ -31,6 +31,7 @@ fn main() {
pretty_env_logger::formatted_builder()
.filter_module("rift", log::LevelFilter::Info)
.filter_module("libkeks", log::LevelFilter::Info)
+ .filter_module("chat", log::LevelFilter::Trace)
.parse_env("LOG")
.init();
tokio::runtime::Builder::new_multi_thread()
@@ -71,6 +72,8 @@ pub enum Command {
Expose { port: u16, id: Option<String> },
/// Forward TCP connections to local port to another peer.
Forward { id: String, port: Option<u16> },
+ /// Send a message in the room chat.
+ Chat { message: String },
}
struct State {
@@ -128,12 +131,15 @@ async fn run() -> anyhow::Result<()> {
let mut rl = DefaultEditor::new()?;
loop {
match rl.readline("> ") {
- Ok(line) => match Command::try_parse_from(shlex::split(&line).unwrap()) {
- Ok(command) => match dispatch_command(&inst, &state, command).await {
- Ok(()) => (),
- Err(err) => error!("{err}"),
+ Ok(line) => match shlex::split(&line) {
+ Some(tokens) => match Command::try_parse_from(tokens) {
+ Ok(command) => match dispatch_command(&inst, &state, command).await {
+ Ok(()) => (),
+ Err(err) => error!("{err}"),
+ },
+ Err(err) => err.print().unwrap(),
},
- Err(err) => err.print().unwrap(),
+ None => warn!("fix your quoting"),
},
Err(ReadlineError::Eof) => {
info!("exit");
@@ -232,6 +238,10 @@ async fn dispatch_command(
}
});
}
+ Command::Chat { message } => {
+ inst.send_relay(None, RelayMessage::Chat(ChatMesssage::Text(message)))
+ .await;
+ }
}
Ok(())
}
@@ -273,7 +283,24 @@ impl EventHandler for Handler {
fn resource_removed(&self, _peer: Arc<Peer>, _id: String) -> DynFut<()> {
Box::pin(async move {})
}
-
+ fn on_relay(&self, peer: Arc<Peer>, message: &RelayMessage) -> DynFut<()> {
+ let message = message.to_owned();
+ Box::pin(async move {
+ match message {
+ RelayMessage::Chat(ChatMesssage::Text(message)) => {
+ let username = peer
+ .username
+ .read()
+ .await
+ .clone()
+ .unwrap_or("<unknown>".to_string());
+ let path = format!("chat::{username}");
+ trace!(target: &path, "{message}");
+ }
+ _ => (),
+ }
+ })
+ }
fn resource_connected(
&self,
_peer: Arc<Peer>,