Add update shop & owner, get shop, better error handling

This commit is contained in:
Tyler Hallada 2020-10-18 02:34:34 -04:00
parent 083c6a7f6e
commit c42b29af5d
5 changed files with 145 additions and 9 deletions

View File

@ -33,3 +33,37 @@ bool CreateOwner(RE::StaticFunctionTag*, RE::BSFixedString api_url, RE::BSFixedS
thread.detach(); thread.detach();
return true; return true;
} }
int UpdateOwnerImpl(RE::BSFixedString api_url, RE::BSFixedString api_key, uint32_t id, RE::BSFixedString name, uint32_t mod_version, RE::TESQuest* quest)
{
logger::info("Entered UpdateOwnerImpl");
if (!quest) {
logger::error("UpdateOwner quest is null!");
return -1;
}
SKSE::RegistrationMap<int> regMap = SKSE::RegistrationMap<int>();
regMap.Register(quest, RE::BSFixedString("OnUpdateOwner"));
logger::info(FMT_STRING("UpdateOwner api_url: {}"), api_url);
logger::info(FMT_STRING("UpdateOwner api_key: {}"), api_key);
logger::info(FMT_STRING("UpdateOwner name: {}"), name);
logger::info(FMT_STRING("UpdateOwner mod_version: {}"), mod_version);
int owner_id = update_owner(api_url.c_str(), api_key.c_str(), id, name.c_str(), mod_version);
logger::info(FMT_STRING("UpdateOwner result: {}"), owner_id);
regMap.SendEvent(owner_id);
regMap.Unregister(quest);
return owner_id;
}
bool UpdateOwner(RE::StaticFunctionTag*, RE::BSFixedString api_url, RE::BSFixedString api_key, uint32_t id, RE::BSFixedString name, uint32_t mod_version, RE::TESQuest* quest) {
logger::info("Entered CreateOwner");
if (!quest) {
logger::error("UpdateOwner quest is null!");
return false;
}
std::thread thread(UpdateOwnerImpl, api_url, api_key, id, name, mod_version, quest);
thread.detach();
return true;
}

View File

@ -1,3 +1,4 @@
#pragma once #pragma once
bool CreateOwner(RE::StaticFunctionTag*, RE::BSFixedString api_url, RE::BSFixedString api_key, RE::BSFixedString name, uint32_t mod_version, RE::TESQuest* quest); bool CreateOwner(RE::StaticFunctionTag*, RE::BSFixedString api_url, RE::BSFixedString api_key, RE::BSFixedString name, uint32_t mod_version, RE::TESQuest* quest);
bool UpdateOwner(RE::StaticFunctionTag*, RE::BSFixedString api_url, RE::BSFixedString api_key, uint32_t id, RE::BSFixedString name, uint32_t mod_version, RE::TESQuest* quest);

View File

@ -1,25 +1,35 @@
#include "bindings.h" #include "bindings.h"
int CreateShopImpl(RE::BSFixedString api_url, RE::BSFixedString api_key, RE::BSFixedString name, RE::BSFixedString description, RE::TESQuest* quest) void CreateShopImpl(RE::BSFixedString api_url, RE::BSFixedString api_key, RE::BSFixedString name, RE::BSFixedString description, RE::TESQuest* quest)
{ {
logger::info("Entered CreateShopImpl"); logger::info("Entered CreateShopImpl");
if (!quest) { if (!quest) {
logger::error("CreateShop quest is null!"); logger::error("CreateShop quest is null!");
return -1; return;
} }
SKSE::RegistrationMap<int> regMap = SKSE::RegistrationMap<int>(); SKSE::RegistrationMap<int, RE::BSFixedString, RE::BSFixedString> successReg = SKSE::RegistrationMap<int, RE::BSFixedString, RE::BSFixedString>();
regMap.Register(quest, RE::BSFixedString("OnCreateShop")); successReg.Register(quest, RE::BSFixedString("OnCreateShopSuccess"));
SKSE::RegistrationMap<RE::BSFixedString> failReg = SKSE::RegistrationMap<RE::BSFixedString>();
failReg.Register(quest, RE::BSFixedString("OnCreateShopFail"));
logger::info(FMT_STRING("CreateShop api_url: {}"), api_url); logger::info(FMT_STRING("CreateShop api_url: {}"), api_url);
logger::info(FMT_STRING("CreateShop api_key: {}"), api_key); logger::info(FMT_STRING("CreateShop api_key: {}"), api_key);
logger::info(FMT_STRING("CreateShop name: {}"), name); logger::info(FMT_STRING("CreateShop name: {}"), name);
logger::info(FMT_STRING("CreateShop description: {}"), description); logger::info(FMT_STRING("CreateShop description: {}"), description);
int shop_id = create_shop(api_url.c_str(), api_key.c_str(), name.c_str(), description.c_str()); FFIResult<ShopRecord> result = create_shop(api_url.c_str(), api_key.c_str(), name.c_str(), description.c_str());
logger::info(FMT_STRING("CreateShop result: {}"), shop_id); if (result.IsOk()) {
regMap.SendEvent(shop_id); ShopRecord shop = result.AsOk();
regMap.Unregister(quest); logger::info(FMT_STRING("CreateShop result Ok: {:d}"), shop.id);
return shop_id; successReg.SendEvent(shop.id, RE::BSFixedString(shop.name), RE::BSFixedString(shop.description));
}
else {
const char* error = result.AsErr();
logger::error(FMT_STRING("CreateShop result Err: {}"), error);
failReg.SendEvent(RE::BSFixedString(error));
}
successReg.Unregister(quest);
failReg.Unregister(quest);
} }
bool CreateShop(RE::StaticFunctionTag*, RE::BSFixedString api_url, RE::BSFixedString api_key, RE::BSFixedString name, RE::BSFixedString description, RE::TESQuest* quest) { bool CreateShop(RE::StaticFunctionTag*, RE::BSFixedString api_url, RE::BSFixedString api_key, RE::BSFixedString name, RE::BSFixedString description, RE::TESQuest* quest) {
@ -33,3 +43,89 @@ bool CreateShop(RE::StaticFunctionTag*, RE::BSFixedString api_url, RE::BSFixedSt
thread.detach(); thread.detach();
return true; return true;
} }
void UpdateShopImpl(RE::BSFixedString api_url, RE::BSFixedString api_key, uint32_t id, RE::BSFixedString name, RE::BSFixedString description, RE::TESQuest* quest)
{
logger::info("Entered UpdateShopImpl");
if (!quest) {
logger::error("UpdateShop quest is null!");
return;
}
SKSE::RegistrationMap<int, RE::BSFixedString, RE::BSFixedString> successReg = SKSE::RegistrationMap<int, RE::BSFixedString, RE::BSFixedString>();
successReg.Register(quest, RE::BSFixedString("OnUpdateShopSuccess"));
SKSE::RegistrationMap<RE::BSFixedString> failReg = SKSE::RegistrationMap<RE::BSFixedString>();
failReg.Register(quest, RE::BSFixedString("OnUpdateShopFail"));
logger::info(FMT_STRING("UpdateShop api_url: {}"), api_url);
logger::info(FMT_STRING("UpdateShop api_key: {}"), api_key);
logger::info(FMT_STRING("UpdateShop name: {}"), name);
logger::info(FMT_STRING("UpdateShop description: {}"), description);
FFIResult<ShopRecord> result = update_shop(api_url.c_str(), api_key.c_str(), id, name.c_str(), description.c_str());
if (result.IsOk()) {
ShopRecord shop = result.AsOk();
logger::info(FMT_STRING("UpdateShop result Ok: {:d}"), shop.id);
successReg.SendEvent(shop.id, RE::BSFixedString(shop.name), RE::BSFixedString(shop.description));
}
else {
const char* error = result.AsErr();
logger::error(FMT_STRING("UpdateShop result Err: {}"), error);
failReg.SendEvent(RE::BSFixedString(error));
}
successReg.Unregister(quest);
failReg.Unregister(quest);
}
bool UpdateShop(RE::StaticFunctionTag*, RE::BSFixedString api_url, RE::BSFixedString api_key, uint32_t id, RE::BSFixedString name, RE::BSFixedString description, RE::TESQuest* quest) {
logger::info("Entered UpdateShop");
if (!quest) {
logger::error("UpdateShop quest is null!");
return false;
}
std::thread thread(UpdateShopImpl, api_url, api_key, id, name, description, quest);
thread.detach();
return true;
}
void GetShopImpl(RE::BSFixedString api_url, RE::BSFixedString api_key, uint32_t id, RE::TESQuest* quest)
{
logger::info("Entered GetShopImpl");
if (!quest) {
logger::error("GetShop quest is null!");
return;
}
SKSE::RegistrationMap<int, RE::BSFixedString, RE::BSFixedString> successReg = SKSE::RegistrationMap<int, RE::BSFixedString, RE::BSFixedString>();
successReg.Register(quest, RE::BSFixedString("OnGetShopSuccess"));
SKSE::RegistrationMap<RE::BSFixedString> failReg = SKSE::RegistrationMap<RE::BSFixedString>();
failReg.Register(quest, RE::BSFixedString("OnGetShopFail"));
logger::info(FMT_STRING("GetShop api_url: {}"), api_url);
logger::info(FMT_STRING("GetShop api_key: {}"), api_key);
FFIResult<ShopRecord> result = get_shop(api_url.c_str(), api_key.c_str(), id);
if (result.IsOk()) {
ShopRecord shop = result.AsOk();
logger::info(FMT_STRING("GetShop result Ok: {:d}"), shop.id);
successReg.SendEvent(shop.id, RE::BSFixedString(shop.name), RE::BSFixedString(shop.description));
}
else {
const char* error = result.AsErr();
logger::error(FMT_STRING("GetShop result Err: {}"), error);
failReg.SendEvent(RE::BSFixedString(error));
}
successReg.Unregister(quest);
failReg.Unregister(quest);
}
bool GetShop(RE::StaticFunctionTag*, RE::BSFixedString api_url, RE::BSFixedString api_key, uint32_t id, RE::TESQuest* quest) {
logger::info("Entered GetShop");
if (!quest) {
logger::error("GetShop quest is null!");
return false;
}
std::thread thread(GetShopImpl, api_url, api_key, id, quest);
thread.detach();
return true;
}

View File

@ -1,3 +1,5 @@
#pragma once #pragma once
bool CreateShop(RE::StaticFunctionTag*, RE::BSFixedString api_url, RE::BSFixedString api_key, RE::BSFixedString name, RE::BSFixedString description, RE::TESQuest* quest); bool CreateShop(RE::StaticFunctionTag*, RE::BSFixedString api_url, RE::BSFixedString api_key, RE::BSFixedString name, RE::BSFixedString description, RE::TESQuest* quest);
bool UpdateShop(RE::StaticFunctionTag*, RE::BSFixedString api_url, RE::BSFixedString api_key, uint32_t id, RE::BSFixedString name, RE::BSFixedString description, RE::TESQuest* quest);
bool GetShop(RE::StaticFunctionTag*, RE::BSFixedString api_url, RE::BSFixedString api_key, uint32_t id, RE::TESQuest* quest);

View File

@ -13,7 +13,10 @@ bool RegisterFuncs(RE::BSScript::IVirtualMachine* a_vm)
a_vm->RegisterFunction("StatusCheck", "BRClient", StatusCheck); a_vm->RegisterFunction("StatusCheck", "BRClient", StatusCheck);
a_vm->RegisterFunction("GenerateApiKey", "BRClient", GenerateApiKey); a_vm->RegisterFunction("GenerateApiKey", "BRClient", GenerateApiKey);
a_vm->RegisterFunction("Create", "BROwner", CreateOwner); a_vm->RegisterFunction("Create", "BROwner", CreateOwner);
a_vm->RegisterFunction("Update", "BROwner", UpdateOwner);
a_vm->RegisterFunction("Create", "BRShop", CreateShop); a_vm->RegisterFunction("Create", "BRShop", CreateShop);
a_vm->RegisterFunction("Update", "BRShop", UpdateShop);
a_vm->RegisterFunction("Get", "BRShop", GetShop);
a_vm->RegisterFunction("Create", "BRInteriorRefList", CreateInteriorRefList); a_vm->RegisterFunction("Create", "BRInteriorRefList", CreateInteriorRefList);
a_vm->RegisterFunction("ClearCell", "BRInteriorRefList", ClearCell); a_vm->RegisterFunction("ClearCell", "BRInteriorRefList", ClearCell);
a_vm->RegisterFunction("Load", "BRInteriorRefList", LoadInteriorRefList); a_vm->RegisterFunction("Load", "BRInteriorRefList", LoadInteriorRefList);