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 ["leaderUid", _leaderUid];
_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 {
_result set ["order", +(_dispatchOrderRegistry getOrDefault [_taskID, createHashMap])];
};

View File

@ -294,6 +294,38 @@ GVAR(CadStoreBaseClass) = compileFinal createHashMapFromArray [
_self call ["emitGroupEvent", ["cad.group.updated", _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 {
params [["_uid", "", [""]]];
@ -313,19 +345,12 @@ GVAR(CadStoreBaseClass) = compileFinal createHashMapFromArray [
["activeTasks", EGVAR(task,TaskStore) call ["getActiveTaskCatalog", []]],
["session", _session]
];
private _emptyPayload = createHashMapFromArray [
["groups", _seed get "groups"],
["contracts", []],
["requests", []],
["assignments", []],
["activity", []],
["session", _session]
];
private _seedPayload = _self call ["buildSeedHydratePayload", [_seed]];
private _persistenceService = _self getOrDefault ["PersistenceService", createHashMap];
if (_persistenceService isEqualTo createHashMap) exitWith {
["WARNING", "CAD hydrate extension state is unavailable; returning seed-only payload."] call EFUNC(common,log);
_emptyPayload
_seedPayload
};
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);
_emptyPayload
_seedPayload
}]
];

View File

@ -1,6 +1,5 @@
#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 QGVAR(TaskLifecycleEventLogTokens)) then {
private _logTaskLifecycleEvent = {

View File

@ -257,7 +257,7 @@ GVAR(TaskStore) = createHashMapObject [[
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 };
_entry
@ -267,10 +267,13 @@ GVAR(TaskStore) = createHashMapObject [[
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 };
(_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 {
params [["_taskID", "", [""]], ["_requesterUid", "", [""]]];