1
0
mirror of https://github.com/RaidMax/IW4M-Admin.git synced 2025-06-07 21:58:06 -05:00
IW4M-Admin/Application/IO/GameLogEvent.cs
RaidMax 82a20e999c fixed issue with status response erroring when incorrect length
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
2018-04-26 01:13:04 -05:00

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;
}
}
}