Server Modules

CAD Usage Guide

The CAD module stores transient operational state for dispatch activity, assignments, dispatch orders, support requests, group profiles, grouped views, and hydrated UI payloads. CAD state is in-memory and follows the active server or mission lifecycle.

CAD Usage Guide

The CAD module stores transient operational state for dispatch activity, assignments, dispatch orders, support requests, group profiles, grouped views, and hydrated UI payloads. CAD state is in-memory and follows the active server or mission lifecycle.

Data Model

Most CAD records are flexible JSON objects. The service normalizes important IDs and returns structured mutation results for higher-level workflows.

Common generated IDs:

  • Orders: cad-order:<sequence>
  • Requests: cad-request:<sequence>
  • Assignments usually share a task ID or order ID.

Commands

Activity

CommandArgumentsReturns
cad:activity:appendactivity_jsonOK.
cad:activity:recentlimitRecent activity array JSON.

Assignments

CommandArgumentsReturns
cad:assignments:listnoneAssignment array JSON.
cad:assignments:assignentry_id, assignment_jsonAssignment mutation result JSON.
cad:assignments:acknowledgeentry_id, patch_jsonAssignment mutation result JSON.
cad:assignments:declineentry_id, patch_jsonAssignment mutation result JSON and removes assignment.
cad:assignments:upsertentry_id, assignment_jsonOK.
cad:assignments:deleteentry_idOK.

Orders

CommandArgumentsReturns
cad:orders:listnoneOrder array JSON.
cad:orders:createorder_seed_jsonDispatch order mutation result JSON.
cad:orders:create_from_contextcontext_jsonDispatch order mutation result JSON.
cad:orders:closeentry_idDispatch order mutation result JSON and removes order/assignment.
cad:orders:upsertentry_id, order_jsonOK.
cad:orders:deleteentry_idOK.

Requests

CommandArgumentsReturns
cad:requests:listnoneRequest array JSON.
cad:requests:submitrequest_jsonRequest mutation result JSON.
cad:requests:submit_from_contextcontext_jsonRequest mutation result JSON.
cad:requests:closeentry_idRequest mutation result JSON and removes request.
cad:requests:upsertentry_id, request_jsonOK.
cad:requests:deleteentry_idOK.

Profiles and Views

CommandArgumentsReturns
cad:profiles:listnoneProfile array JSON.
cad:profiles:update_from_contextcontext_jsonProfile mutation result JSON.
cad:profiles:upsertentry_id, profile_jsonOK.
cad:profiles:deleteentry_idOK.
cad:groups:buildgroups_seed_jsonGroup array JSON.
cad:view:hydratehydrate_seed_jsonHydrated CAD payload JSON.

Submit a Support Request

private _fields = createHashMapFromArray [
    ["pickup_location", "Grid 123456"],
    ["precedence", "urgent"],
    ["security", "secure"]
];

private _context = createHashMapFromArray [
    ["type", "medevac_9line"],
    ["fields", _fields],
    ["groupId", "alpha"],
    ["groupCallsign", "Alpha 1-1"],
    ["submittedByUid", getPlayerUID player],
    ["submittedByName", name player],
    ["priority", "emergency"],
    ["position", getPosATL player],
    ["createdAt", diag_tickTime]
];

private _result = "forge_server" callExtension ["cad:requests:submit_from_context", [
    toJSON _context
]];

Supported priority values are routine, priority, and emergency. Unknown values normalize to priority.

Create a Dispatch Order

private _context = createHashMapFromArray [
    ["assigneeGroupId", "bravo"],
    ["assigneeGroupCallsign", "Bravo 1-1"],
    ["targetGroupId", "alpha"],
    ["targetGroupCallsign", "Alpha 1-1"],
    ["targetPosition", getPosATL player],
    ["createdByUid", getPlayerUID player],
    ["createdByName", name player],
    ["requestId", "cad-request:1"],
    ["requestType", "logreq"],
    ["requestTitle", "LOGREQ | Alpha 1-1"],
    ["requestSummary", "Ammo resupply requested"],
    ["requestFields", createHashMap],
    ["note", "Support Alpha 1-1 at current position."],
    ["priority", "priority"],
    ["createdAt", diag_tickTime]
];

private _result = "forge_server" callExtension ["cad:orders:create_from_context", [
    toJSON _context
]];

Assignment Workflow

private _assignment = createHashMapFromArray [
    ["groupId", "bravo"],
    ["assigneeGroupCallsign", "Bravo 1-1"],
    ["assignedByUid", getPlayerUID player],
    ["assignedByName", name player],
    ["assignedAt", diag_tickTime],
    ["state", "assigned"]
];

"forge_server" callExtension ["cad:assignments:assign", [
    "task-123",
    toJSON _assignment
]];

private _ack = createHashMapFromArray [
    ["state", "acknowledged"],
    ["acknowledgedByUid", getPlayerUID player],
    ["acknowledgedAt", diag_tickTime]
];

"forge_server" callExtension ["cad:assignments:acknowledge", [
    "task-123",
    toJSON _ack
]];

Hydrate the CAD UI

private _session = createHashMapFromArray [
    ["uid", getPlayerUID player],
    ["orgId", "default"],
    ["isDispatcher", true],
    ["groupId", "alpha"],
    ["isLeader", true]
];

private _seed = createHashMapFromArray [
    ["groups", _liveGroups],
    ["activeTasks", _activeTasks],
    ["session", _session]
];

private _result = "forge_server" callExtension ["cad:view:hydrate", [toJSON _seed]];

Error Handling

private _payload = _result select 0;
if (_payload find "Error:" == 0) exitWith {
    systemChat format ["CAD error: %1", _payload];
};
Copyright © 2026