mirror of
https://github.com/RaidMax/IW4M-Admin.git
synced 2025-06-13 16:48:27 -05:00
tweaked rcon throttle rate/made async
increased cutoff for server overview messages dont print message if timed out
This commit is contained in:
@ -11,6 +11,9 @@ using static SharedLibrary.Server;
|
||||
using System.Reflection;
|
||||
using System.IO;
|
||||
using System.Diagnostics;
|
||||
using System.Threading.Tasks;
|
||||
using static SharedLibrary.RCon.StaticHelpers;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SharedLibrary
|
||||
{
|
||||
@ -359,36 +362,6 @@ namespace SharedLibrary
|
||||
};
|
||||
}
|
||||
|
||||
/*https://stackoverflow.com/questions/2633628/can-i-get-command-line-arguments-of-other-processes-from-net-c*/
|
||||
// Define an extension method for type System.Process that returns the command
|
||||
// line via WMI.
|
||||
public static string GetCommandLine(this Process process)
|
||||
{
|
||||
string cmdLine = null;
|
||||
using (var searcher = new ManagementObjectSearcher(
|
||||
$"SELECT CommandLine FROM Win32_Process WHERE ProcessId = {process.Id}"))
|
||||
{
|
||||
// By definition, the query returns at most 1 match, because the process
|
||||
// is looked up by ID (which is unique by definition).
|
||||
var matchEnum = searcher.Get().GetEnumerator();
|
||||
if (matchEnum.MoveNext()) // Move to the 1st item.
|
||||
{
|
||||
cmdLine = matchEnum.Current["CommandLine"]?.ToString();
|
||||
}
|
||||
}
|
||||
if (cmdLine == null)
|
||||
{
|
||||
// Not having found a command line implies 1 of 2 exceptions, which the
|
||||
// WMI query masked:
|
||||
// An "Access denied" exception due to lack of privileges.
|
||||
// A "Cannot process request because the process (<pid>) has exited."
|
||||
// exception due to the process having terminated.
|
||||
// We provoke the same exception again simply by accessing process.MainModule.
|
||||
var dummy = process.MainModule; // Provoke exception.
|
||||
}
|
||||
return cmdLine;
|
||||
}
|
||||
|
||||
public static bool IsPrivileged(this Player p) => p.Level > Player.Permission.User;
|
||||
|
||||
public static bool PromptBool(string question)
|
||||
@ -409,5 +382,52 @@ namespace SharedLibrary
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
public static async Task<DVAR<T>> GetDvarAsync<T>(this Server server, string dvarName)
|
||||
{
|
||||
string[] LineSplit = await server.RemoteConnection.SendQueryAsync(QueryType.DVAR, dvarName);
|
||||
|
||||
if (LineSplit.Length != 3)
|
||||
{
|
||||
var e = new Exceptions.DvarException($"DVAR \"{dvarName}\" does not exist");
|
||||
e.Data["dvar_name"] = dvarName;
|
||||
throw e;
|
||||
}
|
||||
|
||||
string[] ValueSplit = LineSplit[1].Split(new char[] { '"' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
if (ValueSplit.Length != 5)
|
||||
{
|
||||
var e = new Exceptions.DvarException($"DVAR \"{dvarName}\" does not exist");
|
||||
e.Data["dvar_name"] = dvarName;
|
||||
throw e;
|
||||
}
|
||||
|
||||
string DvarName = Regex.Replace(ValueSplit[0], @"\^[0-9]", "");
|
||||
string DvarCurrentValue = Regex.Replace(ValueSplit[2], @"\^[0-9]", "");
|
||||
string DvarDefaultValue = Regex.Replace(ValueSplit[4], @"\^[0-9]", "");
|
||||
|
||||
return new DVAR<T>(DvarName) { Value = (T)Convert.ChangeType(DvarCurrentValue, typeof(T)) };
|
||||
}
|
||||
|
||||
public static async Task SetDvarAsync(this Server server, string dvarName, object dvarValue)
|
||||
{
|
||||
await server.RemoteConnection.SendQueryAsync(QueryType.DVAR, $"set {dvarName} {dvarValue}");
|
||||
}
|
||||
|
||||
public static async Task<string[]> ExecuteCommandAsync(this Server server, string commandName)
|
||||
{
|
||||
return (await server.RemoteConnection.SendQueryAsync(QueryType.COMMAND, commandName)).Skip(1).ToArray();
|
||||
}
|
||||
|
||||
public static async Task<List<Player>> GetStatusAsync(this Server server)
|
||||
{
|
||||
#if DEBUG && DEBUG_PLAYERS
|
||||
string[] response = await Task.Run(() => System.IO.File.ReadAllLines("players.txt"));
|
||||
#else
|
||||
string[] response = await server.RemoteConnection.SendQueryAsync(QueryType.DVAR, "status");
|
||||
#endif
|
||||
return Utilities.PlayersFromStatus(response);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user