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 ["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])];
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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
|
||||||
}]
|
}]
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@ -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 = {
|
||||||
|
|||||||
@ -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", "", [""]]];
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user