cleaned up rhai manager

This commit is contained in:
michael-bailey 2022-09-15 08:18:30 +01:00
parent cf29c2c50d
commit 1226fafe2c
2 changed files with 44 additions and 35 deletions

View File

@ -1,10 +1,10 @@
use actix::{Actor, Addr}; use actix::{Actor, Addr};
use mlua::Lua;
use rhai::{Engine, RegisterNativeFunction, Scope};
use crate::client_management::ClientManager; use crate::client_management::ClientManager;
use crate::rhai::rhai_manager::RhaiManager;
use crate::network::NetworkManager; use crate::network::NetworkManager;
use crate::rhai::rhai_manager::RhaiManager;
use crate::Server; use crate::Server;
use rhai::{Engine, Scope};
pub struct Builder { pub struct Builder {
engine: Engine, engine: Engine,
@ -25,34 +25,36 @@ impl Builder {
server, server,
network_manager, network_manager,
client_manager, client_manager,
scope: Default::default() scope: Default::default(),
} }
} }
pub fn scope_object<T: 'static>(mut self, name: &str, obj: T) -> Self pub fn scope_object<T: 'static>(mut self, name: &str, obj: T) -> Self
where where
T: Clone { T: Clone,
{
self.engine.register_type::<T>(); self.engine.register_type::<T>();
self.scope.set_value(name, obj); self.scope.set_value(name, obj);
self self
} }
pub fn scope_fn<F, A>(mut self, name: &str, func: F ) -> Self // not sure what this is for?
where // pub fn scope_fn<F, A>(mut self, name: &str, func: F) -> Self
F: RegisterNativeFunction<A, ()> // where
{ // F: RegisterNativeFunction<A, ()>,
self.engine.register_fn(name, func); // {
self // self.engine.register_fn(name, func);
} // self
// }
pub(crate) fn build(self) -> Addr<RhaiManager> { pub(crate) fn build(self) -> Addr<RhaiManager> {
RhaiManager { RhaiManager {
engine: self.engine, engine: self.engine,
scope: self.scope, _scope: self.scope,
server: self.server, _server: self.server,
network_manager: self.network_manager, _network_manager: self.network_manager,
client_manager: self.client_manager _client_manager: self.client_manager,
}.start() }
.start()
} }
} }

View File

@ -1,37 +1,44 @@
use actix::{Actor, Addr, ArbiterHandle, AsyncContext, Context, Running};
use actix::fut::wrap_future;
use rhai::{Engine, Func, Scope};
use crate::client_management::ClientManager; use crate::client_management::ClientManager;
use crate::rhai::builder::Builder;
use crate::network::NetworkManager; use crate::network::NetworkManager;
use crate::rhai::builder::Builder;
use crate::Server; use crate::Server;
use actix::{Actor, Addr, Context};
use rhai::{Engine, Scope};
pub struct RhaiManager { pub struct RhaiManager {
pub(super) engine: Engine, pub(super) engine: Engine,
pub(super) scope: Scope<'static>, pub(super) _scope: Scope<'static>,
pub(super) server: Addr<Server>, pub(super) _server: Addr<Server>,
pub(super) network_manager: Addr<NetworkManager>, pub(super) _network_manager: Addr<NetworkManager>,
pub(super) client_manager: Addr<ClientManager>, pub(super) _client_manager: Addr<ClientManager>,
} }
impl RhaiManager { impl RhaiManager {
pub fn create( pub fn create(
server: Addr<Server>, server: Addr<Server>,
network_manager: Addr<NetworkManager>, network_manager: Addr<NetworkManager>,
client_manager: Addr<ClientManager> client_manager: Addr<ClientManager>,
) -> Builder { ) -> Builder {
Builder::new(server.clone(), network_manager.clone(), client_manager.clone()) Builder::new(
.scope_object("server", server) server.clone(),
network_manager.clone(),
client_manager.clone(),
)
.scope_object("server", server)
} }
} }
impl Actor for RhaiManager { impl Actor for RhaiManager {
type Context = Context<Self>; type Context = Context<Self>;
fn started(&mut self, ctx: &mut Self::Context) { fn started(&mut self, _ctx: &mut Self::Context) {
self.engine.run(r#" self.engine
.run(
r#"
print("hello rhai") print("hello rhai")
"#).unwrap(); "#,
)
.unwrap();
} }
} }