Files
Arma3-AttendanceTracker/@AttendanceTracker/addons/AttendanceTracker/functions/fn_callbackHandler.sqf
2023-06-20 23:10:58 -07:00

87 lines
2.3 KiB
Plaintext

addMissionEventHandler ["ExtensionCallback", {
params ["_name", "_function", "_data"];
if !(_name == "AttendanceTracker") exitWith {};
// Validate data param
if (isNil "_data") then {_data = ""};
if (_data isEqualTo "") exitWith {
[
format ["Callback empty data: %1", _function],
"WARN"
] call attendanceTracker_fnc_log;
false;
};
if (typeName _data != "STRING") exitWith {
[
format ["Callback invalid data: %1: %2", _function, _data],
"WARN"
] call attendanceTracker_fnc_log;
false;
};
diag_log format ["Raw callback: %1: %2", _function, _data];
// Parse response from string array
private "_response";
try {
// diag_log format ["Raw callback: %1: %2", _function, _data];
_response = parseSimpleArray _data;
if (_response isEqualTo []) then {
throw "Failed to parse response as array";
};
} catch {
[
format ["Callback invalid data: %1: %2: %3", _function, _data, _exception],
"WARN"
] call attendanceTracker_fnc_log;
};
if (isNil "_response") exitWith {false};
switch (_function) do {
case "connectDB": {
systemChat format ["AttendanceTracker: %1", _response#0];
[_response#0, _response#1, _function] call attendanceTracker_fnc_log;
if (_response#0 == "SUCCESS") then {
missionNamespace setVariable ["AttendanceTracker_DBConnected", true];
// log mission info and get back the row Id to send with future messages
private _response = "AttendanceTracker" callExtension [
"logMission",
[
[AttendanceTracker getVariable ["missionContext", createHashMap]] call CBA_fnc_encodeJSON
]
];
// log world info
private _response = "AttendanceTracker" callExtension [
"logWorld",
[
[(call attendanceTracker_fnc_getWorldInfo)] call CBA_fnc_encodeJSON
]
];
};
};
case "writeMissionInfo": {
if (_response#0 == "MISSION_ID") then {
AttendanceTracker_missionId = parseNumber (_response#1);
};
};
case "writeAttendance": {
if (_response#0 == "ATT_LOG") then {
(_response#1) params ["_eventType", "_netId", "_rowId"];
private _storeIndex = ["SERVER", "MISSION"] find _eventType;
((AttendanceTracker getVariable ["rowIds", createHashMap]) getOrDefault [
_netId,
[nil, nil]
]) set [_storeIndex, _rowId];
};
};
default {
_response call attendanceTracker_fnc_log;
};
};
true;
}];