Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 17 additions & 6 deletions code/components/citizen-resources-client/src/KVScriptFunctions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,30 +100,32 @@ static std::string FormatKey(const char* key, const std::string& resource = {})
return "res:" + resName + ":" + key;
}

template<bool sync = true>
static void PutResourceKvp(fx::ScriptContext& context, const char* data, size_t size)
{
auto db = EnsureDatabase();
auto key = FormatKey(context.CheckArgument<const char*>(0));

leveldb::WriteOptions options;
options.sync = true;
options.sync = sync;

db->Put(options, key, leveldb::Slice{ data, size });
}

template<typename T>
template<typename T, bool sync = true>
static void SetResourceKvp(fx::ScriptContext& context)
{
msgpack::sbuffer buffer;
msgpack::packer<msgpack::sbuffer> packer(buffer);
packer.pack(std::is_pointer_v<T> ? context.CheckArgument<T>(1) : context.GetArgument<T>(1));

PutResourceKvp(context, buffer.data(), buffer.size());
PutResourceKvp<sync>(context, buffer.data(), buffer.size());
}

template<bool sync = true>
static void SetResourceKvpRaw(fx::ScriptContext& context)
{
PutResourceKvp(context, context.CheckArgument<const char*>(1), context.GetArgument<size_t>(2));
PutResourceKvp<sync>(context, context.CheckArgument<const char*>(1), context.GetArgument<size_t>(2));
}

struct AnyType {};
Expand Down Expand Up @@ -319,12 +321,15 @@ static void EndFindKvp(fx::ScriptContext& context)
handle->dbIter.reset();
}

template<bool sync = true>
static void DeleteResourceKvp(fx::ScriptContext& context)
{
auto db = EnsureDatabase();
auto key = FormatKey(context.CheckArgument<const char*>(0));
leveldb::WriteOptions options;
options.sync = sync;

db->Delete(leveldb::WriteOptions{}, key);
db->Delete(options, key);
}

#include <VFSStreamDevice.h>
Expand Down Expand Up @@ -580,10 +585,16 @@ static InitFunction initFunction([]()
fx::ScriptEngine::RegisterNativeHandler("GET_EXTERNAL_KVP_STRING", GetExternalKvp<const char*>);
fx::ScriptEngine::RegisterNativeHandler("GET_EXTERNAL_KVP_FLOAT", GetExternalKvp<float>);

fx::ScriptEngine::RegisterNativeHandler("DELETE_RESOURCE_KVP", DeleteResourceKvp);
fx::ScriptEngine::RegisterNativeHandler("DELETE_RESOURCE_KVP", DeleteResourceKvp<true>);

fx::ScriptEngine::RegisterNativeHandler("START_FIND_KVP", StartFindKvp);
fx::ScriptEngine::RegisterNativeHandler("START_FIND_EXTERNAL_KVP", StartFindExternalKvp);
fx::ScriptEngine::RegisterNativeHandler("FIND_KVP", FindKvp);
fx::ScriptEngine::RegisterNativeHandler("END_FIND_KVP", EndFindKvp);

// asynchronous
fx::ScriptEngine::RegisterNativeHandler("SET_RESOURCE_KVP_NO_SYNC", SetResourceKvp<const char*, false>);
fx::ScriptEngine::RegisterNativeHandler("SET_RESOURCE_KVP_INT_NO_SYNC", SetResourceKvp<int, false>);
fx::ScriptEngine::RegisterNativeHandler("SET_RESOURCE_KVP_FLOAT_NO_SYNC", SetResourceKvp<float, false>);
fx::ScriptEngine::RegisterNativeHandler("DELETE_RESOURCE_KVP_NO_SYNC", DeleteResourceKvp<false>);
});
2 changes: 1 addition & 1 deletion ext/native-decls/kvp/DeleteResourceKvpNoSync.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
ns: CFX
apiset: server
apiset: shared
---
## DELETE_RESOURCE_KVP_NO_SYNC

Expand Down
2 changes: 1 addition & 1 deletion ext/native-decls/kvp/SetResourceKvpFloatNoSync.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
ns: CFX
apiset: server
apiset: shared
---
## SET_RESOURCE_KVP_FLOAT_NO_SYNC

Expand Down
2 changes: 1 addition & 1 deletion ext/native-decls/kvp/SetResourceKvpIntNoSync.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
ns: CFX
apiset: server
apiset: shared
---
## SET_RESOURCE_KVP_INT_NO_SYNC

Expand Down
2 changes: 1 addition & 1 deletion ext/native-decls/kvp/SetResourceKvpNoSync.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
ns: CFX
apiset: server
apiset: shared
---
## SET_RESOURCE_KVP_NO_SYNC

Expand Down