feat(lua): add timeout function
This commit is contained in:
parent
823a63e93d
commit
571581767e
@ -7,11 +7,12 @@ pub mod logging;
|
||||
pub mod nochatreports;
|
||||
pub mod player;
|
||||
pub mod system;
|
||||
pub mod thread;
|
||||
pub mod vec3;
|
||||
|
||||
use crate::{ListenerMap, build_info::built};
|
||||
use mlua::{Lua, Table};
|
||||
use std::{io, time::Duration};
|
||||
use std::io;
|
||||
|
||||
#[derive(Debug)]
|
||||
#[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_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)?;
|
||||
events::register_globals(lua, globals, event_listeners)?;
|
||||
logging::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> {
|
||||
|
27
src/lua/thread.rs
Normal file
27
src/lua/thread.rs
Normal 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(())
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user