Finished code for globals, but something's not working with client/server
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user