feat: Enhance task and assignment handling with new payload structures and logging

This commit is contained in:
Jacob Schmidt 2026-05-16 23:21:49 -05:00
parent 96718996b2
commit 54c5b415e4
4 changed files with 53 additions and 14 deletions

View File

@ -305,6 +305,18 @@ GVAR(AssignmentRepositoryBaseClass) = compileFinal createHashMapFromArray [
_result set ["assignment", _assignment]; _result set ["assignment", _assignment];
_result set ["leaderUid", _leaderUid]; _result set ["leaderUid", _leaderUid];
_result set ["isDispatchOrder", _isDispatchOrder]; _result set ["isDispatchOrder", _isDispatchOrder];
if (!_isDispatchOrder && { !(isNil QEGVAR(task,TaskStore)) }) then {
private _acceptResult = EGVAR(task,TaskStore) call ["acceptTask", [_taskID, _leaderUid]];
if !(_acceptResult getOrDefault ["success", false]) then {
["WARNING", format [
"CAD assigned task %1 to group %2 but could not mark it accepted for leader %3: %4",
_taskID,
_groupID,
_leaderUid,
_acceptResult getOrDefault ["message", "Unknown error."]
]] call EFUNC(common,log);
};
};
if (_isDispatchOrder) then { if (_isDispatchOrder) then {
_result set ["order", +(_dispatchOrderRegistry getOrDefault [_taskID, createHashMap])]; _result set ["order", +(_dispatchOrderRegistry getOrDefault [_taskID, createHashMap])];
}; };

View File

@ -294,6 +294,38 @@ GVAR(CadStoreBaseClass) = compileFinal createHashMapFromArray [
_self call ["emitGroupEvent", ["cad.group.updated", _result]]; _self call ["emitGroupEvent", ["cad.group.updated", _result]];
_result _result
}], }],
["buildSeedHydratePayload", compileFinal {
params [["_seed", createHashMap, [createHashMap]]];
private _session = _seed getOrDefault ["session", createHashMap];
private _isDispatcher = _session getOrDefault ["isDispatcher", false];
private _contracts = [];
if (_isDispatcher) then {
{
if !(_x isEqualType createHashMap) then { continue; };
private _entry = +_x;
private _taskID = _entry getOrDefault ["taskId", _entry getOrDefault ["taskID", ""]];
if (_taskID isEqualTo "") then { continue; };
_entry set ["taskId", _taskID];
_entry set ["taskID", _taskID];
_entry set ["assignedGroupId", ""];
_entry set ["assignmentState", "unassigned"];
_contracts pushBack _entry;
} forEach (_seed getOrDefault ["activeTasks", []]);
};
createHashMapFromArray [
["groups", _seed getOrDefault ["groups", []]],
["contracts", _contracts],
["requests", []],
["assignments", []],
["activity", []],
["session", _session]
]
}],
["buildHydratePayload", compileFinal { ["buildHydratePayload", compileFinal {
params [["_uid", "", [""]]]; params [["_uid", "", [""]]];
@ -313,19 +345,12 @@ GVAR(CadStoreBaseClass) = compileFinal createHashMapFromArray [
["activeTasks", EGVAR(task,TaskStore) call ["getActiveTaskCatalog", []]], ["activeTasks", EGVAR(task,TaskStore) call ["getActiveTaskCatalog", []]],
["session", _session] ["session", _session]
]; ];
private _emptyPayload = createHashMapFromArray [ private _seedPayload = _self call ["buildSeedHydratePayload", [_seed]];
["groups", _seed get "groups"],
["contracts", []],
["requests", []],
["assignments", []],
["activity", []],
["session", _session]
];
private _persistenceService = _self getOrDefault ["PersistenceService", createHashMap]; private _persistenceService = _self getOrDefault ["PersistenceService", createHashMap];
if (_persistenceService isEqualTo createHashMap) exitWith { if (_persistenceService isEqualTo createHashMap) exitWith {
["WARNING", "CAD hydrate extension state is unavailable; returning seed-only payload."] call EFUNC(common,log); ["WARNING", "CAD hydrate extension state is unavailable; returning seed-only payload."] call EFUNC(common,log);
_emptyPayload _seedPayload
}; };
private _hydrateResult = _persistenceService call ["buildHydratePayload", [_seed]]; private _hydrateResult = _persistenceService call ["buildHydratePayload", [_seed]];
@ -334,7 +359,7 @@ GVAR(CadStoreBaseClass) = compileFinal createHashMapFromArray [
}; };
["WARNING", "CAD hydrate failed in the extension; returning seed-only payload."] call EFUNC(common,log); ["WARNING", "CAD hydrate failed in the extension; returning seed-only payload."] call EFUNC(common,log);
_emptyPayload _seedPayload
}] }]
]; ];

View File

@ -1,6 +1,5 @@
#include "script_component.hpp" #include "script_component.hpp"
if !(isNil QGVAR(TaskStore)) then { GVAR(TaskStore) call ["resetMissionState", []]; };
if (isNil QEGVAR(common,EventBus)) then { call EFUNC(common,eventBus); }; if (isNil QEGVAR(common,EventBus)) then { call EFUNC(common,eventBus); };
if (isNil QGVAR(TaskLifecycleEventLogTokens)) then { if (isNil QGVAR(TaskLifecycleEventLogTokens)) then {
private _logTaskLifecycleEvent = { private _logTaskLifecycleEvent = {

View File

@ -257,7 +257,7 @@ GVAR(TaskStore) = createHashMapObject [[
if (_taskID isEqualTo "") exitWith { createHashMap }; if (_taskID isEqualTo "") exitWith { createHashMap };
private _entry = _self call ["callTaskState", ["task:catalog:get", [_taskID], createHashMap]]; [(_self call ["callTaskState", ["task:catalog:get", [_taskID], createHashMap]])] params [["_entry", createHashMap, [createHashMap]]];
if !(_entry isEqualType createHashMap) exitWith { createHashMap }; if !(_entry isEqualType createHashMap) exitWith { createHashMap };
_entry _entry
@ -267,10 +267,13 @@ GVAR(TaskStore) = createHashMapObject [[
if (_taskID isEqualTo "") exitWith { false }; if (_taskID isEqualTo "") exitWith { false };
private _entry = _self call ["getTaskCatalogEntry", [_taskID]]; [(_self call ["getTaskCatalogEntry", [_taskID]])] params [["_entry", createHashMap, [createHashMap]]];
if (_entry isEqualTo createHashMap) exitWith { false }; if (_entry isEqualTo createHashMap) exitWith { false };
(_entry getOrDefault ["accepted", false]) || { (_entry getOrDefault ["requesterUid", ""]) isNotEqualTo "" } [(_entry getOrDefault ["accepted", false])] params [["_accepted", false, [false]]];
[(_entry getOrDefault ["requesterUid", ""])] params [["_requesterUid", "", [""]]];
_accepted || { _requesterUid isNotEqualTo "" }
}], }],
["acceptTask", compileFinal { ["acceptTask", compileFinal {
params [["_taskID", "", [""]], ["_requesterUid", "", [""]]]; params [["_taskID", "", [""]], ["_requesterUid", "", [""]]];