diff --git a/scripts/test.lua b/scripts/test.lua index 5b077b6..83f40d6 100644 --- a/scripts/test.lua +++ b/scripts/test.lua @@ -2,4 +2,5 @@ print("Test Script") print(Server.ClientManager:getCount()) + print("Test Script") \ No newline at end of file diff --git a/server/src/client_manager.rs b/server/src/client_manager.rs index 48f2377..2a53545 100644 --- a/server/src/client_manager.rs +++ b/server/src/client_manager.rs @@ -1,4 +1,5 @@ use std::collections::HashMap; +use std::str::FromStr; use std::sync::Arc; use futures::future::join_all; @@ -11,7 +12,8 @@ use uuid::Uuid; use async_trait::async_trait; use mlua::prelude::LuaUserData; -use mlua::{UserDataFields, UserDataMethods}; +use mlua::{MetaMethod, Nil, ToLua, UserDataFields, UserDataMethods}; +use mlua::Value::UserData; use foundation::prelude::IManager; use foundation::connection::Connection; @@ -222,7 +224,20 @@ impl LuaUserData for ClientManagerLua .collect(); Ok(clients) } - }) + }); + + methods.add_async_meta_method(MetaMethod::Index, |lua, this, (index): (String)| { + let manager = this.0.clone(); + async move { + if let Ok(id) = Uuid::from_str(&index) { + let map = manager.clients.lock().await; + if let Some(found) = map.get(&id) { + return Ok(ClientLua(found.clone()).to_lua(lua)?); + } + } + return Ok(Nil); + } + }); } }