修复BUG

This commit is contained in:
xx
2024-06-04 10:09:11 +08:00
parent 9018c37be6
commit eee37e1329
3 changed files with 35 additions and 16 deletions

View File

@@ -22,7 +22,7 @@ bool config::open(const std::string& ini_filepath)
// 配置文件目录
{
std::string ini_dir = ylib::file::parent_dir(ini_filepath);
src_content = strutils::replace(src_content, "${config_dir}", ini_dir);
src_content = strutils::replace(strutils::replace(src_content, "${config_dir}", ini_dir), '\\', '/');
}

View File

@@ -16,7 +16,7 @@ std::string module::timer::add(const std::string& name, const std::string& filep
filepath2 = sConfig->scripts.app_dir + "/" + filepath;
else
{
std::string filepath2 = module_manager::getInstance()->search(filepath);
filepath2 = module_manager::getInstance()->search(filepath);
if (filepath2.empty())
{
std::string result;
@@ -41,6 +41,7 @@ std::string module::timer::add(const std::string& name, const std::string& filep
ti.loop = loop;
ti.msec = msec;
ti.exec_msec = time::now_msec() + msec;
module::timer::getInstance()->m_list.emplace(name, ti);
module::timer::getInstance()->m_insert = true;
return "";
@@ -82,22 +83,29 @@ bool module::timer::run()
return 1000;
return wait_msec;
};
auto exec_func = [&](const std::string& filepath,const std::string& funname)->bool {
auto lua = sStateMgr->get();
auto exec_func = [&](timer_info& ti)->bool {
std::string exception_string;
try
{
auto lbResult = lua->state->load_file(filepath);
if (lbResult.valid() == false)
// 加载LUA文件
if (ti.lua == nullptr)
{
sol::error err = lbResult;
throw ylib::exception("Failed to load script, " + std::string(err.what()));
ti.lua = sStateMgr->get();
auto lbResult = ti.lua->state->load_file(ti.filepath);
if (lbResult.valid() == false)
{
sol::error err = lbResult;
throw ylib::exception("Failed to load script, " + std::string(err.what()));
}
lbResult();
}
lbResult();
if (funname.empty() == false)
// 加载函数
if (ti.funname != "" && ti.function.valid() == false)
ti.function = (*ti.lua->state)[ti.funname];
// 执行函数
if (ti.function.valid())
{
auto result = (*lua->state)[funname]();
auto result = ti.function();
if (!result.valid()) {
sol::error err = result;
throw ylib::exception(err.what());
@@ -110,7 +118,7 @@ bool module::timer::run()
{
exception_string = e.what();
if (sConfig->website.debug)
LOG_ERROR("[timer][" + filepath + "]: " + e.what());
LOG_ERROR("[timer][" + ti.filepath + "]: " + e.what());
return false;
}
return false;
@@ -132,8 +140,7 @@ bool module::timer::run()
if (iter->second.exec_msec <= now_msec)
{
bool ready_remove = false;
auto ti = iter->second;
if (exec_func(ti.filepath,ti.funname) == false)
if (exec_func(iter->second) == false)
ready_remove = true;
if (ready_remove == false)
{
@@ -154,7 +161,16 @@ bool module::timer::run()
}
std::string name;
while (m_removed.pop(name))
m_list.erase(name);
{
auto iter = m_list.find(name);
if (iter != m_list.end())
{
iter->second.lua->state->collect_garbage();
sStateMgr->push(iter->second.lua);
m_list.erase(iter);
}
}
return true;
}

View File

@@ -1,6 +1,7 @@
#pragma once
#include "sol/sol.hpp"
#include "imodule.h"
#include "core/structs.h"
#include "base/singleton.hpp"
#include "util/thread.h"
#include "util/queue.hpp"
@@ -15,6 +16,8 @@ namespace module
bool loop = false;
timestamp exec_msec = 0;
timestamp msec = 0;
luastate* lua = nullptr;
sol::function function;
};
/// <summary>
/// 定时器