From d69f8d32fd8f4fc793b115c31468d6bbc4763a38 Mon Sep 17 00:00:00 2001 From: Mitchell Date: Tue, 30 Jun 2020 14:24:29 +0100 Subject: [PATCH] temp file for core server actions --- src/server/utility.rs | 77 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/server/utility.rs diff --git a/src/server/utility.rs b/src/server/utility.rs new file mode 100644 index 0000000..b2cbc15 --- /dev/null +++ b/src/server/utility.rs @@ -0,0 +1,77 @@ +use std::net::TcpStream; +use std::io::Write; +use std::collections::HashMap; +use regex::Regex; +use crate::server::commands::{Commands, OutboundCommands}; +use std::sync::Arc; +use parking_lot::FairMutex; +use std::collections::VecDeque; + +pub fn transmit_data(mut stream: &TcpStream, data: &str){ + println!("Transmitting..."); + println!("data: {}",data); + + stream.write(data.to_string().as_bytes()).unwrap(); + stream.flush().unwrap(); +} + +pub fn tokenize(incoming_message: &str) -> HashMap{ + let mut data: HashMap = HashMap::new(); + + for mat in Regex::new(r###"(\?|!)([a-zA-z0-9]*):|([a-zA-z]*):([a-zA-Z0-9\-\+\[\]{}_=/]+|("(.*?)")+)"###).unwrap().find_iter(incoming_message){ + if match match_command(&mat.as_str().to_string()) { Commands::Unknown => false, _ => true,} || match match_outbound_command(&mat.as_str().to_string()) { OutboundCommands::Unknown => false, _ => true,}{ + data.insert("command".to_string(), mat.as_str().to_string()); + }else{ + let segment = mat.as_str().to_string(); + let contents: Vec<&str> = segment.split(":").collect(); + println!("key: {}, value: {}", contents[0].to_string(), contents[1].to_string()); + data.insert(contents[0].to_string(), contents[1].to_string()); + } + } + data +} + +pub fn match_command(command: &String) -> Commands{ + match command.as_str(){ + "!info:" => Commands::Info, + "!connect:" => Commands::Connect, + "!disconnect:" => Commands::Disconnect, + "!clientUpdate:" => Commands::ClientUpdate, + "!clientInfo:" => Commands::ClientInfo, + _ => Commands::Unknown, + } +} + +pub fn match_outbound_command(command: &String) -> OutboundCommands{ + match command.as_str(){ + "!client:" => OutboundCommands::Client, + "!clientRemove:" => OutboundCommands::ClientRemove, + _ => OutboundCommands::Unknown, + } +} + +pub fn format_data(message_queue: &Arc>>) -> HashMap{ + //copy data from queue + let locked_message_queue = message_queue.lock(); + let message = locked_message_queue.get(0).unwrap(); + println!("msg: {}", message); + + tokenize(&message) +} + +pub fn extract_fields(data: &Vec) -> (String, String){ + let mut uuid = String::from(""); + let mut username = String::from(""); + + for field in data{ + if field.contains("uuid:"){ + let contents: Vec<&str> = field.split(":").collect(); + uuid.push_str(contents[1]); + }else if field.contains("username:"){ + let contents: Vec<&str> = field.split(":").collect(); + username.push_str(contents[1]); + } + } + + (uuid, username) +}