Skip to content

Commit

Permalink
New messaging protocol
Browse files Browse the repository at this point in the history
  • Loading branch information
marci1175 committed Dec 3, 2023
1 parent 23ac514 commit f22f22f
Show file tree
Hide file tree
Showing 15 changed files with 659 additions and 589 deletions.
1 change: 0 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ device_query = "1.1.3"
rand = "0.8.5"
unicode_names2 = "1.2.0"


[dependencies.windows-sys]
features = [
"Win32_Foundation",
Expand Down
41 changes: 1 addition & 40 deletions proto/messages.proto
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,7 @@ package messages;

service Message {

rpc SendMessage (MessageRequest) returns (MessageResponse);

rpc SyncMessage (MessageSync) returns (MessageResponse);

rpc ReciveFile (FileSend) returns (FileStatus);

rpc ServeFile (FileRequest) returns (FileResponse);
rpc MessageMain (MessageRequest) returns (MessageResponse);

}

Expand All @@ -18,41 +12,8 @@ message MessageRequest {
string message = 1;
}

//empty request, for syncing
message MessageSync {
string password = 1;
}

//outgoing
message MessageResponse {
string message = 1;
}

// FILE IN

//ingoing file
message FileSend {
bytes file = 1;
string name = 2;
string passw = 3;
string author = 4;
}

//sent file status
message FileStatus {
int32 error = 1;
}

// FILE OUT

//request stored file
message FileResponse {
bytes file = 1;
string name = 2;
}

//ask for indexed file
message FileRequest {
int32 index = 1;
}

3 changes: 1 addition & 2 deletions src/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ use self::account_manager::{
append_to_file, decrypt_lines_from_vec, delete_line_from_file, read_from_file,
};

use self::backend::{FileUpload, Message};
use self::input::keymap;

impl eframe::App for backend::TemplateApp {
Expand All @@ -39,7 +38,7 @@ impl eframe::App for backend::TemplateApp {

fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
let input_keys = keymap(self.keymap.clone());

/*
:: custom font ::
Expand Down
26 changes: 12 additions & 14 deletions src/app/account_manager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ use std::string::FromUtf8Error;

use argon2::{self, Config, Variant, Version};

use super::client::messages::FileResponse;

pub fn encrypt_aes256(string_to_be_encrypted: String) -> aes_gcm::aead::Result<String> {
let key: &[u8] = &[42; 32];

Expand Down Expand Up @@ -183,18 +181,18 @@ pub fn delete_line_from_file(line_number: usize, path: PathBuf) -> anyhow::Resul

Ok(())
}
pub fn write_file(file_response: FileResponse) -> Result<()> {
let file_extension: Vec<&str> = file_response.name.split('.').collect();
// pub fn write_file(file_response: FileResponse) -> Result<()> {
// let file_extension: Vec<&str> = file_response.name.split('.').collect();

let files = FileDialog::new()
.set_title("Save to")
.set_directory("/")
.add_filter(file_extension[1], &[file_extension[1]])
.save_file();
// let files = FileDialog::new()
// .set_title("Save to")
// .set_directory("/")
// .add_filter(file_extension[1], &[file_extension[1]])
// .save_file();

if let Some(file) = files {
fs::write(file, file_response.file)?;
}
// if let Some(file) = files {
// fs::write(file, file_response.file)?;
// }

Ok(())
}
// Ok(())
// }
149 changes: 140 additions & 9 deletions src/app/backend.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ pub struct TemplateApp {
#[serde(skip)]
pub incoming_msg_time: Vec<String>,
#[serde(skip)]
pub incoming_msg: String,
pub incoming_msg: ServerMaster,
//emoji fasz
pub random_emoji: String,
pub emoji: Vec<String>,
Expand Down Expand Up @@ -161,7 +161,7 @@ impl Default for TemplateApp {
//msg
usr_msg: String::new(),
incoming_msg_time: Vec::new(),
incoming_msg: String::new(),
incoming_msg: ServerMaster::default(),
//thread communication for client
rx,
tx,
Expand Down Expand Up @@ -189,6 +189,7 @@ impl TemplateApp {
//Message Types
#[derive(Default, serde::Serialize, serde::Deserialize, Debug, Clone)]
pub struct FileUpload {
pub extension: String,
pub name: String,
pub bytes: Vec<u8>,
}
Expand All @@ -204,9 +205,7 @@ pub struct Image {
}

#[derive(Default, serde::Serialize, serde::Deserialize, Debug, Clone)]
pub struct SnycMessage {
/*Empty packet, only for syncing*/
}
pub struct SnycMessage {/*Empty packet, only for syncing*/}

#[derive(Default, serde::Serialize, serde::Deserialize, Debug, Clone)]
pub struct FileRequest {
Expand Down Expand Up @@ -242,13 +241,145 @@ impl Message {
author: String,
) -> Message {
Message {
MessageType: MessageType::NormalMessage(NormalMessage { message: msg.trim().to_string() }),
MessageType: MessageType::NormalMessage(NormalMessage {
message: msg.trim().to_string(),
}),
Password: password,
Author: author,
MessageDate: { Utc::now().format("%Y.%m.%d. %H:%M").to_string() },
Destination: ip,
}
}
pub fn construct_file_msg(
bytes: Vec<u8>,
file_name: PathBuf,
ip: String,
password: String,
author: String,
) -> Message {
Message {
//Dont execute me please :3 |
// |
// V
MessageType: MessageType::FileUpload(FileUpload {
extension: file_name.extension().unwrap().to_str().unwrap().to_string(),
name: file_name
.file_prefix()
.unwrap()
.to_str()
.unwrap()
.to_string(),
bytes: bytes,
}),

Password: password,
Author: author,
MessageDate: { Utc::now().format("%Y.%m.%d. %H:%M").to_string() },
Destination: ip,
}
}
pub fn construct_sync_msg(ip: String, password: String, author: String) -> Message {
Message {
MessageType: MessageType::SyncMessage(SnycMessage {}),
Password: password,
Author: author,
MessageDate: {
Utc::now().format("%Y.%m.%d. %H:%M").to_string()
},
MessageDate: { Utc::now().format("%Y.%m.%d. %H:%M").to_string() },
Destination: ip,
}
}
}

#[derive(serde::Serialize, serde::Deserialize, Debug, Clone)]
pub struct ServerFileUpload {
pub file_name: String,
pub index: i32,
}

#[derive(serde::Serialize, serde::Deserialize, Debug, Clone)]
pub struct ServerNormalMessage {
pub message: String,
}

#[derive(serde::Serialize, serde::Deserialize, Debug, Clone)]
pub struct ServerImage {
pub bytes: Vec<u8>,
}

#[derive(serde::Serialize, serde::Deserialize, Debug, Clone)]
pub enum ServerMessageType {
Upload(ServerFileUpload),
Normal(ServerNormalMessage),
Image(ServerImage),
}

#[derive(serde::Serialize, serde::Deserialize, Debug, Clone)]
pub struct ServerOutput {
pub MessageType: ServerMessageType,
pub Author: String,
pub MessageDate: String,
}

impl ServerOutput {
pub fn struct_into_string(&self) -> String {
return serde_json::to_string(self).unwrap_or_default();
}
pub fn convert_msg_to_servermsg(normal_msg: Message) -> ServerOutput {
//Convert a client output to a server output (Message -> ServerOutput), trim some useless info
ServerOutput {
MessageType: ServerMessageType::Normal(ServerNormalMessage {
message: match normal_msg.MessageType {
MessageType::SyncMessage(_) => todo!(),
MessageType::FileRequest(_) => todo!(),
MessageType::FileUpload(_) => todo!(),
MessageType::Image(_) => todo!(),
MessageType::NormalMessage(msg) => msg.message,
},
}),
Author: normal_msg.Author,
MessageDate: normal_msg.MessageDate,
}
}
pub fn convert_upload_to_servermsg(normal_msg: Message, index: i32) -> ServerOutput {
//Convert a client output to a server output (Message -> ServerOutput), trim some useless info
ServerOutput {
MessageType: ServerMessageType::Upload(ServerFileUpload {
file_name: match normal_msg.MessageType {
MessageType::SyncMessage(_) => todo!(),
MessageType::FileRequest(_) => todo!(),
MessageType::FileUpload(msg) => {
format!("{}.{}", msg.name, msg.extension)
}
MessageType::Image(_) => todo!(),
MessageType::NormalMessage(_) => todo!(),
},
index: index,
}),
Author: normal_msg.Author,
MessageDate: normal_msg.MessageDate,
}
}
}

#[derive(serde::Serialize, serde::Deserialize, Debug, Clone)]
pub struct ServerMaster {
pub struct_list: Vec<ServerOutput>,
}
impl Default for ServerMaster {
fn default() -> Self {
Self {
struct_list: Vec::new(),
}
}
}
impl ServerMaster {
pub fn struct_into_string(&self) -> String {
return serde_json::to_string(self).unwrap_or_default();
}
pub fn convert_vec_serverout_into_server_master(
server_output_list: Vec<ServerOutput>,
) -> ServerMaster {
return ServerMaster {
struct_list: server_output_list,
};
}
}
15 changes: 5 additions & 10 deletions src/app/client.rs
Original file line number Diff line number Diff line change
@@ -1,32 +1,26 @@
use std::path::PathBuf;

use messages::{message_client::MessageClient, FileRequest, FileSend, MessageRequest, MessageSync};

use self::messages::FileResponse;
use messages::{message_client::MessageClient, MessageRequest};

use super::backend::Message;
pub mod messages {
tonic::include_proto!("messages");
}

//main is for sending
pub async fn send_msg(
message: Message
) -> Result<String, Box<dyn std::error::Error>> {
pub async fn send_msg(message: Message) -> Result<String, Box<dyn std::error::Error>> {
let mut client: MessageClient<tonic::transport::Channel> =
MessageClient::connect(format!("http://{}", message.Destination)).await?;

let request = tonic::Request::new(MessageRequest {
message: message.struct_into_string(),
});

let response = client.send_message(request).await?.into_inner().clone();
let response = client.message_main(request).await?.into_inner().clone();

let message = response.message;

Ok(message)
}

/*
pub async fn sync_msg(passw: String, ip: String) -> Result<String, Box<dyn std::error::Error>> {
let mut client: MessageClient<tonic::transport::Channel> =
MessageClient::connect(format!("http://{}", ip)).await?;
Expand Down Expand Up @@ -78,3 +72,4 @@ pub async fn request_file(
Ok(response)
}
*/
Loading

0 comments on commit f22f22f

Please sign in to comment.