refixed network manager (again again)

This commit is contained in:
michael-bailey 2022-09-23 19:29:12 +01:00
parent 1541020968
commit 89b420ee42
3 changed files with 88 additions and 49 deletions

View File

@ -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 <Self as Actor>::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;

View File

@ -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<NetworkManager>| {
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);

View File

@ -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<ServerDataMessage> 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()),