mirror of
https://github.com/RaidMax/IW4M-Admin.git
synced 2025-06-07 21:58:06 -05:00
view angle vector parse fail is now a handled exception change local host check to byte array to make it faster than comparing string kick command now requires moderator level or higher tempban now requires administrator level or higher hopefully fixed negative SPM bug pipelined the events and consolidated them to run through GameEventHandler uniform console colors
73 lines
2.2 KiB
C#
73 lines
2.2 KiB
C#
using SharedLibraryCore;
|
|
using SharedLibraryCore.Interfaces;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace IW4MAdmin.Application.IO
|
|
{
|
|
class GameLogEvent
|
|
{
|
|
FileSystemWatcher LogPathWatcher;
|
|
Server Server;
|
|
long PreviousFileSize;
|
|
GameLogReader Reader;
|
|
Timer RefreshInfoTimer;
|
|
string GameLogFile;
|
|
FileInfo Info;
|
|
|
|
public GameLogEvent(Server server, string gameLogPath, string gameLogName)
|
|
{
|
|
GameLogFile = gameLogPath;
|
|
Reader = new GameLogReader(gameLogPath, server.EventParser);
|
|
Server = server;
|
|
RefreshInfoTimer = new Timer((sender) =>
|
|
{
|
|
var newInfo = new FileInfo(GameLogFile);
|
|
if (newInfo.Length - Info?.Length > 0)
|
|
LogPathWatcher_Changed(this, new FileSystemEventArgs(WatcherChangeTypes.Changed, "", ""));
|
|
Info = newInfo;
|
|
|
|
}, null, 0, 100);
|
|
LogPathWatcher = new FileSystemWatcher()
|
|
{
|
|
Path = gameLogPath.Replace(gameLogName, ""),
|
|
Filter = gameLogName,
|
|
NotifyFilter = (NotifyFilters)383,
|
|
InternalBufferSize = 4096
|
|
};
|
|
|
|
LogPathWatcher.Changed += LogPathWatcher_Changed;
|
|
LogPathWatcher.EnableRaisingEvents = true;
|
|
}
|
|
|
|
~GameLogEvent()
|
|
{
|
|
LogPathWatcher.EnableRaisingEvents = false;
|
|
}
|
|
|
|
private void LogPathWatcher_Changed(object sender, FileSystemEventArgs e)
|
|
{
|
|
// retrieve the new file size
|
|
long newFileSize = new FileInfo(GameLogFile).Length;
|
|
|
|
if (PreviousFileSize == 0)
|
|
PreviousFileSize = newFileSize;
|
|
|
|
long fileDiff = newFileSize - PreviousFileSize;
|
|
|
|
if (fileDiff < 1)
|
|
return;
|
|
|
|
var events = Reader.EventsFromLog(Server, fileDiff);
|
|
foreach (var ev in events)
|
|
Server.Manager.GetEventHandler().AddEvent(ev);
|
|
|
|
PreviousFileSize = newFileSize;
|
|
}
|
|
}
|
|
}
|