#include "..\script_component.hpp" /* * Function: forge_server_db_fnc_initDB * Author: J. Schmidt * * Description: * Initializes the database system, creating the interface for other modules * * Arguments: * None * * Return Value: * Database interface object */ private _storeInterface = createHashMapObject [[ ["#type", "IStore"], ["#create", { private _storeRegistry = GETVAR(profileNamespace,FORGE_STORE_REG,createHashMap); _self set ["stores", _storeRegistry]; true }], ["_create", { params [["_name", "", [""]]]; if (_name isEqualTo "") exitWith { ERROR_MSG("Store name cannot be empty"); nil }; private _stores = _self get "stores"; private _store = createHashMap; _stores set [_name, _store]; _store }], ["_read", { params [["_name", "", [""]], ["_key", "", [""]]]; if (_name isEqualTo "") exitWith { ERROR_MSG("Store name cannot be empty"); nil }; private _stores = _self get "stores"; private _store = _stores get _name; if (isNil "_store") exitWith { ERROR_MSG_1("Store %1 not found",_name); nil }; if (_key isEqualTo "") then { _store } else { _store get _key }; }], ["_write", { params [["_name", "", [""]], ["_data", nil, ["", [], 0, true, createHashMap]]]; if (_name isEqualTo "" || isNil "_data") exitWith { ERROR_MSG("Store name and, or data cannot be empty"); nil }; private _stores = _self get "stores"; private _store = _self call ["_read", [_name]]; if (isNil "_store") exitWith { ERROR_MSG_1("Store %1 not found",_name); nil }; _stores set [_name, _data]; SETVAR(profileNamespace,FORGE_STORE_REG,_stores); saveMissionProfileNamespace; _store }], ["_update", { params [["_name", "", [""]], ["_key", "", [""]], ["_keyField", "", [""]], ["_data", nil, ["", [], 0, true, createHashMap]]]; if (_name isEqualTo "" || _key isEqualTo "" || _keyField isEqualTo "" || isNil "_data") exitWith { ERROR_MSG("Store name, key, key field and, or data cannot be empty"); nil }; private _stores = _self get "stores"; private _store = _self call ["_read", [_name]]; if (isNil "_store") exitWith { ERROR_MSG_1("Store %1 not found",_name); nil }; private _keyData = _store get _key; if (isNil "_keyData") exitWith { ERROR_MSG_2("Key %1 not found in store %2",_key,_name); nil }; _keyData set [_keyField, _data]; _store set [_key, _keyData]; _stores set [_name, _store]; _store }], ["_delete", { params [["_name", "", [""]]]; if (_name isEqualTo "") exitWith { ERROR_MSG("Store name cannot be empty"); false }; private _stores = _self get "stores"; private _store = _self call ["get", [_name]]; if (isNil "_store") exitWith { ERROR_MSG_1("Store %1 not found",_name); false }; _stores deleteAt _name; true }], ["set", { params [["_key", "", [""]], ["_value", nil, [[]]]]; if (_key isEqualTo "" || isNil "_value") exitWith { ERROR_MSG("Key and, or value cannot be empty") }; ["set", _key, "", -1, _value] call dragonfly_db_fnc_addTask; }], ["get", { params [["_key", "", [""]], ["_function", "", [""]], ["_call", false, [false]], ["_netId", "", [""]]]; if (_key isEqualTo "" || _function isEqualTo "") exitWith { ERROR_MSG("Key and, or function cannot be empty") }; ["get", _key, "", -1, [], _function, _call, _netId] call dragonfly_db_fnc_addTask; }], ["delete", { params [["_key", "", [""]]]; if (_key isEqualTo "") exitWith { ERROR_MSG("Key cannot be empty") }; ["del", _key] call dragonfly_db_fnc_addTask; }], ["hashGet", { params [["_keyField", "", [""]], ["_function", "", [""]], ["_call", false, [false]], ["_netId", "", [""]]]; if (_keyField isEqualTo "" || _function isEqualTo "") exitWith { ERROR_MSG("Key field and, or function cannot be empty") }; ["hget", "", _keyField, -1, [], _function, _call, _netId] call dragonfly_db_fnc_addTask; }], ["hashGetId", { params [["_key", "", [""]], ["_keyField", "", [""]], ["_function", "", [""]], ["_call", false, [false]], ["_netId", "", [""]]]; if (_key isEqualTo "" || _keyField isEqualTo "" || _function isEqualTo "") exitWith { ERROR_MSG("Key, key field and, or function cannot be empty") }; ["hgetid", _key, _keyField, -1, [], _function, _call, _netId] call dragonfly_db_fnc_addTask; }], ["hashGetAll", { params [["_function", "", [""]], ["_call", false, [false]], ["_netId", "", [""]]]; if (_function isEqualTo "") exitWith { ERROR_MSG("Function cannot be empty") }; ["hgetall", "", "", -1, [], _function, _call, _netId] call dragonfly_db_fnc_addTask; }], ["hashGetAllId", { params [["_key", "", [""]], ["_function", "", [""]], ["_call", false, [false]], ["_netId", "", [""]]]; if (_key isEqualTo "" || _function isEqualTo "") exitWith { ERROR_MSG("Key and, or function cannot be empty") }; ["hgetallid", _key, "", -1, [], _function, _call, _netId] call dragonfly_db_fnc_addTask; }], ["hashSet", { params [["_keyField", "", [""]], ["_value", nil, [[]]]]; if (_keyField isEqualTo "" || isNil "_value") exitWith { ERROR_MSG("Key field and, or value cannot be empty") }; ["hset", "", _keyField, -1, _value] call dragonfly_db_fnc_addTask; }], ["hashSetId", { params [["_key", "", [""]], ["_keyField", "", [""]], ["_value", nil, [[]]]]; if (_key isEqualTo "" || _keyField isEqualTo "" || isNil "_value") exitWith { ERROR_MSG("Key, keyField and, or value cannot be empty") }; ["hsetid", _key, _keyField, -1, _value] call dragonfly_db_fnc_addTask; }], ["hashSetBulk", { params [["_value", nil, [[]]]]; if (isNil "_value") exitWith { ERROR_MSG("Value cannot be empty") }; ["hsetbulk", "", "", -1, _value] call dragonfly_db_fnc_addTask; }], ["hashSetIdBulk", { params [["_value", nil, [[]]]]; if (isNil "_value") exitWith { ERROR_MSG("Value cannot be empty") }; ["hsetidbulk", "", "", -1, _value] call dragonfly_db_fnc_addTask; }], ["hashDelete", { params [["_keyField", "", [""]]]; if (_keyField isEqualTo "") exitWith { ERROR_MSG("Key field cannot be empty") }; ["hdel", "", _keyField] call dragonfly_db_fnc_addTask; }], ["hashDeleteId", { params [["_key", "", [""]], ["_keyField", "", [""]]]; if (_key isEqualTo "" || _keyField isEqualTo "") exitWith { ERROR_MSG("Key and, or key field cannot be empty") }; ["hdelid", _key, _keyField] call dragonfly_db_fnc_addTask; }], ["listAdd", { params [["_key", "", [""]], ["_value", nil, [[]]]]; if (_key isEqualTo "" || isNil "_value") exitWith { ERROR_MSG("Key and, or value cannot be empty") }; ["listadd", _key, "", -1, _value] call dragonfly_db_fnc_addTask; }], ["listGet", { params [["_key", "", [""]], ["_index", -1, [0]], ["_function", "", [""]], ["_call", false, [false]], ["_netId", "", [""]]]; if (_key isEqualTo "" || _index isEqualTo -1 || _function isEqualTo "") exitWith { ERROR_MSG("Key, index and, or function cannot be empty or -1") }; ["listidx", _key, "", _index, [], _function, _call, _netId] call dragonfly_db_fnc_addTask; }], ["listLoad", { params [["_key", "", [""]], ["_function", "", [""]], ["_call", false, [false]], ["_netId", "", [""]]]; if (_key isEqualTo "" || _function isEqualTo "") exitWith { ERROR_MSG("Key and, or function cannot be empty") }; ["listrng", _key, "", -1, [], _function, _call, _netId] call dragonfly_db_fnc_addTask; }], ["listRemove", { params [["_key", "", [""]], ["_index", -1, [0]]]; if (_key isEqualTo "" || _index isEqualTo -1) exitWith { ERROR_MSG("Key and, or index cannot be empty or -1") }; ["listrem", _key, "", _index] call dragonfly_db_fnc_addTask; }], ["listSet", { params [["_key", "", [""]], ["_index", -1, [0]], ["_value", nil, [[]]]]; if (_key isEqualTo "" || _index isEqualTo -1 || isNil "_value") exitWith { ERROR_MSG("Key, index and, or value cannot be empty or -1") }; ["listset", _key, "", _index, _value] call dragonfly_db_fnc_addTask; }] ]]; SETMVAR(FORGE_STORE_REG,_storeInterface); SETPVAR(missionNamespace,FORGE_STORE_REG,_storeInterface); GETMVAR(FORGE_STORE_REG,_storeInterface)