Skip to content

Commit

Permalink
code shortening
Browse files Browse the repository at this point in the history
  • Loading branch information
marci1175 committed Dec 30, 2023
1 parent ea05fb2 commit 66e4f69
Show file tree
Hide file tree
Showing 5 changed files with 114 additions and 71 deletions.
30 changes: 30 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ hound = "3.5.1"
arg = "0.4.1"
rodio = {version = "0.17.3", features = ["wav", "mp3", "flac"]}
claxon = "0.4.3"
strum = {version = "0.25.0", features = ["derive"]}
strum_macros = "0.25.3"


[dependencies.windows-sys]
Expand Down
139 changes: 73 additions & 66 deletions src/app/backend.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,8 @@ use rand::rngs::ThreadRng;

use rodio::{OutputStream, OutputStreamHandle, Sink};
use std::collections::BTreeMap;

use std::io;
use std::io::{Read, Seek, SeekFrom};

use std::path::PathBuf;
use std::sync::atomic::AtomicBool;
use std::sync::{mpsc, Arc, Mutex};
Expand Down Expand Up @@ -604,17 +602,36 @@ pub struct ServerAudioReply {
pub file_name: String,
}

use strum::{EnumDiscriminants, EnumMessage};
use strum_macros::{EnumIter, EnumString};

//This is what server replies can be
#[derive(serde::Serialize, serde::Deserialize, Debug, Clone)]
#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, EnumDiscriminants)]
#[strum_discriminants(derive(EnumString, EnumMessage))]
pub enum ServerMessageType {
#[strum_discriminants(strum(message = "Upload"))]
Upload(ServerFileUpload),
#[strum_discriminants(strum(message = "Normal"))]
Normal(ServerNormalMessage),

//Used to send and index to client so it knows which index to ask for VERY IMPORTANT!!!!!!!!!
#[strum_discriminants(strum(message = "Image"))]
Image(ServerImageUpload),
#[strum_discriminants(strum(message = "Audio"))]
Audio(ServerAudioUpload),
}

// #[derive(Debug, EnumDiscriminants)]
// #[strum_discriminants(derive(EnumIter))]
// pub enum ServerMessageTypeR {
// Upload(ServerFileUpload),
// Normal(ServerNormalMessage),

// //Used to send and index to client so it knows which index to ask for VERY IMPORTANT!!!!!!!!!
// Image(ServerImageUpload),
// Audio(ServerAudioUpload),
// }

//This is one whole server msg (packet), which gets bundled when sending ServerMain
#[derive(serde::Serialize, serde::Deserialize, Debug, Clone)]
pub struct ServerOutput {
Expand All @@ -627,78 +644,68 @@ impl ServerOutput {
pub fn struct_into_string(&self) -> String {
serde_json::to_string(self).unwrap_or_default()
}
pub fn convert_audio_to_servermsg(normal_msg: ClientMessage, index: i32) -> ServerOutput {
ServerOutput {
replying_to: normal_msg.replying_to,
MessageType: ServerMessageType::Audio(ServerAudioUpload {
file_name: match normal_msg.MessageType {
ClientMessageType::ClientSyncMessage(_) => todo!(),
ClientMessageType::ClientFileUpload(upload) => upload.name.unwrap_or_default(),
ClientMessageType::ClientNormalMessage(_) => todo!(),
ClientMessageType::ClientFileRequestType(_) => todo!(),
},
index,
}),
Author: normal_msg.Author,
MessageDate: normal_msg.MessageDate,
}
}

pub fn convert_msg_to_servermsg(normal_msg: ClientMessage) -> ServerOutput {
//Convert a client output to a server output (ClientMessage -> ServerOutput), trim some useless info
ServerOutput {
replying_to: normal_msg.replying_to,
MessageType: ServerMessageType::Normal(ServerNormalMessage {
message: match normal_msg.MessageType {
ClientMessageType::ClientSyncMessage(_) => todo!(),
ClientMessageType::ClientFileUpload(_) => todo!(),
ClientMessageType::ClientNormalMessage(msg) => msg.message,
ClientMessageType::ClientFileRequestType(_) => todo!(),
},
}),
Author: normal_msg.Author,
MessageDate: normal_msg.MessageDate,
}
}
pub fn convert_picture_to_servermsg(normal_msg: ClientMessage, index: i32) -> ServerOutput {
//Convert a client output to a server output (ClientMessage -> ServerOutput), trim some useless info
ServerOutput {
replying_to: normal_msg.replying_to,
MessageType: ServerMessageType::Image(ServerImageUpload {
index: match normal_msg.MessageType {
ClientMessageType::ClientSyncMessage(_) => todo!(),
ClientMessageType::ClientFileUpload(_upload) => index,
ClientMessageType::ClientNormalMessage(_) => todo!(),
ClientMessageType::ClientFileRequestType(_) => todo!(),
},
}),
Author: normal_msg.Author,
MessageDate: normal_msg.MessageDate,
}
}
pub fn convert_upload_to_servermsg(normal_msg: ClientMessage, index: i32) -> ServerOutput {
//Convert a client output to a server output (ClientMessage -> ServerOutput), trim some useless info
pub fn convert_type_to_servermsg(
normal_msg: ClientMessage,
index: i32,
//Automaticly generated enum by strum
upload_type: ServerMessageTypeDiscriminants,
) -> ServerOutput {
ServerOutput {
replying_to: normal_msg.replying_to,
MessageType: ServerMessageType::Upload(ServerFileUpload {
file_name: match normal_msg.MessageType {
ClientMessageType::ClientSyncMessage(_) => todo!(),
ClientMessageType::ClientFileUpload(msg) => {
format!(
"{}.{}",
msg.name.unwrap_or_default(),
msg.extension.unwrap_or_default()
MessageType:
match normal_msg.MessageType {
ClientMessageType::ClientFileRequestType(_) => unimplemented!("Converting Sync packets isnt implemented, because they shouldnt be displayed to the client"),
ClientMessageType::ClientFileUpload(upload) => {
match upload_type {
ServerMessageTypeDiscriminants::Upload => {
ServerMessageType::Upload(
ServerFileUpload {
file_name: format!(
"{}.{}",
upload.name.unwrap_or_default(),
upload.extension.unwrap_or_default()
),
index: index,
}
)
},
ServerMessageTypeDiscriminants::Normal => unreachable!(),
ServerMessageTypeDiscriminants::Image => {
ServerMessageType::Image(
ServerImageUpload {
index: index,
}
)
},
ServerMessageTypeDiscriminants::Audio => {
ServerMessageType::Audio(
ServerAudioUpload {
index: index,
file_name: format!(
"{}.{}",
upload.name.unwrap_or_default(),
upload.extension.unwrap_or_default()
),
}
)
},
}
},
ClientMessageType::ClientNormalMessage(message) => {
ServerMessageType::Normal(
ServerNormalMessage {
message: message.message,
}
)
}
ClientMessageType::ClientNormalMessage(_) => todo!(),
ClientMessageType::ClientFileRequestType(_) => todo!(),
},
ClientMessageType::ClientSyncMessage(_) => unimplemented!("Converting Sync packets isnt implemented, because they shouldnt be displayed to the client"),
},
index,
}),
Author: normal_msg.Author,
MessageDate: normal_msg.MessageDate,
}
}

}

//Used to put all the messages into 1 big pack (Bundling All the ServerOutput-s), Main packet, this gets to all the clients
Expand Down
13 changes: 8 additions & 5 deletions src/app/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use std::{env, fs, io::Write, path::PathBuf};
use rand::Rng;
use std::sync::Mutex;
use tonic::{transport::Server, Request, Response, Status};

use super::backend::ServerMessageTypeDiscriminants::{Normal, Image, Audio, Upload};
/*
use std::{io, time::Duration};
use clap::Parser;
Expand Down Expand Up @@ -268,7 +268,7 @@ impl MessageService {
pub async fn NormalMessage(&self, req: ClientMessage) {
match self.messages.lock() {
Ok(mut ok) => {
ok.push(ServerOutput::convert_msg_to_servermsg(req));
ok.push(ServerOutput::convert_type_to_servermsg(req, -1, Normal));
}
Err(err) => {
println!("{err}")
Expand Down Expand Up @@ -350,9 +350,10 @@ impl MessageService {

match self.messages.lock() {
Ok(mut ok) => {
ok.push(ServerOutput::convert_upload_to_servermsg(
ok.push(ServerOutput::convert_type_to_servermsg(
request,
self.original_file_paths.lock().unwrap().len() as i32 - 1,
Upload
));
}
Err(err) => println!("{err}"),
Expand Down Expand Up @@ -397,9 +398,10 @@ impl MessageService {

match self.messages.try_lock() {
Ok(mut ok) => {
ok.push(ServerOutput::convert_picture_to_servermsg(
ok.push(ServerOutput::convert_type_to_servermsg(
req.clone(),
image_path_lenght as i32,
Image
));
}
Err(err) => println!("{err}"),
Expand Down Expand Up @@ -441,9 +443,10 @@ impl MessageService {

match self.messages.try_lock() {
Ok(mut ok) => {
ok.push(ServerOutput::convert_audio_to_servermsg(
ok.push(ServerOutput::convert_type_to_servermsg(
req.clone(),
audio_paths_lenght as i32,
Audio,
));
}
Err(err) => println!("{err}"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ use std::sync::mpsc;
use crate::app::backend::{ClientMessage, TemplateApp};
use crate::app::client::{self};
use crate::app::ui::client_ui::client_actions::audio_recording::audio_recroding;
use crate::app::ui::client_ui::message_instances;

impl TemplateApp {
pub fn message_tray(
Expand Down

0 comments on commit 66e4f69

Please sign in to comment.