1
0
mirror of https://github.com/RaidMax/IW4M-Admin.git synced 2025-06-10 07:13:58 -05:00

Added additional properties method to allow easier extension to client properties

updated VPN plugin to use WebClient
message is sent to client trying to execute commands before they are authenticated
fixed rare issue with ToAdmins failing
record bullet distance fraction for client kills (_customcallbacks)
change client level/permissions through webfront
ability to tempban through webfront
This commit is contained in:
RaidMax
2018-09-02 16:59:27 -05:00
parent 50b4426cab
commit bc0fe3daec
33 changed files with 1099 additions and 177 deletions

View File

@ -27,56 +27,54 @@ namespace IW4MAdmin.Application
#if DEBUG
Manager.GetLogger().WriteDebug($"Got new event of type {gameEvent.Type} for {gameEvent.Owner} with id {gameEvent.Id}");
#endif
GameEvent sortedEvent = null;
lock (OutOfOrderEvents)
{
sortedEvent = OutOfOrderEvents.Values.FirstOrDefault();
}
// GameEvent sortedEvent = null;
// lock (OutOfOrderEvents)
// {
// sortedEvent = OutOfOrderEvents.Values.FirstOrDefault();
while (sortedEvent?.Id == Interlocked.Read(ref NextEventId))
{
lock (OutOfOrderEvents)
{
OutOfOrderEvents.RemoveAt(0);
}
AddEvent(sortedEvent);
// while (sortedEvent?.Id == Interlocked.Read(ref NextEventId))
// {
// if (OutOfOrderEvents.Count > 0)
// {
// OutOfOrderEvents.RemoveAt(0);
// }
lock (OutOfOrderEvents)
{
sortedEvent = OutOfOrderEvents.Values.FirstOrDefault();
}
}
// AddEvent(sortedEvent);
// sortedEvent = OutOfOrderEvents.Values.FirstOrDefault();
// }
// }
// both the gameEvent Id and the LastEventId are thread safe because we want to synchronize when the
// event occurs
if (gameEvent.Id == Interlocked.Read(ref NextEventId))
{
#if DEBUG == true
Manager.GetLogger().WriteDebug($"sent event with id {gameEvent.Id} to be processed");
#endif
// // both the gameEvent Id and the LastEventId are thread safe because we want to synchronize when the
// // event occurs
// if (gameEvent.Id == Interlocked.Read(ref NextEventId))
// {
//#if DEBUG == true
// Manager.GetLogger().WriteDebug($"sent event with id {gameEvent.Id} to be processed");
//#endif
((Manager as ApplicationManager).OnServerEvent)(this, new GameEventArgs(null, false, gameEvent));
Interlocked.Increment(ref NextEventId);
}
return true;
// Interlocked.Increment(ref NextEventId);
// }
// a "newer" event has been added before and "older" one has been added (due to threads and context switching)
// so me must wait until the next expected one arrives
else
{
#if DEBUG == true
Manager.GetLogger().WriteWarning("Incoming event is out of order");
Manager.GetLogger().WriteDebug($"Expected event Id is {Interlocked.Read(ref NextEventId)}, but got {gameEvent.Id} instead");
#endif
// // a "newer" event has been added before and "older" one has been added (due to threads and context switching)
// // so me must wait until the next expected one arrives
// else
// {
//#if DEBUG == true
// Manager.GetLogger().WriteWarning("Incoming event is out of order");
// Manager.GetLogger().WriteDebug($"Expected event Id is {Interlocked.Read(ref NextEventId)}, but got {gameEvent.Id} instead");
//#endif
// this prevents multiple threads from adding simultaneously
lock (OutOfOrderEvents)
{
if (!OutOfOrderEvents.TryGetValue(gameEvent.Id, out GameEvent discard))
{
OutOfOrderEvents.Add(gameEvent.Id, gameEvent);
}
}
}
return true;
// // this prevents multiple threads from adding simultaneously
// lock (OutOfOrderEvents)
// {
// if (!OutOfOrderEvents.TryGetValue(gameEvent.Id, out GameEvent discard))
// {
// OutOfOrderEvents.Add(gameEvent.Id, gameEvent);
// }
// }
// }
// return true;
}
}
}