mirror of
https://github.com/chylex/Minecraft-Phantom-Panel.git
synced 2025-05-11 20:34:03 +02:00
Fix code issues and inefficiencies
This commit is contained in:
parent
0ab165fd21
commit
0af14c3262
Agent
Phantom.Agent.Minecraft
Phantom.Agent.Rpc
Phantom.Agent.Services/Backups
Common
Phantom.Common.Data
Phantom.Common.Messages/ToServer
Server
Phantom.Server.Database/Enums
Phantom.Server.Rpc
Phantom.Server.Services/Audit
Phantom.Server.Web.Identity
Utils
Phantom.Utils.Collections
Phantom.Utils.Rpc/Message
Phantom.Utils.Runtime
@ -79,10 +79,9 @@ public sealed class JavaRuntimeDiscovery {
|
||||
WorkingDirectory = Path.GetDirectoryName(javaExecutablePath),
|
||||
Arguments = "-XshowSettings:properties -version",
|
||||
RedirectStandardInput = false,
|
||||
RedirectStandardOutput = true,
|
||||
RedirectStandardOutput = false,
|
||||
RedirectStandardError = true,
|
||||
UseShellExecute = false,
|
||||
CreateNoWindow = false
|
||||
UseShellExecute = false
|
||||
};
|
||||
|
||||
var process = new Process { StartInfo = startInfo };
|
||||
|
@ -10,7 +10,7 @@ public sealed partial class MinecraftServerExecutables {
|
||||
private static readonly ILogger Logger = PhantomLogger.Create<MinecraftServerExecutables>();
|
||||
|
||||
[GeneratedRegex(@"[^a-zA-Z0-9_\-\.]", RegexOptions.Compiled)]
|
||||
private static partial Regex VersionFolderSanitizeRegex();
|
||||
private static partial Regex SanitizePathRegex();
|
||||
|
||||
private readonly string basePath;
|
||||
private readonly Dictionary<string, MinecraftServerExecutableDownloader> runningDownloadersByVersion = new ();
|
||||
@ -20,7 +20,7 @@ public sealed partial class MinecraftServerExecutables {
|
||||
}
|
||||
|
||||
internal async Task<string?> DownloadAndGetPath(FileDownloadInfo? fileDownloadInfo, string minecraftVersion, EventHandler<DownloadProgressEventArgs> progressEventHandler, CancellationToken cancellationToken) {
|
||||
string serverExecutableFolderPath = Path.Combine(basePath, VersionFolderSanitizeRegex().Replace(minecraftVersion, "_"));
|
||||
string serverExecutableFolderPath = Path.Combine(basePath, SanitizePathRegex().IsMatch(minecraftVersion) ? SanitizePathRegex().Replace(minecraftVersion, "_") : minecraftVersion);
|
||||
string serverExecutableFilePath = Path.Combine(serverExecutableFolderPath, "server.jar");
|
||||
|
||||
if (File.Exists(serverExecutableFilePath)) {
|
||||
|
@ -78,7 +78,7 @@ public sealed class ServerStatusProtocol {
|
||||
return null;
|
||||
}
|
||||
|
||||
string onlinePlayerCountStr = Encoding.BigEndianUnicode.GetString(messageBuffer[(separator1 + 1)..(separator2 - 1)]);
|
||||
string onlinePlayerCountStr = Encoding.BigEndianUnicode.GetString(messageBuffer.AsSpan((separator1 + 1)..(separator2 - 1)));
|
||||
if (!int.TryParse(onlinePlayerCountStr, out int onlinePlayerCount)) {
|
||||
logger.Error("Could not parse online player count in response from server: {OnlinePlayerCount}.", onlinePlayerCountStr);
|
||||
return null;
|
||||
|
@ -13,7 +13,7 @@ using Serilog.Events;
|
||||
namespace Phantom.Agent.Rpc;
|
||||
|
||||
public sealed class RpcLauncher : RpcRuntime<ClientSocket> {
|
||||
public static async Task Launch(RpcConfiguration config, AgentAuthToken authToken, AgentInfo agentInfo, Func<RpcServerConnection, IMessageToAgentListener> listenerFactory, SemaphoreSlim disconnectSemaphore, CancellationToken receiveCancellationToken) {
|
||||
public static Task Launch(RpcConfiguration config, AgentAuthToken authToken, AgentInfo agentInfo, Func<RpcServerConnection, IMessageToAgentListener> listenerFactory, SemaphoreSlim disconnectSemaphore, CancellationToken receiveCancellationToken) {
|
||||
var socket = new ClientSocket();
|
||||
var options = socket.Options;
|
||||
|
||||
@ -21,7 +21,7 @@ public sealed class RpcLauncher : RpcRuntime<ClientSocket> {
|
||||
options.CurveCertificate = new NetMQCertificate();
|
||||
options.HelloMessage = MessageRegistries.ToServer.Write(new RegisterAgentMessage(authToken, agentInfo)).ToArray();
|
||||
|
||||
await new RpcLauncher(config, socket, agentInfo.Guid, listenerFactory, disconnectSemaphore, receiveCancellationToken).Launch();
|
||||
return new RpcLauncher(config, socket, agentInfo.Guid, listenerFactory, disconnectSemaphore, receiveCancellationToken).Launch();
|
||||
}
|
||||
|
||||
private readonly RpcConfiguration config;
|
||||
|
@ -94,4 +94,8 @@ sealed class BackupScheduler : CancellableBackgroundTask {
|
||||
Logger.Debug("Detected server output, signalling to check for online players again.");
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Dispose() {
|
||||
serverOutputWhileWaitingForOnlinePlayers.Dispose();
|
||||
}
|
||||
}
|
||||
|
@ -53,6 +53,6 @@ public sealed partial class AllowedPorts {
|
||||
}
|
||||
|
||||
public static AllowedPorts FromString(string definitions) {
|
||||
return FromString((ReadOnlySpan<char>) definitions);
|
||||
return FromString(definitions.AsSpan());
|
||||
}
|
||||
}
|
||||
|
@ -98,6 +98,6 @@ public readonly partial record struct RamAllocationUnits(
|
||||
/// </summary>
|
||||
/// <exception cref="ArgumentOutOfRangeException">If the <paramref name="definition"/> is in the incorrect format, or the value cannot be converted via <see cref="FromMegabytes"/>.</exception>
|
||||
public static RamAllocationUnits FromString(string definition) {
|
||||
return FromString((ReadOnlySpan<char>) definition);
|
||||
return FromString(definition.AsSpan());
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ using Phantom.Utils.Rpc.Message;
|
||||
namespace Phantom.Common.Messages.ToServer;
|
||||
|
||||
[MemoryPackable]
|
||||
public partial record ReportAgentStatusMessage(
|
||||
public sealed partial record ReportAgentStatusMessage(
|
||||
[property: MemoryPackOrder(0)] int RunningInstanceCount,
|
||||
[property: MemoryPackOrder(1)] RamAllocationUnits RunningInstanceMemory
|
||||
) : IMessageToServer {
|
||||
|
@ -15,7 +15,7 @@ public enum AuditLogEventType {
|
||||
InstanceCommandExecuted
|
||||
}
|
||||
|
||||
public static class AuditLogEventTypeExtensions {
|
||||
static class AuditLogEventTypeExtensions {
|
||||
private static readonly Dictionary<AuditLogEventType, AuditLogSubjectType> SubjectTypes = new () {
|
||||
{ AuditLogEventType.AdministratorUserCreated, AuditLogSubjectType.User },
|
||||
{ AuditLogEventType.AdministratorUserModified, AuditLogSubjectType.User },
|
||||
|
@ -10,7 +10,7 @@ public enum EventLogEventType {
|
||||
InstanceBackupFailed,
|
||||
}
|
||||
|
||||
internal static class EventLogEventTypeExtensions {
|
||||
static class EventLogEventTypeExtensions {
|
||||
private static readonly Dictionary<EventLogEventType, EventLogSubjectType> SubjectTypes = new () {
|
||||
{ EventLogEventType.InstanceLaunchSucceded, EventLogSubjectType.Instance },
|
||||
{ EventLogEventType.InstanceLaunchFailed, EventLogSubjectType.Instance },
|
||||
|
@ -11,14 +11,14 @@ using Serilog.Events;
|
||||
namespace Phantom.Server.Rpc;
|
||||
|
||||
public sealed class RpcLauncher : RpcRuntime<ServerSocket> {
|
||||
public static async Task Launch(RpcConfiguration config, Func<RpcClientConnection, IMessageToServerListener> listenerFactory, CancellationToken cancellationToken) {
|
||||
public static Task Launch(RpcConfiguration config, Func<RpcClientConnection, IMessageToServerListener> listenerFactory, CancellationToken cancellationToken) {
|
||||
var socket = new ServerSocket();
|
||||
var options = socket.Options;
|
||||
|
||||
options.CurveServer = true;
|
||||
options.CurveCertificate = config.ServerCertificate;
|
||||
|
||||
await new RpcLauncher(config, socket, listenerFactory, cancellationToken).Launch();
|
||||
return new RpcLauncher(config, socket, listenerFactory, cancellationToken).Launch();
|
||||
}
|
||||
|
||||
private readonly RpcConfiguration config;
|
||||
|
@ -26,7 +26,7 @@ public sealed partial class AuditLog {
|
||||
|
||||
public Task AddUserRolesChangedEvent(IdentityUser user, List<string> addedToRoles, List<string> removedFromRoles) {
|
||||
var extra = new Dictionary<string, object?> {
|
||||
{ "username", user.UserName },
|
||||
{ "username", user.UserName }
|
||||
};
|
||||
|
||||
if (addedToRoles.Count > 0) {
|
||||
|
@ -2,8 +2,6 @@
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using Microsoft.AspNetCore.Components.Server;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
namespace Phantom.Server.Web.Identity.Authentication;
|
||||
|
@ -1,10 +1,7 @@
|
||||
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Phantom.Server.Database;
|
||||
using Phantom.Server.Web.Identity.Authentication;
|
||||
using Phantom.Server.Web.Identity.Authorization;
|
||||
|
@ -1,5 +1,4 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Phantom.Server.Web.Identity.Authentication;
|
||||
using Phantom.Server.Web.Identity.Interfaces;
|
||||
|
||||
|
@ -68,10 +68,14 @@ public sealed class Table<TRow, TKey> : IReadOnlyList<TRow>, IReadOnlyDictionary
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerator<TRow> GetEnumerator() {
|
||||
public List<TRow>.Enumerator GetEnumerator() {
|
||||
return rowList.GetEnumerator();
|
||||
}
|
||||
|
||||
IEnumerator<TRow> IEnumerable<TRow>.GetEnumerator() {
|
||||
return GetEnumerator();
|
||||
}
|
||||
|
||||
IEnumerator IEnumerable.GetEnumerator() {
|
||||
return GetEnumerator();
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ public abstract class MessageHandler<TListener> {
|
||||
|
||||
internal void Enqueue<TMessage, TReply>(uint sequenceId, TMessage message) where TMessage : IMessage<TListener, TReply> {
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
taskManager.Run("Handle message {Type}" + message.GetType().Name, async () => {
|
||||
taskManager.Run("Handle message " + message.GetType().Name, async () => {
|
||||
try {
|
||||
await Handle<TMessage, TReply>(sequenceId, message);
|
||||
} catch (Exception e) {
|
||||
|
@ -8,7 +8,7 @@ static class MessageSerializer {
|
||||
private static readonly MemoryPackSerializerOptions SerializerOptions = MemoryPackSerializerOptions.Utf8;
|
||||
|
||||
public static byte[] Serialize<T>(T message) {
|
||||
return MemoryPackSerializer.Serialize(typeof(T), message, SerializerOptions);
|
||||
return MemoryPackSerializer.Serialize(message, SerializerOptions);
|
||||
}
|
||||
|
||||
public static void Serialize<T>(IBufferWriter<byte> destination, T message) {
|
||||
|
@ -40,8 +40,8 @@ public abstract class CancellableBackgroundTask {
|
||||
}
|
||||
|
||||
protected abstract Task RunTask();
|
||||
|
||||
protected virtual void Dispose() {}
|
||||
|
||||
protected abstract void Dispose();
|
||||
|
||||
public void Stop() {
|
||||
try {
|
||||
|
Loading…
Reference in New Issue
Block a user