- Add request hydration, submission, closing, and response handling - Wire UI events for dispatch orders, support requests, and map focus - Expand dispatcher layout for alerts, requests, and detail views
210 lines
7.9 KiB
Plaintext
210 lines
7.9 KiB
Plaintext
#include "..\script_component.hpp"
|
|
|
|
/*
|
|
* File: fnc_initPersistenceService.sqf
|
|
* Author: IDSolutions
|
|
* Date: 2026-03-31
|
|
* Public: No
|
|
*
|
|
* Description:
|
|
* Initializes the CAD extension-state service that bridges live SQF
|
|
* state to the Rust extension for hot CAD storage and recent history.
|
|
*
|
|
* Arguments:
|
|
* None
|
|
*
|
|
* Return Value:
|
|
* CAD persistence service object [HASHMAP OBJECT]
|
|
*
|
|
* Example:
|
|
* call forge_server_cad_fnc_initPersistenceService
|
|
*/
|
|
|
|
#pragma hemtt ignore_variables ["_self"]
|
|
GVAR(PersistenceServiceBaseClass) = compileFinal createHashMapFromArray [
|
|
["#type", "CadPersistenceServiceBaseClass"],
|
|
["makeResult", compileFinal {
|
|
params [
|
|
["_success", false, [false]],
|
|
["_data", nil, [createHashMap, []]]
|
|
];
|
|
|
|
createHashMapFromArray [
|
|
["success", _success],
|
|
["data", _data]
|
|
]
|
|
}],
|
|
["loadObject", compileFinal {
|
|
params [["_function", "", [""]], ["_arguments", [], [[]]]];
|
|
|
|
private _result = _self call ["makeResult", [false, createHashMap]];
|
|
if (_function isEqualTo "") exitWith { _result };
|
|
|
|
[_function, _arguments] call EFUNC(extension,extCall) params ["_payload", "_isSuccess"];
|
|
if (!_isSuccess || { !(_payload isEqualType "") } || { (_payload find "Error:") == 0 }) exitWith {
|
|
_result
|
|
};
|
|
|
|
private _data = fromJSON _payload;
|
|
if !(_data isEqualType createHashMap) exitWith { _result };
|
|
|
|
_result set ["success", true];
|
|
_result set ["data", _data];
|
|
_result
|
|
}],
|
|
["loadCollection", compileFinal {
|
|
params [["_function", "", [""]], ["_arguments", [], [[]]]];
|
|
|
|
private _result = _self call ["makeResult", [false, []]];
|
|
if (_function isEqualTo "") exitWith { _result };
|
|
|
|
[_function, _arguments] call EFUNC(extension,extCall) params ["_payload", "_isSuccess"];
|
|
if (!_isSuccess || { !(_payload isEqualType "") } || { (_payload find "Error:") == 0 }) exitWith {
|
|
_result
|
|
};
|
|
|
|
private _data = fromJSON _payload;
|
|
if !(_data isEqualType []) exitWith { _result };
|
|
|
|
_result set ["success", true];
|
|
_result set ["data", _data];
|
|
_result
|
|
}],
|
|
["loadRegistry", compileFinal {
|
|
params [["_function", "", [""]], ["_idField", "", [""]]];
|
|
|
|
private _result = _self call ["makeResult", [false, createHashMap]];
|
|
if (_function isEqualTo "" || { _idField isEqualTo "" }) exitWith { _result };
|
|
|
|
private _collectionResult = _self call ["loadCollection", [_function, []]];
|
|
if !(_collectionResult getOrDefault ["success", false]) exitWith { _result };
|
|
|
|
private _registry = createHashMap;
|
|
{
|
|
if !(_x isEqualType createHashMap) then { continue; };
|
|
private _entryId = _x getOrDefault [_idField, ""];
|
|
if (_entryId isEqualTo "") then { continue; };
|
|
_registry set [_entryId, +_x];
|
|
} forEach (_collectionResult getOrDefault ["data", []]);
|
|
|
|
_result set ["success", true];
|
|
_result set ["data", _registry];
|
|
_result
|
|
}],
|
|
["saveEntry", compileFinal {
|
|
params [
|
|
["_function", "", [""]],
|
|
["_entryID", "", [""]],
|
|
["_entry", createHashMap, [createHashMap]]
|
|
];
|
|
|
|
if (_function isEqualTo "" || { _entryID isEqualTo "" } || { _entry isEqualTo createHashMap }) exitWith { false };
|
|
|
|
[_function, [_entryID, toJSON _entry]] call EFUNC(extension,extCall) params ["_payload", "_isSuccess"];
|
|
_isSuccess && { !(_payload isEqualType "") || { (_payload find "Error:") != 0 } }
|
|
}],
|
|
["deleteEntry", compileFinal {
|
|
params [["_function", "", [""]], ["_entryID", "", [""]]];
|
|
|
|
if (_function isEqualTo "" || { _entryID isEqualTo "" }) exitWith { false };
|
|
|
|
[_function, [_entryID]] call EFUNC(extension,extCall) params ["_payload", "_isSuccess"];
|
|
_isSuccess && { !(_payload isEqualType "") || { (_payload find "Error:") != 0 } }
|
|
}],
|
|
["appendActivity", compileFinal {
|
|
params [["_entry", createHashMap, [createHashMap]]];
|
|
|
|
if (_entry isEqualTo createHashMap) exitWith { false };
|
|
|
|
["cad:activity:append", [toJSON _entry]] call EFUNC(extension,extCall) params ["_payload", "_isSuccess"];
|
|
_isSuccess && { !(_payload isEqualType "") || { (_payload find "Error:") != 0 } }
|
|
}],
|
|
["loadActivity", compileFinal {
|
|
_self call ["loadCollection", ["cad:activity:recent", [str 50]]]
|
|
}],
|
|
["buildHydratePayload", compileFinal {
|
|
_self call ["loadObject", ["cad:view:hydrate", [toJSON (_this # 0)]]]
|
|
}],
|
|
["loadAssignments", compileFinal {
|
|
_self call ["loadRegistry", ["cad:assignments:list", "taskId"]]
|
|
}],
|
|
["assignAssignment", compileFinal {
|
|
_self call ["loadObject", ["cad:assignments:assign", [_this # 0, toJSON (_this # 1)]]]
|
|
}],
|
|
["acknowledgeAssignment", compileFinal {
|
|
_self call ["loadObject", ["cad:assignments:acknowledge", [_this # 0, toJSON (_this # 1)]]]
|
|
}],
|
|
["declineAssignment", compileFinal {
|
|
_self call ["loadObject", ["cad:assignments:decline", [_this # 0, toJSON (_this # 1)]]]
|
|
}],
|
|
["saveAssignment", compileFinal {
|
|
_self call ["saveEntry", ["cad:assignments:upsert", _this # 0, _this # 1]]
|
|
}],
|
|
["deleteAssignment", compileFinal {
|
|
_self call ["deleteEntry", ["cad:assignments:delete", _this # 0]]
|
|
}],
|
|
["loadDispatchOrders", compileFinal {
|
|
_self call ["loadRegistry", ["cad:orders:list", "taskID"]]
|
|
}],
|
|
["createDispatchOrder", compileFinal {
|
|
params [
|
|
["_orderSeed", createHashMap, [createHashMap]],
|
|
["_assignmentSeed", createHashMap, [createHashMap]]
|
|
];
|
|
|
|
_self call ["loadObject", ["cad:orders:create", [toJSON (createHashMapFromArray [
|
|
["order", _orderSeed],
|
|
["assignment", _assignmentSeed]
|
|
])]]]
|
|
}],
|
|
["createDispatchOrderFromContext", compileFinal {
|
|
_self call ["loadObject", ["cad:orders:create_from_context", [toJSON (_this # 0)]]]
|
|
}],
|
|
["closeDispatchOrder", compileFinal {
|
|
_self call ["loadObject", ["cad:orders:close", [_this # 0]]]
|
|
}],
|
|
["saveDispatchOrder", compileFinal {
|
|
_self call ["saveEntry", ["cad:orders:upsert", _this # 0, _this # 1]]
|
|
}],
|
|
["deleteDispatchOrder", compileFinal {
|
|
_self call ["deleteEntry", ["cad:orders:delete", _this # 0]]
|
|
}],
|
|
["loadRequests", compileFinal {
|
|
_self call ["loadRegistry", ["cad:requests:list", "requestId"]]
|
|
}],
|
|
["submitSupportRequest", compileFinal {
|
|
_self call ["loadObject", ["cad:requests:submit", [toJSON (_this # 0)]]]
|
|
}],
|
|
["submitSupportRequestFromContext", compileFinal {
|
|
_self call ["loadObject", ["cad:requests:submit_from_context", [toJSON (_this # 0)]]]
|
|
}],
|
|
["closeSupportRequest", compileFinal {
|
|
_self call ["loadObject", ["cad:requests:close", [_this # 0]]]
|
|
}],
|
|
["saveRequest", compileFinal {
|
|
_self call ["saveEntry", ["cad:requests:upsert", _this # 0, _this # 1]]
|
|
}],
|
|
["deleteRequest", compileFinal {
|
|
_self call ["deleteEntry", ["cad:requests:delete", _this # 0]]
|
|
}],
|
|
["loadGroupProfiles", compileFinal {
|
|
_self call ["loadRegistry", ["cad:profiles:list", "groupId"]]
|
|
}],
|
|
["buildGroups", compileFinal {
|
|
_self call ["loadCollection", ["cad:groups:build", [toJSON (createHashMapFromArray [
|
|
["liveGroups", _this # 0]
|
|
])]]]
|
|
}],
|
|
["updateGroupProfileFromContext", compileFinal {
|
|
_self call ["loadObject", ["cad:profiles:update_from_context", [toJSON (_this # 0)]]]
|
|
}],
|
|
["saveGroupProfile", compileFinal {
|
|
_self call ["saveEntry", ["cad:profiles:upsert", _this # 0, _this # 1]]
|
|
}],
|
|
["deleteGroupProfile", compileFinal {
|
|
_self call ["deleteEntry", ["cad:profiles:delete", _this # 0]]
|
|
}]
|
|
];
|
|
|
|
createHashMapObject [GVAR(PersistenceServiceBaseClass)]
|