feat(lua): add timeout function

This commit is contained in:
Ryan 2025-03-14 18:03:15 -04:00
parent 823a63e93d
commit 571581767e
Signed by: ErrorNoInternet
GPG Key ID: 2486BFB7B1E6A4A3
2 changed files with 31 additions and 10 deletions

View File

@ -7,11 +7,12 @@ pub mod logging;
pub mod nochatreports; pub mod nochatreports;
pub mod player; pub mod player;
pub mod system; pub mod system;
pub mod thread;
pub mod vec3; pub mod vec3;
use crate::{ListenerMap, build_info::built}; use crate::{ListenerMap, build_info::built};
use mlua::{Lua, Table}; use mlua::{Lua, Table};
use std::{io, time::Duration}; use std::io;
#[derive(Debug)] #[derive(Debug)]
#[allow(dead_code)] #[allow(dead_code)]
@ -33,19 +34,12 @@ pub fn register_globals(
globals.set("GIT_COMMIT_HASH", built::GIT_COMMIT_HASH)?; globals.set("GIT_COMMIT_HASH", built::GIT_COMMIT_HASH)?;
globals.set("GIT_COMMIT_HASH_SHORT", built::GIT_COMMIT_HASH_SHORT)?; globals.set("GIT_COMMIT_HASH_SHORT", built::GIT_COMMIT_HASH_SHORT)?;
globals.set(
"sleep",
lua.create_async_function(async |_, duration: u64| {
tokio::time::sleep(Duration::from_millis(duration)).await;
Ok(())
})?,
)?;
block::register_globals(lua, globals)?; block::register_globals(lua, globals)?;
events::register_globals(lua, globals, event_listeners)?; events::register_globals(lua, globals, event_listeners)?;
logging::register_globals(lua, globals)?; logging::register_globals(lua, globals)?;
nochatreports::register_globals(lua, globals)?; nochatreports::register_globals(lua, globals)?;
system::register_globals(lua, globals) system::register_globals(lua, globals)?;
thread::register_globals(lua, globals)
} }
pub fn reload(lua: &Lua, sender: Option<String>) -> Result<(), Error> { pub fn reload(lua: &Lua, sender: Option<String>) -> Result<(), Error> {

27
src/lua/thread.rs Normal file
View File

@ -0,0 +1,27 @@
use mlua::{Error, Function, Lua, Result, Table};
use std::time::Duration;
use tokio::time::{sleep, timeout};
pub fn register_globals(lua: &Lua, globals: &Table) -> Result<()> {
globals.set(
"sleep",
lua.create_async_function(async |_, duration: u64| {
sleep(Duration::from_millis(duration)).await;
Ok(())
})?,
)?;
globals.set(
"timeout",
lua.create_async_function(async |_, (duration, function): (u64, Function)| {
timeout(
Duration::from_millis(duration),
function.call_async::<()>(()),
)
.await
.map_err(Error::external)
})?,
)?;
Ok(())
}