exposed server as lib

+created lib output for server
+ added extra dependencies
+ added functions to retrieve the port of a server
This commit is contained in:
michael-bailey 2022-02-19 00:51:32 +00:00
parent ec2b16c10a
commit 31a25c2f20
6 changed files with 37 additions and 7 deletions

View File

@ -16,4 +16,7 @@ crossbeam-channel = "0.5.0"
tokio = { version = "1.9.0", features = ["full"] }
futures = "0.3.16"
foundation = {path = '../foundation'}
async-trait = "0.1.52"
server = {path = '../server'}
foundation = {path = '../foundation'}

View File

@ -8,6 +8,7 @@ edition = "2018"
[lib]
[dependencies]
async-trait = "0.1.52"
regex = "1"
crossbeam = "0.8.0"
crossbeam-channel = "0.5.0"
@ -21,5 +22,6 @@ log = "0.4"
url = "2.2.0"
uuid = {version = "0.8", features = ["serde", "v4"]}
serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1.9.0", features = ["full"] }
serde_json = "1.0"
openssl = "0.10"

View File

@ -6,6 +6,14 @@ edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
name = "serverlib"
path = "src/lib.rs"
[[bin]]
name = "server"
path = "src/main.rs"
[dependencies]
clap = "2.33.3"
uuid = {version = "0.8", features = ["serde", "v4"]}

8
server/src/lib.rs Normal file
View File

@ -0,0 +1,8 @@
mod chat_manager;
mod client;
mod client_manager;
mod messages;
mod network_manager;
mod server;
pub use server::Server;

View File

@ -1,4 +1,5 @@
use std::io::Write;
use std::net::SocketAddr;
use std::sync::Arc;
use tokio::io::{self, AsyncBufReadExt, AsyncWriteExt, BufReader};
@ -11,20 +12,24 @@ use crate::messages::ServerMessage;
use foundation::messages::network::{NetworkSockIn, NetworkSockOut};
pub struct NetworkManager {
address: String,
address: SocketAddr,
server_channel: Sender<ServerMessage>,
}
impl NetworkManager {
pub fn new(
_port: String,
port: u16,
server_channel: Sender<ServerMessage>,
) -> Arc<NetworkManager> {
Arc::new(NetworkManager {
address: "0.0.0.0:5600".to_string(),
address: format!("0.0.0.0:{}", port).parse().unwrap(),
server_channel,
})
}
pub fn port(&self) -> u16 {
self.address.port()
}
pub fn start(self: &Arc<NetworkManager>) {
let network_manager = self.clone();
@ -65,8 +70,8 @@ impl NetworkManager {
let _ = wd
.write_all(
serde_json::to_string(&NetworkSockOut::GotInfo {
server_name: "oof",
server_owner: "michael",
server_name: "oof".to_string(),
server_owner: "michael".to_string(),
})
.unwrap()
.as_bytes(),

View File

@ -31,11 +31,15 @@ impl Server {
Ok(Arc::new(Server {
client_manager: ClientManager::new(sender.clone()),
network_manager: NetworkManager::new("5600".to_string(), sender),
network_manager: NetworkManager::new("5600".parse().unwrap(), sender),
receiver: Mutex::new(receiver),
}))
}
pub fn port(self: &Arc<Server>) -> u16 {
self.network_manager.port()
}
pub async fn start(self: &Arc<Server>) {
// start client manager and network manager
self.network_manager.clone().start();