added basic scripting abilities to the server

This commit is contained in:
michael-bailey 2022-03-02 20:16:46 +00:00
parent 57d8cd920b
commit 4cf7cb5cde
2 changed files with 36 additions and 6 deletions

2
scripts/test.lua Normal file
View File

@ -0,0 +1,2 @@
print("Test Script")
print("fetched server field: " .. Server.ClientManager)

View File

@ -1,11 +1,16 @@
use std::io::Error;
use std::sync::Arc;
use futures::lock::Mutex;
use uuid::Uuid;
use tokio::sync::{Mutex, mpsc::{channel, Receiver}};
use tokio::fs::{create_dir, DirBuilder, File, read_dir};
use mlua::{Lua, UserDataFields, UserDataMethods};
use mlua::prelude::LuaUserData;
use tokio::sync::mpsc::{channel, Receiver};
use uuid::Uuid;
use tokio::io::AsyncReadExt;
use tokio::join;
use foundation::connection::Connection;
use foundation::prelude::IManager;
@ -78,7 +83,7 @@ pub struct Server {
client_manager: Arc<ClientManager<ServerMessage>>,
network_manager: Arc<NetworkManager<ServerMessage>>,
receiver: Mutex<Receiver<ServerMessage>>,
lua: Lua,
lua: Arc<Mutex<Lua>>,
}
impl Server {
@ -93,10 +98,12 @@ impl Server {
client_manager: ClientManager::new(sender.clone()),
network_manager: NetworkManager::new("0.0.0.0:5600", sender).await?,
receiver: Mutex::new(receiver),
lua: Lua::new(),
lua: Arc::new(Mutex::new(Lua::new())),
});
server.lua.globals().set("Server", ServerLua(server.clone())).unwrap();
server.lua.lock().await.globals().set("Server", ServerLua(server.clone())).unwrap();
server.load_scripts().await?;
Ok(server)
}
@ -150,6 +157,27 @@ impl Server {
}
}
}
pub async fn load_scripts(self: &Arc<Server>) -> Result<(), Error>{
if let Ok( mut scripts) = read_dir("./scripts").await {
while let Some(child) = scripts.next_entry().await? {
let metadata = child.metadata().await?;
if metadata.is_file() && child.path().extension().unwrap() == "lua" {
let mut file = File::open(child.path()).await.unwrap();
let mut data = String::new();
file.read_to_string(&mut data).await.unwrap();
let server = self.clone();
println!("---| loaded script |---\n{}", data);
println!("---| script output |---");
let _ = server.clone().lua.lock().await.load(&data).exec();
}
}
} else {
create_dir("./scripts").await?;
}
Ok(())
}
}
/// # ServerLua