diff --git a/luprex/cpp/core/invocation.cpp b/luprex/cpp/core/invocation.cpp index 155f6f91..0d63497f 100644 --- a/luprex/cpp/core/invocation.cpp +++ b/luprex/cpp/core/invocation.cpp @@ -31,11 +31,12 @@ eng::string Invocation::debug_string() const { oss << "inv["; switch (kind_) { case InvocationKind::INVALID: oss << "invalid"; break; - case InvocationKind::LUA_CALL: oss << "lua_call"; break; - case InvocationKind::LUA_EXPR: oss << "lua"; break; + case InvocationKind::LUA_INVOKE: oss << "lua_invoke"; break; + case InvocationKind::LUA_PROBE: oss << "lua_probe"; break; + case InvocationKind::LUA_EXPR: oss << "lua_expr"; break; + case InvocationKind::LUA_SOURCE: oss << "lua_source"; break; case InvocationKind::FLUSH_PRINTS: oss << "flush_prints"; break; case InvocationKind::TICK: oss << "tick"; break; - case InvocationKind::LUA_SOURCE: oss << "lua_source"; break; default: oss << "UNKNOWN"; break; } oss << " a=" << actor_; diff --git a/luprex/cpp/core/lpxclient.cpp b/luprex/cpp/core/lpxclient.cpp index 8b2f60b9..d0cb1cdd 100644 --- a/luprex/cpp/core/lpxclient.cpp +++ b/luprex/cpp/core/lpxclient.cpp @@ -247,7 +247,16 @@ public: } virtual void event_call_function(InvocationKind kind, int64_t place_id, std::string_view datapk, StreamBuffer *retpk) override { - delayed_invocations_.emplace_back(kind, actor_id_, place_id, datapk); + switch (kind) { + case InvocationKind::LUA_PROBE: { + world_to_asynchronous(); + world_->probe_lua_call(actor_id_, place_id, datapk, retpk); + break; + } + default: { + delayed_invocations_.emplace_back(kind, actor_id_, place_id, datapk); + } + } } virtual void event_update() override { diff --git a/luprex/cpp/core/lpxserver.cpp b/luprex/cpp/core/lpxserver.cpp index e09f34fa..785990af 100644 --- a/luprex/cpp/core/lpxserver.cpp +++ b/luprex/cpp/core/lpxserver.cpp @@ -194,7 +194,17 @@ public: } virtual void event_call_function(InvocationKind kind, int64_t place_id, std::string_view datapk, StreamBuffer *retpk) override { - delayed_invocations_.emplace_back(kind, admin_id_, place_id, datapk); + switch (kind) { + case InvocationKind::LUA_PROBE: { + master_->snapshot(); + master_->probe_lua_call(admin_id_, place_id, datapk, retpk); + master_->rollback(); + break; + } + default: { + delayed_invocations_.emplace_back(kind, admin_id_, place_id, datapk); + } + } } virtual void event_update() override { diff --git a/luprex/cpp/core/world-core.cpp b/luprex/cpp/core/world-core.cpp index cd771eb5..5f4235c5 100644 --- a/luprex/cpp/core/world-core.cpp +++ b/luprex/cpp/core/world-core.cpp @@ -700,7 +700,7 @@ void World::run_unittests() { void World::invoke(const Invocation &inv) { switch (inv.kind()) { - case InvocationKind::LUA_CALL: + case InvocationKind::LUA_INVOKE: invoke_lua_call(inv.actor(), inv.place(), inv.datapack()); break; case InvocationKind::LUA_EXPR: diff --git a/luprex/ext/base-buffer.hpp b/luprex/ext/base-buffer.hpp index 07971072..ee3d22e3 100644 --- a/luprex/ext/base-buffer.hpp +++ b/luprex/ext/base-buffer.hpp @@ -543,7 +543,7 @@ public: int16_t read_int16() { return read_value_core(); } int32_t read_int32() { return read_value_core(); } int64_t read_int64() { return read_value_core(); } - + // Read other primitive types. // bool read_bool() { return (bool)read_uint8(); } diff --git a/luprex/lua/login.lua b/luprex/lua/login.lua index e0b45bb9..185b41ab 100644 --- a/luprex/lua/login.lua +++ b/luprex/lua/login.lua @@ -47,9 +47,9 @@ function bechar() makeclass("engio") function engio.myfunction(actor, place, a, b, c) print("Myfunction actor=", actor," place=", place) - pprint("A:", a) - pprint("B:", b) - pprint("C:", c) + print("A:", a) + print("B:", b) + print("C:", c) return {13, "chicken", {2,3,4}, false} end