Jacob Schmidt 732433f848 Add task lifecycle event bus integration
- Add a common in-process event bus
- Emit task lifecycle events from task store and instances
- Register CAD listeners to invalidate task state
2026-05-14 22:11:23 -05:00
..
2025-11-26 18:33:09 -06:00
2025-11-26 18:33:09 -06:00
2025-11-26 18:33:09 -06:00
2025-11-26 18:33:09 -06:00
2025-11-26 18:33:09 -06:00

Forge Server Common

Overview

The common addon provides shared SQF utilities used by server-side Forge addons. It contains lightweight helpers only; gameplay domain state belongs in the specific domain addons or the Rust extension.

Dependencies

  • forge_server_main

Main Components

  • fnc_baseStore.sqf provides shared hash-map object behavior such as JSON conversion.
  • fnc_eventBus.sqf provides a framework-wide in-process event bus for cross-addon notifications.
  • fnc_log.sqf standardizes server log messages.
  • fnc_getPlayer.sqf resolves online players by UID.
  • fnc_formatNumber.sqf formats numeric values for notifications and UI text.
  • fnc_generateHash.sqf and fnc_generateSecureData.sqf provide hashing and random data helpers.
  • fnc_timeToSeconds.sqf converts time values into seconds.

Notes

Keep this addon free of domain-specific behavior. If a helper needs actor, bank, org, task, store, or CAD state, it belongs in that addon instead.

Event Bus

The event bus is initialized as forge_server_common_EventBus during store bootstrap. It is synchronous and in-process: listeners run immediately when an event is emitted.

private _token = EGVAR(common,EventBus) call ["on", [
    "task.completed",
    {
        params ["_event"];
        ["INFO", format ["Task completed: %1", _event getOrDefault ["taskID", ""]]] call EFUNC(common,log);
    },
    "example"
]];

EGVAR(common,EventBus) call ["emit", [
    "task.completed",
    createHashMapFromArray [["taskID", "task_001"]],
    createHashMapFromArray [["source", "task"]]
]];

EGVAR(common,EventBus) call ["off", [_token]];