Added message + listen commands

This commit is contained in:
2026-05-31 14:15:59 -07:00
parent 0f36ee454e
commit bcd9f1992d
3 changed files with 41 additions and 7 deletions
Generated
+1 -1
View File
@@ -510,7 +510,7 @@ dependencies = [
[[package]] [[package]]
name = "fedichat" name = "fedichat"
version = "0.1.0" version = "0.1.0"
source = "git+https://git.firechicken.net/fedichat/fedichat-lib#3edf74d890232d09737ac9c343ebb24331fe7c68" source = "git+https://git.firechicken.net/fedichat/fedichat-lib#27cff2ced9f1879ddea03d2db3a0c5c5252b8cee"
dependencies = [ dependencies = [
"ed25519", "ed25519",
"rmp-serde", "rmp-serde",
+12 -2
View File
@@ -30,7 +30,7 @@ pub struct Args {
pub verbose: u8, pub verbose: u8,
} }
#[derive(Subcommand,Debug)] #[derive(Subcommand,Debug,Clone)]
pub enum Command { pub enum Command {
CreateUser { CreateUser {
#[clap(short, long)] #[clap(short, long)]
@@ -50,6 +50,12 @@ pub enum Command {
#[clap(short, long, value_parser=Room::from_str)] #[clap(short, long, value_parser=Room::from_str)]
room: Room, room: Room,
}, },
GetMessages {
#[clap(short, long, default_value_t = 100)]
count: u64,
#[clap(value_parser=Room::from_str)]
room: Room
},
Join { Join {
#[clap(value_parser=Room::from_str)] #[clap(value_parser=Room::from_str)]
room: Room, room: Room,
@@ -63,7 +69,7 @@ pub enum Command {
room: Room, room: Room,
}, },
Listen { Listen {
#[clap(short, long, value_parser=Room::from_str)] #[clap(value_parser=Room::from_str)]
room: Room, room: Room,
}, },
Upload { Upload {
@@ -123,6 +129,10 @@ impl Command {
Listen { Listen {
room, room,
} => (ClientMessage::SubscribeMessages{room_id: room.get_coord()},room.get_server()), } => (ClientMessage::SubscribeMessages{room_id: room.get_coord()},room.get_server()),
GetMessages {
room,
count
} => (ClientMessage::FetchMessages{room_id: room.get_coord(), count, end: fedichat::message::MessageId(i64::MAX as u64)},room.get_server()),
Join { Join {
room, room,
} => (ClientMessage::RoomJoin{room_id: room.get_coord()},room.get_server()), } => (ClientMessage::RoomJoin{room_id: room.get_coord()},room.get_server()),
+28 -4
View File
@@ -11,7 +11,10 @@ use hickory_resolver::Resolver;
use std::net::{IpAddr,SocketAddr}; use std::net::{IpAddr,SocketAddr};
use std::fs::File; use std::fs::File;
use std::io::Write; use std::io::Write;
use std::time::Duration;
use std::sync::Arc;
use quinn::Endpoint; use quinn::Endpoint;
use quinn::TransportConfig;
use rmp_serde::encode::Serializer; use rmp_serde::encode::Serializer;
use serde::Serialize; use serde::Serialize;
use tracing::{instrument,debug,Level}; use tracing::{instrument,debug,Level};
@@ -74,7 +77,10 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
.next().expect("DNS lookup of server failed"); .next().expect("DNS lookup of server failed");
debug!("Found address {response}"); debug!("Found address {response}");
// create connection // create connection
let client_config = quinn::ClientConfig::try_with_platform_verifier().unwrap(); let mut transport_config: TransportConfig = TransportConfig::default();
transport_config.keep_alive_interval(Some(Duration::from_secs(1)));
let mut client_config = quinn::ClientConfig::try_with_platform_verifier().unwrap();
client_config.transport_config(Arc::new(transport_config));
let endpoint = Endpoint::client(CLIENT_ADDR)?; let endpoint = Endpoint::client(CLIENT_ADDR)?;
let connection = endpoint.connect_with( let connection = endpoint.connect_with(
client_config, client_config,
@@ -89,6 +95,8 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
let key = config.get_key(&target_server,&cli.username)?; let key = config.get_key(&target_server,&cli.username)?;
let command = cli.command.clone();
// send messages, each time waiting for a response // send messages, each time waiting for a response
let messages = cli.command.generate_messages(cli.username.clone(),token,key)?; let messages = cli.command.generate_messages(cli.username.clone(),token,key)?;
@@ -126,10 +134,26 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
}, },
_ => {} _ => {}
} }
} }
println!("{}",format_response(response));
if let Command::Listen{..} = command {
loop {
debug!("Receiving post");
let mut recv = connection.accept_uni().await?;
debug!("Connection established");
let received = recv.read_to_end(1000 * 1000).await?;
debug!("Message read");
debug!("BYTES: {:?}",received);
response = rmp_serde::from_slice(&received)?;
debug!("Message processed");
println!("{}",format_response(response));
}
} else {
println!("{}",format_response(response));
}
// On listen specifically we will stay connected // On listen specifically we will stay connected