[Server] Change signature of TimerController::kill, validate callback

sol2-server-rewrite
Koncord 7 years ago
parent 51a92bcf8f
commit 2019128d92

@ -50,14 +50,14 @@ Timer::Timer(sol::environment &env, sol::function &callback, long msec, sol::tab
data(std::move(args)), data(std::move(args)),
env(std::move(env)) env(std::move(env))
{ {
printf("Timer::Timer()\n"); LOG_MESSAGE_SIMPLE(Log::LOG_TRACE, "Timer::Timer()");
targetMsec = msec; targetMsec = msec;
end = true; end = true;
} }
Timer::~Timer() Timer::~Timer()
{ {
printf("Timer::~Timer()\n"); LOG_MESSAGE_SIMPLE(Log::LOG_TRACE, "Timer::~Timer()");
} }
void Timer::tick() void Timer::tick()
@ -71,7 +71,13 @@ void Timer::tick()
if (time - startTime >= targetMsec) if (time - startTime >= targetMsec)
{ {
end = true; end = true;
callback.call(data); if(callback.valid())
{
LOG_MESSAGE_SIMPLE(Log::LOG_TRACE, "Timer::tick time expired, callback %p valid", callback.registry_index());
callback.call(data);
}
else
LOG_MESSAGE_SIMPLE(Log::LOG_TRACE, "Timer::tick time expired, callback invalid");
} }
} }
@ -94,12 +100,12 @@ std::shared_ptr<Timer> TimerController::create(sol::environment env, sol::functi
return timers.back(); return timers.back();
} }
void TimerController::kill(std::shared_ptr<Timer> timer) void TimerController::kill(const std::shared_ptr<Timer> &timer)
{ {
auto it = find(timers.begin(), timers.end(), timer); auto it = find(timers.begin(), timers.end(), timer);
if (it != timers.end()) if (it != timers.end())
{ {
printf("TimerController::kill\n"); LOG_MESSAGE_SIMPLE(Log::LOG_TRACE, "Timer %p killed\n", timer.get());
timers.erase(it); timers.erase(it);
} }
} }

@ -38,7 +38,7 @@ public:
static void Init(LuaState &lua); static void Init(LuaState &lua);
public: public:
std::shared_ptr<Timer> create(sol::environment env, sol::function callback, long msec, sol::table args); std::shared_ptr<Timer> create(sol::environment env, sol::function callback, long msec, sol::table args);
void kill(std::shared_ptr<Timer> timer); void kill(const std::shared_ptr<Timer> &timer);
void terminate(); void terminate();
void tick(); void tick();

Loading…
Cancel
Save