bug fixing

This commit is contained in:
2023-06-20 23:10:58 -07:00
parent 8f971d9887
commit 3bb8c358fa
9 changed files with 98 additions and 11 deletions

Binary file not shown.

View File

@@ -23,6 +23,7 @@ class CfgFunctions {
class timestamp {}; class timestamp {};
class getMissionHash {}; class getMissionHash {};
class getWorldInfo {}; class getWorldInfo {};
class missionLoaded {};
}; };
}; };
}; };

View File

@@ -21,11 +21,16 @@ addMissionEventHandler ["ExtensionCallback", {
false; false;
}; };
diag_log format ["Raw callback: %1: %2", _function, _data];
// Parse response from string array // Parse response from string array
private "_response"; private "_response";
try { try {
// diag_log format ["Raw callback: %1: %2", _function, _data]; // diag_log format ["Raw callback: %1: %2", _function, _data];
_response = parseSimpleArray _data; _response = parseSimpleArray _data;
if (_response isEqualTo []) then {
throw "Failed to parse response as array";
};
} catch { } catch {
[ [
format ["Callback invalid data: %1: %2: %3", _function, _data, _exception], format ["Callback invalid data: %1: %2: %3", _function, _data, _exception],
@@ -66,8 +71,12 @@ addMissionEventHandler ["ExtensionCallback", {
}; };
case "writeAttendance": { case "writeAttendance": {
if (_response#0 == "ATT_LOG") then { if (_response#0 == "ATT_LOG") then {
_response params ["_netId", "_rowId"]; (_response#1) params ["_eventType", "_netId", "_rowId"];
((AttendanceTracker getVariable ["allUsers", createHashMap]) get _netId) append _rowID; private _storeIndex = ["SERVER", "MISSION"] find _eventType;
((AttendanceTracker getVariable ["rowIds", createHashMap]) getOrDefault [
_netId,
[nil, nil]
]) set [_storeIndex, _rowId];
}; };
}; };
default { default {

View File

@@ -15,6 +15,7 @@
}; };
(AttendanceTracker getVariable ["allUsers", createHashMap]) set [_networkId, _userInfo]; (AttendanceTracker getVariable ["allUsers", createHashMap]) set [_networkId, _userInfo];
(AttendanceTracker getVariable ["rowIds", createHashMap]) set [_networkId, [nil, nil]]; // reset rowId on connect
[ [
"Server", "Server",
_playerID, _playerID,
@@ -30,16 +31,25 @@
[format ["(EventHandler) OnUserDisconnected fired: %1", _this], "DEBUG"] call attendanceTracker_fnc_log; [format ["(EventHandler) OnUserDisconnected fired: %1", _this], "DEBUG"] call attendanceTracker_fnc_log;
if !(call attendanceTracker_fnc_missionLoaded) exitWith {
[format ["(EventHandler) OnUserDisconnected: Server is in Mission Asked, likely mission selection state. Skipping.."], "DEBUG"] call attendanceTracker_fnc_log;
};
private _userInfo = (AttendanceTracker getVariable ["allUsers", createHashMap]) get _networkId; private _userInfo = (AttendanceTracker getVariable ["allUsers", createHashMap]) get _networkId;
if (isNil "_userInfo") exitWith { if (isNil "_userInfo") exitWith {
[format ["(EventHandler) OnUserDisconnected: No user info found for %1", _networkId], "DEBUG"] call attendanceTracker_fnc_log; [format ["(EventHandler) OnUserDisconnected: No user info found for %1", _networkId], "DEBUG"] call attendanceTracker_fnc_log;
}; };
_userInfo params ["_playerID", "_ownerId", "_playerUID", "_profileName", "_displayName", "_steamName", "_clientState", "_isHC", "_adminState", "_networkInfo", "_unit", "_rowId"]; _userInfo params ["_playerID", "_ownerId", "_playerUID", "_profileName", "_displayName", "_steamName", "_clientState", "_isHC", "_adminState", "_networkInfo", "_unit"];
if (_isHC) exitWith { if (_isHC) exitWith {
[format ["(EventHandler) OnUserDisconnected: %1 is HC, skipping", _playerID], "DEBUG"] call attendanceTracker_fnc_log; [format ["(EventHandler) OnUserDisconnected: %1 is HC, skipping", _playerID], "DEBUG"] call attendanceTracker_fnc_log;
}; };
private _rowId = ((AttendanceTracker getVariable ["rowIds", createHashMap]) getOrDefault [
_networkId,
[nil, nil]
]) select 0;
[ [
"Server", "Server",
_playerID, _playerID,
@@ -54,6 +64,10 @@
[format ["(EventHandler) PlayerConnected fired: %1", _this], "DEBUG"] call attendanceTracker_fnc_log; [format ["(EventHandler) PlayerConnected fired: %1", _this], "DEBUG"] call attendanceTracker_fnc_log;
if !(call attendanceTracker_fnc_missionLoaded) exitWith {
[format ["(EventHandler) PlayerConnected: Server is in Mission Asked, likely mission selection state. Skipping.."], "DEBUG"] call attendanceTracker_fnc_log;
};
private _userInfo = (getUserInfo _idstr); private _userInfo = (getUserInfo _idstr);
if (isNil "_userInfo") exitWith { if (isNil "_userInfo") exitWith {
[format ["(EventHandler) PlayerConnected: No user info found for %1", _idstr], "DEBUG"] call attendanceTracker_fnc_log; [format ["(EventHandler) PlayerConnected: No user info found for %1", _idstr], "DEBUG"] call attendanceTracker_fnc_log;
@@ -82,6 +96,10 @@
[format ["(EventHandler) HandleDisconnect fired: %1", _this], "DEBUG"] call attendanceTracker_fnc_log; [format ["(EventHandler) HandleDisconnect fired: %1", _this], "DEBUG"] call attendanceTracker_fnc_log;
if !(call attendanceTracker_fnc_missionLoaded) exitWith {
[format ["(EventHandler) HandleDisconnect: Server is in Mission Asked, likely mission selection state. Skipping.."], "DEBUG"] call attendanceTracker_fnc_log;
};
private _userInfo = (AttendanceTracker getVariable ["allUsers", createHashMap]) get _idstr; private _userInfo = (AttendanceTracker getVariable ["allUsers", createHashMap]) get _idstr;
if (isNil "_userInfo") exitWith { if (isNil "_userInfo") exitWith {
[format ["(EventHandler) HandleDisconnect: No user info found for %1", _idstr], "DEBUG"] call attendanceTracker_fnc_log; [format ["(EventHandler) HandleDisconnect: No user info found for %1", _idstr], "DEBUG"] call attendanceTracker_fnc_log;
@@ -92,6 +110,11 @@
[format ["(EventHandler) HandleDisconnect: %1 is HC, skipping", _playerID], "DEBUG"] call attendanceTracker_fnc_log; [format ["(EventHandler) HandleDisconnect: %1 is HC, skipping", _playerID], "DEBUG"] call attendanceTracker_fnc_log;
}; };
private _rowId = ((AttendanceTracker getVariable ["rowIds", createHashMap]) getOrDefault [
_idstr,
[nil, nil]
]) select 1;
[ [
"Mission", "Mission",
_playerID, _playerID,
@@ -105,5 +128,53 @@
false; false;
}],
["OnUserKicked", {
params ["_networkId", "_kickTypeNumber", "_kickType", "_kickReason", "_kickMessageIncReason"];
[format ["(EventHandler) OnUserKicked fired: %1", _this], "DEBUG"] call attendanceTracker_fnc_log;
if !(call attendanceTracker_fnc_missionLoaded) exitWith {
[format ["(EventHandler) OnUserKicked: Server is in Mission Asked, likely mission selection state. Skipping.."], "DEBUG"] call attendanceTracker_fnc_log;
};
private _userInfo = (AttendanceTracker getVariable ["allUsers", createHashMap]) get _networkId;
if (isNil "_userInfo") exitWith {
[format ["(EventHandler) OnUserKicked: No user info found for %1", _networkId], "DEBUG"] call attendanceTracker_fnc_log;
};
_userInfo params ["_playerID", "_ownerId", "_playerUID", "_profileName", "_displayName", "_steamName", "_clientState", "_isHC", "_adminState", "_networkInfo", "_unit"];
if (_isHC) exitWith {
[format ["(EventHandler) OnUserKicked: %1 is HC, skipping", _playerID], "DEBUG"] call attendanceTracker_fnc_log;
};
private _rowId = ((AttendanceTracker getVariable ["rowIds", createHashMap]) getOrDefault [
_networkId,
[nil, nil]
]) select 0;
[
"Server",
_playerID,
_playerUID,
_profileName,
_steamName,
(if (!isNil "_rowId") then {_rowId} else {nil}) // send rowId on d/c only
] call attendanceTracker_fnc_logServerEvent;
private _rowId = ((AttendanceTracker getVariable ["rowIds", createHashMap]) getOrDefault [
_networkId,
[nil, nil]
]) select 1;
[
"Mission",
_playerID,
_playerUID,
_profileName,
_steamName,
nil // send rowId on d/c only
] call attendanceTracker_fnc_logMissionEvent;
}] }]
]; ];

View File

@@ -0,0 +1 @@
!(getClientStateNumber <= 5 || getClientStateNumber isEqualTo 11);

View File

@@ -22,6 +22,7 @@ AttendanceTracker setVariable ["missionContext", createHashMapFromArray [
// store all user details in a hash when they connect so we can reference it in disconnect events // store all user details in a hash when they connect so we can reference it in disconnect events
AttendanceTracker setVariable ["allUsers", createHashMap]; AttendanceTracker setVariable ["allUsers", createHashMap];
AttendanceTracker setVariable ["rowIds", createHashMap];
missionNamespace setVariable ["AttendanceTracker_debug", false]; missionNamespace setVariable ["AttendanceTracker_debug", false];
call attendanceTracker_fnc_connectDB; call attendanceTracker_fnc_connectDB;

Binary file not shown.

View File

@@ -179,7 +179,7 @@ type WorldInfo struct {
func writeWorldInfo(worldInfo string) { func writeWorldInfo(worldInfo string) {
functionName := "writeWorldInfo" functionName := "writeWorldInfo"
writeLog(functionName, fmt.Sprintf(`["%s", "DEBUG"]`, worldInfo)) // writeLog(functionName, fmt.Sprintf(`["%s", "DEBUG"]`, worldInfo))
// worldInfo is json, parse it // worldInfo is json, parse it
var wi WorldInfo var wi WorldInfo
fixedString := fixEscapeQuotes(trimQuotes(worldInfo)) fixedString := fixEscapeQuotes(trimQuotes(worldInfo))
@@ -188,8 +188,8 @@ func writeWorldInfo(worldInfo string) {
writeLog(functionName, fmt.Sprintf(`["%s", "ERROR"]`, err)) writeLog(functionName, fmt.Sprintf(`["%s", "ERROR"]`, err))
return return
} }
// write to log // write to log as json
writeLog(functionName, fmt.Sprintf(`["Author:%s WorkshopID:%s DisplayName:%s WorldName:%s WorldNameOriginal:%s WorldSize:%d Latitude:%f Longitude:%f", "INFO"]`, wi.Author, wi.WorkshopID, wi.DisplayName, wi.WorldName, wi.WorldNameOriginal, wi.WorldSize, wi.Latitude, wi.Longitude)) // writeLog(functionName, fmt.Sprintf(`["%s", "DEBUG"]`, json.Marshal(wi)))
// write to database // write to database
// check if world exists // check if world exists
@@ -273,8 +273,8 @@ func writeMissionInfo(missionInfo string) {
// get MySQL friendly datetime // get MySQL friendly datetime
// write to log // write to log as json
writeLog(functionName, fmt.Sprintf(`["MissionName:%s BriefingName:%s MissionNameSource:%s OnLoadName:%s Author:%s ServerName:%s ServerProfile:%s MissionStart:%s MissionHash:%s", "INFO"]`, mi.MissionName, mi.BriefingName, mi.MissionNameSource, mi.OnLoadName, mi.Author, mi.ServerName, mi.ServerProfile, mi.MissionStart, mi.MissionHash)) // writeLog(functionName, fmt.Sprintf(`["%s", "DEBUG"]`, mi))
// write to database // write to database
// every mission is unique, so insert it // every mission is unique, so insert it
@@ -364,13 +364,17 @@ func writeAttendance(data string) {
} }
writeLog(functionName, fmt.Sprintf(`["Saved attendance for %s to row id %d", "INFO"]`, event.ProfileName, id)) writeLog(functionName, fmt.Sprintf(`["Saved attendance for %s to row id %d", "INFO"]`, event.ProfileName, id))
writeLog(functionName, fmt.Sprintf(`["ATT_LOG", ["%s", "%d"]]`, event.PlayerId, id)) if event.EventType == "Server" {
writeLog(functionName, fmt.Sprintf(`["ATT_LOG", ["SERVER", "%s", "%d"]]`, event.PlayerId, id))
} else if event.EventType == "Mission" {
writeLog(functionName, fmt.Sprintf(`["ATT_LOG", ["MISSION", "%s", "%d"]]`, event.PlayerId, id))
}
} }
type DisconnectItem struct { type DisconnectItem struct {
PlayerId string `json:"playerId"` PlayerId string `json:"playerId"`
RowId int64 `json:"rowId"` RowId string `json:"rowId"`
} }
func writeDisconnectEvent(data string) { func writeDisconnectEvent(data string) {
@@ -416,7 +420,7 @@ func writeDisconnectEvent(data string) {
} }
if rowsAffected == 1 { if rowsAffected == 1 {
writeLog(functionName, fmt.Sprintf(`["Saved disconnect event for %s to row id %d", "INFO"]`, event.PlayerId, event.RowId)) writeLog(functionName, fmt.Sprintf(`["Saved disconnect event for %s to row id %s", "INFO"]`, event.PlayerId, event.RowId))
} }
} }