refixed network manager (again again)
This commit is contained in:
parent
1541020968
commit
89b420ee42
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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()),
|
||||
|
|
|
|||
Loading…
Reference in New Issue