Implemented script reloading

This commit is contained in:
2023-11-19 01:37:39 +01:00
parent fabbf74206
commit 559bd03de3
3 changed files with 22 additions and 2 deletions

10
Cargo.lock generated
View File

@@ -1242,6 +1242,15 @@ dependencies = [
"serde",
]
[[package]]
name = "signal-hook-registry"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
dependencies = [
"libc",
]
[[package]]
name = "slab"
version = "0.4.9"
@@ -1433,6 +1442,7 @@ dependencies = [
"mio",
"num_cpus",
"pin-project-lite",
"signal-hook-registry",
"socket2 0.5.5",
"tokio-macros",
"windows-sys",

View File

@@ -13,7 +13,7 @@ anyhow = "1"
fern = "0.6.2"
log = "0.4.20"
structopt = "0.3"
tokio = { version = "1.32.0", features = ["rt-multi-thread", "macros", "rt"] }
tokio = { version = "1.32.0", features = ["rt-multi-thread", "macros", "rt", "signal"] }
tokio-util = { version = "0.7.10", features = ["io", "io-util", "rt", "compat"] }
mlua = { version = "0.9.1", features = ["luau-jit", "vendored", "async", "send"] }
reqwest = { version = "0.11.22", features = ["stream"] }

View File

@@ -5,6 +5,7 @@ use std::net::{Ipv4Addr, Ipv6Addr};
use std::path::{Path, PathBuf};
use anyhow::anyhow;
use structopt::StructOpt;
use tokio::signal::unix::SignalKind;
mod handler;
mod engine;
@@ -62,7 +63,16 @@ async fn main() -> anyhow::Result<()> {
engine_impl.load_script(opts.script.clone()).await?;
local_set.spawn_local(engine_impl.run());
{
let engine = engine.clone();
let script = opts.script.clone();
let mut hup_stream = tokio::signal::unix::signal(SignalKind::hangup())?;
local_set.spawn_local(async move {
while let Some(_) = hup_stream.recv().await {
engine.load_script(script.clone()).await.ok();
}
});
}
let handler = handler::Handler::new(
engine.clone(),
opts.serve.as_ref()