Server_monitor.sqf with new object stream method

Allows server to use either legacy loading method by itterating
callExtension (using  _legacyStreamingMethod = true). Otherwise, the
hive will dump objects to a file, write the filename to the server's
profile and it is deleted next restart, each filename is unique every
startup.

Associated hive commit:
bc5d5c56a8
This commit is contained in:
icomrade
2016-08-20 19:24:24 -04:00
parent d20221caf3
commit 00fa89d08f

View File

@@ -6,12 +6,14 @@ waitUntil {!isNil "BIS_MPF_InitDone" && initialized};
if (!isNil "sm_done") exitWith {}; // prevent server_monitor be called twice (bug during login of the first player) if (!isNil "sm_done") exitWith {}; // prevent server_monitor be called twice (bug during login of the first player)
sm_done = false; sm_done = false;
_legacyStreamingMethod = false; //use old object streaming method, more secure but will be slower and subject to the callExtension return size limitation.
dayz_serverIDMonitor = []; dayz_serverIDMonitor = [];
_DZE_VehObjects = []; _DZE_VehObjects = [];
dayz_versionNo = getText (configFile >> "CfgMods" >> "DayZ" >> "version"); dayz_versionNo = getText (configFile >> "CfgMods" >> "DayZ" >> "version");
dayz_hiveVersionNo = getNumber (configFile >> "CfgMods" >> "DayZ" >> "hiveVersion"); dayz_hiveVersionNo = getNumber (configFile >> "CfgMods" >> "DayZ" >> "hiveVersion");
_hiveLoaded = false; _hiveLoaded = false;
_serverVehicleCounter = []; _serverVehicleCounter = 0;
_tempMaint = DayZ_WoodenFence + DayZ_WoodenGates; _tempMaint = DayZ_WoodenFence + DayZ_WoodenGates;
_respawnPos = getMarkerpos "respawn_west"; _respawnPos = getMarkerpos "respawn_west";
diag_log "HIVE: Starting"; diag_log "HIVE: Starting";
@@ -39,26 +41,39 @@ if (_outcome == "PASS") then {
/* STREAM OBJECTS */ /* STREAM OBJECTS */
//Send the key //Send the key
_timeStart = diag_tickTime; _timeStart = diag_tickTime;
_key = format["CHILD:302:%1:",dayZ_instance]; _key = format["CHILD:302:%1:%2:",dayZ_instance, _legacyStreamingMethod];
_result = _key call server_hiveReadWrite; _result = _key call server_hiveReadWrite;
diag_log "HIVE: Request sent"; diag_log "HIVE: Request sent";
_myArray = []; _myArray = [];
_val = 0; _val = 0;
_status = _result select 0; //Process result _status = _result select 0; //Process result
if (_status == "ObjectStreamStart") then { if (_legacyStreamingMethod) then {
_hiveLoaded = true; if (_status == "ObjectStreamStart") then {
_val = _result select 1; _hiveLoaded = true;
//Stream Objects _val = _result select 1;
diag_log ("HIVE: Commence Object Streaming..."); //Stream Objects
for "_i" from 1 to _val do { diag_log ("HIVE: Commence Object Streaming...");
_result = _key call server_hiveReadWriteLarge; for "_i" from 1 to _val do {
_status = _result select 0; _result = _key call server_hiveReadWriteLarge;
_myArray set [count _myArray,_result]; _status = _result select 0;
_myArray set [count _myArray,_result];
};
};
} else {
_fileName = _key call server_hiveReadWrite;
_lastFN = profileNamespace getVariable["lastFN",""];
profileNamespace setVariable["lastFN",_fileName];
saveProfileNamespace;
if (_status == "ObjectStreamStart") then {
_myArray = Call Compile PreProcessFile _fileName;
_key = format["CHILD:302:%1:%2:",_lastFN, _legacyStreamingMethod];
_result = _key call server_hiveReadWrite; //deletes previous object data dump
}; };
diag_log ("HIVE: Streamed " + str(_val) + " objects");
}; };
diag_log ("HIVE: Streamed " + str(_val) + " objects");
{ {
private ["_object"]; private ["_object"];
//Parse Array //Parse Array
@@ -236,7 +251,7 @@ if (_status == "ObjectStreamStart") then {
_DZE_VehObjects set [count _DZE_VehObjects,_object]; _DZE_VehObjects set [count _DZE_VehObjects,_object];
_object call fnc_veh_ResetEH; _object call fnc_veh_ResetEH;
if (_ownerID != "0" && {!(_object isKindOf "Bicycle")}) then {_object setVehicleLock "locked";}; if (_ownerID != "0" && {!(_object isKindOf "Bicycle")}) then {_object setVehicleLock "locked";};
_serverVehicleCounter set [count _serverVehicleCounter,_type]; // total each vehicle _serverVehicleCounter = _serverVehicleCounter + 1; // total each vehicle
} else { } else {
_object enableSimulation true; _object enableSimulation true;
}; };
@@ -429,7 +444,7 @@ if (_hiveLoaded) then {
} count (dayz_centerMarker nearObjects ["building",DynamicVehicleArea]); } count (dayz_centerMarker nearObjects ["building",DynamicVehicleArea]);
_roadList = dayz_centerMarker nearRoads DynamicVehicleArea; _roadList = dayz_centerMarker nearRoads DynamicVehicleArea;
_vehLimit = MaxVehicleLimit - (count _serverVehicleCounter); _vehLimit = MaxVehicleLimit - _serverVehicleCounter;
if (_vehLimit > 0) then { if (_vehLimit > 0) then {
diag_log ("HIVE: Spawning # of Vehicles: " + str(_vehLimit)); diag_log ("HIVE: Spawning # of Vehicles: " + str(_vehLimit));
for "_x" from 1 to _vehLimit do {call spawn_vehicles;}; for "_x" from 1 to _vehLimit do {call spawn_vehicles;};