dragonfly/addons/db/functions/fnc_publish.sqf
Jacob Schmidt 38639b50c7 feat(db): Add pub/sub interface functions for DragonflyDB
Add two new functions to interface with DragonflyDB pub/sub system:
- fnc_subscribe.sqf: Subscribe to channels with CBA event routing
- fnc_publish.sqf: Publish messages to channels

These functions integrate with the existing pubSubHandler to route
messages through CBA's event system using 'global', 'local', 'server',
and 'remote' event types.

Both functions include proper input validation, error handling, and
detailed documentation with examples.
2025-03-20 19:54:58 -05:00

49 lines
1.7 KiB
Plaintext

#include "script_component.hpp"
/*
* Function: dragonfly_db_fnc_publish
* Author: Creedcoder, J. Schmidt
* Edit: 07.15.2024
* Copyright © 2024 Creedcoder, J. Schmidt, All rights reserved
*
* Do not edit without permission!
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
* To view a copy of this license, vist https://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to Creative Commons,
* PO Box 1866, Mountain View, CA 94042
*
* [Description]
* Publish a message to a DragonflyDB channel.
* The message will be routed through the CBA event system based on the subscription event type.
*
* Arguments:
* 0: STRING - Channel name to publish to (default: "")
* 1: ARRAY|STRING|NUMBER|BOOL - Data to publish (default: [])
*
* Return Value:
* BOOLEAN - True if successful, false otherwise
*
* Examples:
* ["global_chat", "Hello world!"] call dragonfly_db_fnc_publish
* ["mission_updates", ["task_01", "SUCCEEDED", [2, 3, 4]]] call dragonfly_db_fnc_publish
*
* Public: Yes
*/
params [
["_channel", "", [""]],
["_message", [], [[], "", 0, true]]
];
if (_channel isEqualTo "") exitWith {
diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_publish' Invalid Input for Channel '%1'", _channel];
false
};
private _args = [_channel, _message];
private _formattedArgs = _args apply { if (_x isEqualType "") then { str _x } else { _x } };
private _extensionArgs = _formattedArgs joinString ",";
private _result = "ArmaDragonflyClient" callExtension ["publish", [_extensionArgs]];
diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_publish' Published message to channel '%1': '%2'", _channel, _message];
true