From 89b420ee42d0177ac09ae863b6c9a5f5235b3d5f Mon Sep 17 00:00:00 2001 From: michael-bailey Date: Fri, 23 Sep 2022 19:29:12 +0100 Subject: [PATCH] refixed network manager (again again) --- server/src/network/listener/mod.rs | 11 ++- .../network_manager/network_manager.rs | 55 +++++++++----- server/src/server/server.rs | 71 +++++++++++-------- 3 files changed, 88 insertions(+), 49 deletions(-) diff --git a/server/src/network/listener/mod.rs b/server/src/network/listener/mod.rs index ec475fc..4869b91 100644 --- a/server/src/network/listener/mod.rs +++ b/server/src/network/listener/mod.rs @@ -1,7 +1,14 @@ use std::net::{SocketAddr, ToSocketAddrs}; use actix::{ - fut::wrap_future, Actor, Addr, AsyncContext, Context, Handler, Message, Recipient, + fut::wrap_future, + Actor, + Addr, + AsyncContext, + Context, + Handler, + Message, + Recipient, SpawnHandle, }; use tokio::net::TcpListener; @@ -46,7 +53,7 @@ impl NetworkListener { /// called when the actor is to start listening fn start_listening(&mut self, ctx: &mut ::Context) { println!("[NetworkListener] started listening"); - let addr = self.address.clone(); + let addr = self.address; let delegate = self.delegate.clone(); ctx.spawn(wrap_future(async move { use ListenerOutput::NewConnection; diff --git a/server/src/network/network_manager/network_manager.rs b/server/src/network/network_manager/network_manager.rs index 932d68d..20ba0e8 100644 --- a/server/src/network/network_manager/network_manager.rs +++ b/server/src/network/network_manager/network_manager.rs @@ -1,18 +1,32 @@ -use crate::config_manager::{ConfigManager, ConfigManagerDataMessage, ConfigValue}; -use crate::network::listener::NetworkListener; -use crate::network::listener::{ListenerMessage, ListenerOutput}; - -use crate::network::network_manager::messages::{NetworkMessage, NetworkOutput}; -use crate::network::network_manager::Builder; -use crate::network::{ - Connection, ConnectionInitiator, InitiatorOutput, NetworkDataMessage, NetworkDataOutput, -}; -use actix::fut::wrap_future; use actix::{ - Actor, ActorFutureExt, Addr, AsyncContext, Context, Handler, WeakAddr, WeakRecipient, + fut::wrap_future, + Actor, + ActorFutureExt, + Addr, + AsyncContext, + Context, + Handler, + WeakAddr, + WeakRecipient, }; use foundation::ClientDetails; +use crate::{ + config_manager::{ConfigManager, ConfigManagerDataMessage, ConfigValue}, + network::{ + listener::{ListenerMessage, ListenerOutput, NetworkListener}, + network_manager::{ + messages::{NetworkMessage, NetworkOutput}, + Builder, + }, + Connection, + ConnectionInitiator, + InitiatorOutput, + NetworkDataMessage, + NetworkDataOutput, + }, +}; + /// # NetworkManager /// this struct will handle all networking functionality. /// @@ -132,16 +146,19 @@ impl Actor for NetworkManager { |out, actor: &mut NetworkManager, ctx: &mut Context| { use crate::config_manager::ConfigManagerDataResponse::GotValue; + println!("[NetworkManager] got config manager value {:?}", out); + let recipient = ctx.address().recipient(); - out.ok().map(|res| { - if let GotValue(Some(ConfigValue::Number(port))) = res { - println!("[NetworkManager] got port: {:?}", port); - let nl = NetworkListener::new(format!("0.0.0.0:{}", port), recipient); - nl.do_send(ListenerMessage::StartListening); - actor.listener_addr.replace(nl); - }; - }); + let port = if let Ok(GotValue(Some(ConfigValue::Number(port)))) = out { + port + } else { + 5600 + }; + println!("[NetworkManager] got port: {:?}", port); + let nl = NetworkListener::new(format!("0.0.0.0:{}", port), recipient); + nl.do_send(ListenerMessage::StartListening); + actor.listener_addr.replace(nl); }, ); ctx.spawn(fut); diff --git a/server/src/server/server.rs b/server/src/server/server.rs index 23e3610..e0cfea6 100644 --- a/server/src/server/server.rs +++ b/server/src/server/server.rs @@ -1,24 +1,42 @@ //! This crate holds the implementations and functions for the server //! including server boot procedures -use crate::client_management::client::Client; -use crate::client_management::ClientManagerMessage::AddClient; -use crate::client_management::{ClientManager, ClientManagerOutput}; -use crate::config_manager::{ - ConfigManager, ConfigManagerDataMessage, ConfigManagerDataResponse, ConfigValue, +use actix::{ + fut::wrap_future, + Actor, + ActorFutureExt, + Addr, + AsyncContext, + Context, + Handler, }; -use crate::lua::LuaManager; -use crate::network::ConnectionMessage::{CloseConnection, SendData}; -use crate::network::NetworkOutput::{InfoRequested, NewClient}; -use crate::network::{Connection, NetworkManager, NetworkOutput}; -use crate::rhai::RhaiManager; +use foundation::{messages::network::NetworkSockOut::GotInfo, ClientDetails}; -use crate::server::{builder, ServerBuilder, ServerDataMessage, ServerDataResponse}; - -use actix::fut::wrap_future; -use actix::{Actor, ActorFutureExt, Addr, AsyncContext, Context, Handler}; -use foundation::messages::network::NetworkSockOut::GotInfo; -use foundation::ClientDetails; +use crate::{ + client_management::{ + client::Client, + ClientManager, + ClientManagerMessage::AddClient, + ClientManagerOutput, + }, + config_manager::{ + ConfigManager, + ConfigManagerDataMessage, + ConfigManagerDataResponse, + ConfigValue, + }, + lua::LuaManager, + network::{ + Connection, + ConnectionMessage::{CloseConnection, SendData}, + NetworkManager, + NetworkOutput, + NetworkOutput::{InfoRequested, NewClient}, + }, + prelude::messages::NetworkMessage, + rhai::RhaiManager, + server::{builder, ServerBuilder, ServerDataMessage, ServerDataResponse}, +}; /// This struct is the main actor of the server. /// all other actors are ran through here. @@ -81,9 +99,10 @@ impl Actor for Server { let addr = ctx.address().downgrade(); let nm = NetworkManager::create(addr.clone().recipient()).build(); + nm.do_send(NetworkMessage::StartListening); self.network_manager.replace(nm.clone()); - let cm = ClientManager::new(addr.clone().recipient()); + let cm = ClientManager::new(addr.recipient()); self.client_manager.replace(cm.clone()); let rm = RhaiManager::create(ctx.address(), nm.clone(), cm.clone()).build(); @@ -96,22 +115,18 @@ impl Actor for Server { ConfigManager::shared().send(GetValue("Server.Name".to_owned())), ) .map(|out, actor: &mut Server, _ctx| { - out.ok().map(|res| { - if let GotValue(Some(ConfigValue::String(val))) = res { - actor.name = val - }; - }); + if let Ok(GotValue(Some(ConfigValue::String(val)))) = out { + actor.name = val + } }); let owner_fut = wrap_future( ConfigManager::shared().send(GetValue("Server.Owner".to_owned())), ) .map(|out, actor: &mut Server, _ctx| { - out.ok().map(|res| { - if let GotValue(Some(ConfigValue::String(val))) = res { - actor.owner = val - }; - }); + if let Ok(GotValue(Some(ConfigValue::String(val)))) = out { + actor.owner = val + } }); ctx.spawn(name_fut); @@ -123,7 +138,7 @@ impl Handler for Server { type Result = ServerDataResponse; fn handle(&mut self, msg: ServerDataMessage, _ctx: &mut Self::Context) -> Self::Result { - println!("data message"); + println!("[Server] got data message"); match msg { ServerDataMessage::Name => ServerDataResponse::Name(self.name.clone()), ServerDataMessage::Owner => ServerDataResponse::Owner(self.owner.clone()),