cleaned up scriptable interfaces
This commit is contained in:
parent
22fcdae11a
commit
065e16964f
|
|
@ -1,41 +1,49 @@
|
|||
use actix::Addr;
|
||||
use mlua::{Error, UserData, UserDataFields, UserDataMethods};
|
||||
use crate::client_management::client::Client;
|
||||
use crate::client_management::client::{ClientDataMessage, ClientDataResponse};
|
||||
use crate::client_management::client::ClientDataResponse::{Username, Uuid};
|
||||
use crate::server::ServerDataResponse::Name;
|
||||
use crate::client_management::client::{ClientDataMessage, ClientDataResponse};
|
||||
use actix::Addr;
|
||||
use mlua::{Error, UserData, UserDataMethods};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub(crate) struct ScriptableClient {
|
||||
addr: Addr<Client>
|
||||
addr: Addr<Client>,
|
||||
}
|
||||
|
||||
impl UserData for ScriptableClient {
|
||||
fn add_methods<'lua, M: UserDataMethods<'lua, Self>>(methods: &mut M) {
|
||||
methods.add_async_method("username", |_lua, obj, ()| async move {
|
||||
let name: Option<ClientDataResponse> = obj.addr.send(ClientDataMessage::Username).await.ok();
|
||||
let name: Option<ClientDataResponse> =
|
||||
obj.addr.send(ClientDataMessage::Username).await.ok();
|
||||
if let Some(Username(name)) = name {
|
||||
Ok(name)
|
||||
} else {
|
||||
Err(Error::RuntimeError("Name returned null or other value".to_string()))
|
||||
Err(Error::RuntimeError(
|
||||
"Name returned null or other value".to_string(),
|
||||
))
|
||||
}
|
||||
});
|
||||
|
||||
methods.add_async_method("uuid", |_lua, obj, ()| async move {
|
||||
let uuid: Option<ClientDataResponse> = obj.addr.send(ClientDataMessage::Uuid).await.ok();
|
||||
let uuid: Option<ClientDataResponse> =
|
||||
obj.addr.send(ClientDataMessage::Uuid).await.ok();
|
||||
if let Some(Uuid(uuid)) = uuid {
|
||||
Ok(uuid.to_string())
|
||||
} else {
|
||||
Err(Error::RuntimeError("Uuid returned null or other value".to_string()))
|
||||
Err(Error::RuntimeError(
|
||||
"Uuid returned null or other value".to_string(),
|
||||
))
|
||||
}
|
||||
});
|
||||
|
||||
methods.add_async_method("address", |_lua, obj, ()| async move {
|
||||
let address: Option<ClientDataResponse> = obj.addr.send(ClientDataMessage::Address).await.ok();
|
||||
let address: Option<ClientDataResponse> =
|
||||
obj.addr.send(ClientDataMessage::Address).await.ok();
|
||||
if let Some(Username(address)) = address {
|
||||
Ok(address)
|
||||
} else {
|
||||
Err(Error::RuntimeError("address returned null or other value".to_string()))
|
||||
Err(Error::RuntimeError(
|
||||
"address returned null or other value".to_string(),
|
||||
))
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -43,8 +51,6 @@ impl UserData for ScriptableClient {
|
|||
|
||||
impl From<Addr<Client>> for ScriptableClient {
|
||||
fn from(addr: Addr<Client>) -> Self {
|
||||
Self {
|
||||
addr
|
||||
}
|
||||
Self { addr }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,21 +1,21 @@
|
|||
use actix::{ActorStreamExt, Addr};
|
||||
use mlua::{Error, UserData, UserDataFields, UserDataMethods};
|
||||
use crate::client_management::{ClientManager, ClientManagerDataMessage};
|
||||
use crate::client_management::ClientManagerDataResponse::Clients;
|
||||
use crate::client_management::{ClientManager, ClientManagerDataMessage};
|
||||
use crate::scripting::scriptable_client::ScriptableClient;
|
||||
use actix::Addr;
|
||||
use mlua::{Error, UserData, UserDataMethods};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub(crate) struct ScriptableClientManager {
|
||||
addr: Addr<ClientManager>
|
||||
addr: Addr<ClientManager>,
|
||||
}
|
||||
|
||||
impl UserData for ScriptableClientManager {
|
||||
fn add_methods<'lua, M: UserDataMethods<'lua, Self>>(methods: &mut M) {
|
||||
methods.add_async_method("clients", |lua, obj, ()| async move {
|
||||
methods.add_async_method("clients", |_lua, obj, ()| async move {
|
||||
let res = obj.addr.send(ClientManagerDataMessage::Clients).await;
|
||||
if let Ok(Clients(clients)) = res {
|
||||
|
||||
let clients: Vec<ScriptableClient> = clients.into_iter()
|
||||
let clients: Vec<ScriptableClient> = clients
|
||||
.into_iter()
|
||||
.map(|a| a.upgrade())
|
||||
.filter(|o| o.is_some())
|
||||
.map(|o| o.unwrap())
|
||||
|
|
@ -24,7 +24,9 @@ impl UserData for ScriptableClientManager {
|
|||
|
||||
Ok(clients)
|
||||
} else {
|
||||
Err(Error::RuntimeError("clients returned null or other value".to_string()))
|
||||
Err(Error::RuntimeError(
|
||||
"clients returned null or other value".to_string(),
|
||||
))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
@ -32,8 +34,6 @@ impl UserData for ScriptableClientManager {
|
|||
|
||||
impl From<Addr<ClientManager>> for ScriptableClientManager {
|
||||
fn from(addr: Addr<ClientManager>) -> Self {
|
||||
Self {
|
||||
addr
|
||||
}
|
||||
Self { addr }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue