feat: Enhance task and assignment handling with new payload structures and logging
This commit is contained in:
parent
96718996b2
commit
54c5b415e4
@ -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])];
|
||||
};
|
||||
|
||||
@ -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
|
||||
}]
|
||||
];
|
||||
|
||||
|
||||
@ -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 = {
|
||||
|
||||
@ -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", "", [""]]];
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user