Finished code for globals, but something's not working with client/server

This commit is contained in:
2023-04-10 16:00:47 -04:00
parent ef7d0ec365
commit ac383c616f
9 changed files with 230 additions and 55 deletions

View File

@@ -1,7 +1,6 @@
#include "world.hpp"
#include "pprint.hpp"
#include "serializelua.hpp"
#include <cmath>
static void tangible_getall(LuaCoreStack &LS0, LuaSlot list, const util::IdVector &idv) {
@@ -854,47 +853,6 @@ LuaDefine(http_post, "request",
return lfn_http_request(L, "POST");
}
void global_set(LuaCoreStack &LS0, const eng::string &gvar, LuaSlot value) {
lua_State *L = LS0.state();
World *w = World::fetch_global_pointer(L);
LuaVar globaldb, copy;
LuaOldStack LS(L, globaldb, copy);
// Serialize then deserialize the data, to produce a copy.
StreamBuffer sb;
eng::string error = serialize_lua(LS, value, &sb);
if (!error.empty()) {
luaL_error(L, "%s", error.c_str());
return;
}
eng::string serialized(sb.view());
error = deserialize_lua(LS, copy, &sb);
if (!error.empty()) {
luaL_error(L, "%s", error.c_str());
return;
}
// Store the copy in the globalDB.
LS.rawget(globaldb, LuaRegistry, "globaldb");
LS.rawset(globaldb, gvar, copy);
// Store the serialized blob in the master model.
w->gvar_to_serial_.emplace(gvar, serialized);
// In an authoritative model only, update the assignment counters.
if (w->is_authoritative()) {
int64_t newassign = w->next_gvar_assign_++;
auto oldassigniter = w->gvar_to_assign_.find(gvar);
if (oldassigniter != w->gvar_to_assign_.end()) {
int64_t oldassign = oldassigniter->second;
w->assign_to_gvar_.erase(oldassign);
}
w->assign_to_gvar_.emplace(newassign, gvar);
w->gvar_to_assign_[gvar] = newassign;
}
LS.result();
}
LuaDefine(global_set, "varname, value",
"|Store data in the global data table."
"|"
@@ -943,7 +901,8 @@ LuaDefine(global_set, "varname, value",
return LS.result();
}
global_set(LS, gvar, value);
World *w = World::fetch_global_pointer(L);
w->set_global(LS, gvar, value);
return LS.result();
}
@@ -994,7 +953,8 @@ LuaDefine(global_once, "varname",
}
LS.set(result, true);
global_set(LS, gvar, result);
World *w = World::fetch_global_pointer(L);
w->set_global(LS, gvar, result);
return LS.result();
}
@@ -1018,6 +978,7 @@ LuaDefine(global_clearonce, "varname",
gvar += ":once";
LS.set(null, LuaNil);
global_set(LS, gvar, null);
World *w = World::fetch_global_pointer(L);
w->set_global(LS, gvar, null);
return LS.result();
}