- Introduce client phone addon, UI, and XEH handlers - Route actor phone interaction to the new phone UI - Add initial phone state, event handling, and persistence
106 lines
3.9 KiB
Plaintext
106 lines
3.9 KiB
Plaintext
#include "..\script_component.hpp"
|
|
|
|
/*
|
|
* Author: IDSolutions
|
|
* Initialize message store for phone SMS management.
|
|
*
|
|
* Message state is owned by the extension phone hot-state service.
|
|
*/
|
|
|
|
#pragma hemtt ignore_variables ["_self"]
|
|
GVAR(MessageStore) = createHashMapObject [[
|
|
["#type", "IMessageStore"],
|
|
["#create", {
|
|
diag_log "[FORGE:Server:Phone] Message Store Initialized!";
|
|
}],
|
|
["callPhoneArray", {
|
|
params [["_function", "", [""]], ["_arguments", [], [[]]]];
|
|
|
|
[_function, _arguments] call EFUNC(extension,extCall) params ["_result", "_isSuccess"];
|
|
if (!_isSuccess || { !(_result isEqualType "") }) exitWith { [] };
|
|
if ((_result find "Error:") == 0) exitWith {
|
|
diag_log format ["[FORGE:Server:Phone:Message] Extension call %1 failed: %2", _function, _result];
|
|
[]
|
|
};
|
|
|
|
private _data = fromJSON _result;
|
|
if !(_data isEqualType []) exitWith { [] };
|
|
_data
|
|
}],
|
|
["callPhoneObject", {
|
|
params [["_function", "", [""]], ["_arguments", [], [[]]]];
|
|
|
|
[_function, _arguments] call EFUNC(extension,extCall) params ["_result", "_isSuccess"];
|
|
if (!_isSuccess || { !(_result isEqualType "") }) exitWith { createHashMap };
|
|
if ((_result find "Error:") == 0) exitWith {
|
|
diag_log format ["[FORGE:Server:Phone:Message] Extension call %1 failed: %2", _function, _result];
|
|
createHashMap
|
|
};
|
|
|
|
private _data = fromJSON _result;
|
|
if !(_data isEqualType createHashMap) exitWith { createHashMap };
|
|
_data
|
|
}],
|
|
["callPhoneBool", {
|
|
params [["_function", "", [""]], ["_arguments", [], [[]]]];
|
|
|
|
[_function, _arguments] call EFUNC(extension,extCall) params ["_result", "_isSuccess"];
|
|
if (!_isSuccess || { !(_result isEqualType "") }) exitWith { false };
|
|
if ((_result find "Error:") == 0) exitWith {
|
|
diag_log format ["[FORGE:Server:Phone:Message] Extension call %1 failed: %2", _function, _result];
|
|
false
|
|
};
|
|
|
|
_result isEqualTo "true"
|
|
}],
|
|
["init", {
|
|
params [["_uid", "", [""]]];
|
|
if (_uid isEqualTo "") exitWith { false };
|
|
true
|
|
}],
|
|
["loadMessagesFromDatabase", {
|
|
params [["_uid", "", [""]]];
|
|
if (_uid isEqualTo "") exitWith { false };
|
|
true
|
|
}],
|
|
["sendMessage", {
|
|
params [["_fromUid", "", [""]], ["_toUid", "", [""]], ["_message", "", [""]]];
|
|
|
|
if (_fromUid isEqualTo "" || { _toUid isEqualTo "" } || { _message isEqualTo "" }) exitWith {
|
|
diag_log "[FORGE:Server:Phone:Message] Invalid parameters provided to sendMessage";
|
|
false
|
|
};
|
|
|
|
_self call ["callPhoneObject", ["phone:messages:send", [_fromUid, _toUid, _message, str serverTime]]]
|
|
}],
|
|
["getMessageThread", {
|
|
params [["_uid", "", [""]], ["_otherUid", "", [""]]];
|
|
if (_uid isEqualTo "" || { _otherUid isEqualTo "" }) exitWith { [] };
|
|
_self call ["callPhoneArray", ["phone:messages:thread", [_uid, _otherUid]]]
|
|
}],
|
|
["markMessageRead", {
|
|
params [["_uid", "", [""]], ["_messageId", "", [""]]];
|
|
if (_uid isEqualTo "" || { _messageId isEqualTo "" }) exitWith { false };
|
|
_self call ["callPhoneBool", ["phone:messages:mark_read", [_uid, _messageId]]]
|
|
}],
|
|
["getMessages", {
|
|
params [["_uid", "", [""]]];
|
|
if (_uid isEqualTo "") exitWith { [] };
|
|
_self call ["callPhoneArray", ["phone:messages:list", [_uid]]]
|
|
}],
|
|
["remove", {
|
|
params [["_uid", "", [""]]];
|
|
if (_uid isEqualTo "") exitWith { false };
|
|
|
|
["phone:remove", [_uid]] call EFUNC(extension,extCall) params ["_result", "_isSuccess"];
|
|
_isSuccess && { _result isEqualTo "OK" }
|
|
}],
|
|
["syncMessageIndices", {
|
|
params [["_uid", "", [""]]];
|
|
_uid isNotEqualTo ""
|
|
}]
|
|
]];
|
|
|
|
SETMVAR(FORGE_MessageStore,GVAR(MessageStore));
|
|
GVAR(MessageStore)
|