moved into new directory
new folders and files made for new project structure, still likely to change
This commit is contained in:
parent
b0e02dd1c1
commit
65ff36523e
|
|
@ -1,20 +0,0 @@
|
|||
#[derive(Clone)]
|
||||
pub struct Client{
|
||||
pub uuid: String,
|
||||
pub username: String,
|
||||
pub address: String,
|
||||
}
|
||||
|
||||
impl Client{
|
||||
pub fn get_uuid(&self) -> &String{
|
||||
&self.uuid
|
||||
}
|
||||
|
||||
pub fn get_username(&self) -> &String{
|
||||
&self.username
|
||||
}
|
||||
|
||||
pub fn get_address(&self) -> &String{
|
||||
&self.address
|
||||
}
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
pub mod commands;
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
use crate::client_management::client_profile::Client;
|
||||
|
||||
use std::sync::Mutex;
|
||||
use std::sync::Arc;
|
||||
use std::collections::HashMap;
|
||||
|
||||
pub fn get_client_data(clients_ref: &Arc<Mutex<HashMap<String,Client>>>, uuid: &String) -> String{
|
||||
let clients_hashmap = clients_ref.lock().unwrap();
|
||||
let client = clients_hashmap.get(uuid);
|
||||
match client{
|
||||
Some(data) => {
|
||||
let mut message = String::from("!success: ");
|
||||
message.push_str(&data.get_uuid().to_string());
|
||||
message.push_str(&" host:".to_string());
|
||||
message.push_str(&data.get_address().to_string());
|
||||
message.push_str(&" ".to_string());
|
||||
message.push_str(&data.get_username().to_string());
|
||||
message
|
||||
},
|
||||
None => String::from("client not online"),
|
||||
}
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
use crate::client_management::client_profile::Client;
|
||||
|
||||
use std::sync::Mutex;
|
||||
use std::sync::Arc;
|
||||
use std::collections::HashMap;
|
||||
|
||||
pub fn add_client(clients_ref: &Arc<Mutex<HashMap<String,Client>>>, username: &String, uuid: &String, address: &String){
|
||||
let client = create_client_profile(username,uuid,address);
|
||||
let mut clients_hashmap = clients_ref.lock().unwrap();
|
||||
//let cloned_client = client.clone();
|
||||
clients_hashmap.insert(uuid.to_string(),client);
|
||||
}
|
||||
|
||||
fn create_client_profile(username: &String, uuid: &String, address: &String) -> Client{
|
||||
Client{
|
||||
uuid: uuid.to_string(),
|
||||
username: username.to_string(),
|
||||
address: address.to_string(),
|
||||
}
|
||||
}
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
use crate::client_management::client_profile::Client;
|
||||
|
||||
use std::sync::Mutex;
|
||||
use std::sync::Arc;
|
||||
use std::collections::HashMap;
|
||||
|
||||
pub fn remove_client(clients_ref: &Arc<Mutex<HashMap<String,Client>>>, uuid: &String) -> Client{
|
||||
let mut clients_hashmap = clients_ref.lock().unwrap();
|
||||
clients_hashmap.remove(uuid).unwrap()
|
||||
}
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
use std::net::TcpStream;
|
||||
use std::io::Write;
|
||||
|
||||
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();
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
use crate::client_management::client_profile::Client;
|
||||
use crate::server::client::client_profile::Client;
|
||||
//use crate::client_management::client_profile::Client;
|
||||
|
||||
// send a list of all clients.
|
||||
|
||||
|
|
@ -6,5 +7,5 @@ use crate::client_management::client_profile::Client;
|
|||
// server !client: name:"vobo" uuid:24653526-23464562-46346-3563563 host:"127.0.0.1"
|
||||
// server !client: name:"bovo" uuid:24643526-23464562-46346-3563563 host:"127.0.0.1"
|
||||
pub fn format_client_data(uuid: &String, client: &Client) -> String{
|
||||
["!client: ",client.get_username(), uuid, " host:\"", client.get_address(), "\""].concat()
|
||||
["!client: username:",client.get_username(), " uuid:", uuid, " host:\"", client.get_address(), "\""].concat()
|
||||
}
|
||||
|
|
@ -3,8 +3,9 @@ pub fn get_server_info() -> String{
|
|||
let server_name = String::from("Server-01");
|
||||
let server_owner = String::from("mickyb18");
|
||||
|
||||
server_details.push_str(&"name:".to_string());
|
||||
server_details.push_str(&server_name.to_string());
|
||||
server_details.push_str(&" ".to_string());
|
||||
server_details.push_str(&" owner:".to_string());
|
||||
server_details.push_str(&server_owner.to_string());
|
||||
|
||||
server_details
|
||||
|
|
@ -9,9 +9,10 @@ mod client_info;
|
|||
mod client;
|
||||
mod test;
|
||||
mod message;
|
||||
pub mod network;
|
||||
|
||||
use crate::client_management::client_profile::Client;
|
||||
use crate::server::client::client_profile::Client;
|
||||
use crate::server::utility;
|
||||
|
||||
use std::collections::VecDeque;
|
||||
use parking_lot::FairMutex;
|
||||
use std::sync::Mutex;
|
||||
|
|
@ -20,6 +21,7 @@ use std::collections::HashMap;
|
|||
use std::io::{self, Read};
|
||||
use std::net::TcpStream;
|
||||
use std::time::Duration;
|
||||
use dashmap::DashMap;
|
||||
|
||||
pub enum Commands{
|
||||
Info,
|
||||
|
|
@ -47,39 +49,41 @@ enum OutboundReturns{
|
|||
}
|
||||
|
||||
impl Commands{
|
||||
pub fn execute(&self, mut stream: &TcpStream, buffer: &mut [u8; 1024], data: &Vec<String>, address: &String, clients_ref: &Arc<Mutex<HashMap<String,Client>>>, message_queue: &Arc<FairMutex<VecDeque<String>>>){
|
||||
pub fn execute(&self, client: &mut Client, buffer: &mut [u8; 1024], data: &HashMap<String, String>, clients_ref: &Arc<Mutex<HashMap<String, Client>>>, message_queue: &Arc<FairMutex<VecDeque<String>>>){
|
||||
let stream = client.get_stream();
|
||||
match *self{
|
||||
Commands::Info => {
|
||||
let server_details = info::get_server_info();
|
||||
|
||||
let out_success = OutboundReturns::Success;
|
||||
out_success.execute(stream, &server_details);
|
||||
out_success.execute(&stream, &server_details);
|
||||
},
|
||||
Commands::Connect => {
|
||||
connect::add_client(clients_ref, &data[1], &data[2], address);
|
||||
connect::add_client(clients_ref, client);
|
||||
|
||||
let mut message = "!client: ".to_string();
|
||||
message.push_str(&data[2].to_string());
|
||||
message.push_str(&" address:".to_string());
|
||||
message.push_str(&address.to_string());
|
||||
message.push_str(&" ".to_string());
|
||||
message.push_str(&data[1].to_string());
|
||||
let mut message = "!client: username:".to_string();
|
||||
message.push_str(&client.get_username().to_string());
|
||||
message.push_str(&" host:".to_string());
|
||||
message.push_str(&client.get_address().to_string());
|
||||
message.push_str(&" uuid:".to_string());
|
||||
message.push_str(&client.get_uuid().to_string());
|
||||
|
||||
message_queue.lock().push_back(message);
|
||||
|
||||
let out_success = OutboundReturns::Success;
|
||||
out_success.execute(stream, &String::from(""));
|
||||
out_success.execute(&stream, &String::from(""));
|
||||
},
|
||||
Commands::Disconnect => {
|
||||
let client_profile = disconnect::remove_client(clients_ref, &data[1]);
|
||||
|
||||
let mut message = "!clientRemove: ".to_string();
|
||||
message.push_str(&client_profile.get_uuid().to_string());
|
||||
disconnect::remove_client(clients_ref, client);
|
||||
|
||||
let mut message = "!clientRemove: uuid:".to_string();
|
||||
message.push_str(&client.get_uuid().to_string());
|
||||
message_queue.lock().push_back(message);
|
||||
|
||||
let out_success = OutboundReturns::Success;
|
||||
out_success.execute(stream, &String::from(""));
|
||||
out_success.execute(&stream, &String::from(""));
|
||||
client.disconnect();
|
||||
println!("disconnected!");
|
||||
},
|
||||
Commands::ClientUpdate => {
|
||||
let in_success = InboundReturns::Success;
|
||||
|
|
@ -87,19 +91,19 @@ impl Commands{
|
|||
let clients_hashmap = clients_ref.lock().unwrap();
|
||||
for (key, value) in clients_hashmap.iter(){
|
||||
let formatted_data = client_update::format_client_data(&key, &value);
|
||||
network::transmit_data(stream, &formatted_data);
|
||||
utility::transmit_data(&stream, &formatted_data);
|
||||
|
||||
in_success.execute(stream, buffer, &formatted_data);
|
||||
in_success.execute(&stream, buffer, &formatted_data);
|
||||
}
|
||||
|
||||
let out_success = OutboundReturns::Success;
|
||||
out_success.execute(stream, &String::from(""));
|
||||
out_success.execute(&stream, &String::from(""));
|
||||
|
||||
in_success.execute(stream, buffer, &String::from("!success:"));
|
||||
in_success.execute(&stream, buffer, &String::from("!success:"));
|
||||
},
|
||||
Commands::ClientInfo => {
|
||||
let requested_data = client_info::get_client_data(clients_ref, &data[1]);
|
||||
network::transmit_data(stream, &requested_data);
|
||||
let requested_data = client_info::get_client_data(clients_ref, data);
|
||||
utility::transmit_data(&stream, &requested_data);
|
||||
},
|
||||
Commands::Unknown => {
|
||||
println!("Uknown Command!");
|
||||
|
|
@ -109,19 +113,34 @@ impl Commands{
|
|||
}
|
||||
|
||||
impl OutboundCommands{
|
||||
pub fn execute(&self, mut stream: &TcpStream, buffer: &mut [u8; 1024], data: &String){
|
||||
pub fn execute(&self, client: &Client, buffer: &mut [u8; 1024], data: &HashMap<String, String>){
|
||||
let stream = client.get_stream();
|
||||
match *self{
|
||||
OutboundCommands::Client => {
|
||||
network::transmit_data(stream, data);
|
||||
let mut message = String::from("");
|
||||
message.push_str(&data.get("command").unwrap());
|
||||
message.push_str(&" username:");
|
||||
message.push_str(&data.get("username").unwrap());
|
||||
message.push_str(&" host:");
|
||||
message.push_str(&data.get("host").unwrap());
|
||||
message.push_str(&" uuid:");
|
||||
message.push_str(&data.get("uuid").unwrap());
|
||||
|
||||
utility::transmit_data(&stream, &message);
|
||||
|
||||
let in_success = InboundReturns::Success;
|
||||
in_success.execute(stream, buffer, data);
|
||||
in_success.execute(&stream, buffer, &message);
|
||||
},
|
||||
OutboundCommands::ClientRemove => {
|
||||
network::transmit_data(stream, data);
|
||||
let mut message = String::from("");
|
||||
message.push_str(&data.get("command").unwrap());
|
||||
message.push_str(&" uuid:");
|
||||
message.push_str(&data.get("uuid").unwrap());
|
||||
|
||||
utility::transmit_data(&stream, &message);
|
||||
|
||||
let in_success = InboundReturns::Success;
|
||||
in_success.execute(stream, buffer, data);
|
||||
in_success.execute(&stream, buffer, &message);
|
||||
},
|
||||
OutboundCommands::Unknown => {
|
||||
println!("Unknown Command!");
|
||||
|
|
@ -142,7 +161,7 @@ impl InboundReturns{
|
|||
match e.kind() {
|
||||
io::ErrorKind::WouldBlock => {
|
||||
println!("Blocking...");
|
||||
network::transmit_data(stream, data);
|
||||
utility::transmit_data(stream, data);
|
||||
},
|
||||
_ => panic!("Fatal Error {}", e),
|
||||
}
|
||||
|
|
@ -160,7 +179,7 @@ impl InboundReturns{
|
|||
}
|
||||
|
||||
impl OutboundReturns{
|
||||
pub fn execute(&self, mut stream: &TcpStream, data: &String){
|
||||
pub fn execute(&self, stream: &TcpStream, data: &String){
|
||||
match *self{
|
||||
OutboundReturns::Success => {
|
||||
let mut message = "!success:".to_string();
|
||||
|
|
@ -168,7 +187,7 @@ impl OutboundReturns{
|
|||
message.push_str(&" ".to_string());
|
||||
message.push_str(&data.to_string());
|
||||
}
|
||||
network::transmit_data(stream, &message);
|
||||
utility::transmit_data(stream, &message);
|
||||
},
|
||||
OutboundReturns::Error => {},
|
||||
}
|
||||
Loading…
Reference in New Issue