mirror of
https://github.com/chylex/Minecraft-Phantom-Panel.git
synced 2024-11-22 08:42:44 +01:00
42 lines
1.1 KiB
C#
42 lines
1.1 KiB
C#
using Phantom.Common.Data;
|
|
using Phantom.Common.Data.Agent;
|
|
|
|
namespace Phantom.Server.Services.Agents;
|
|
|
|
public sealed record Agent(
|
|
Guid Guid,
|
|
string Name,
|
|
ushort ProtocolVersion,
|
|
string BuildVersion,
|
|
ushort MaxInstances,
|
|
RamAllocationUnits MaxMemory,
|
|
AllowedPorts? AllowedServerPorts = null,
|
|
AllowedPorts? AllowedRconPorts = null,
|
|
AgentStats? Stats = null,
|
|
DateTimeOffset? LastPing = null
|
|
) {
|
|
internal AgentConnection? Connection { get; init; }
|
|
|
|
public bool IsOnline { get; internal init; }
|
|
public bool IsOffline => !IsOnline;
|
|
|
|
public RamAllocationUnits? AvailableMemory => MaxMemory - Stats?.RunningInstanceMemory;
|
|
|
|
internal Agent(AgentInfo info) : this(info.Guid, info.Name, info.ProtocolVersion, info.BuildVersion, info.MaxInstances, info.MaxMemory, info.AllowedServerPorts, info.AllowedRconPorts) {}
|
|
|
|
internal Agent AsOnline(DateTimeOffset lastPing) => this with {
|
|
LastPing = lastPing,
|
|
IsOnline = Connection != null
|
|
};
|
|
|
|
internal Agent AsDisconnected() => this with {
|
|
IsOnline = false
|
|
};
|
|
|
|
internal Agent AsOffline() => this with {
|
|
Connection = null,
|
|
Stats = null,
|
|
IsOnline = false
|
|
};
|
|
}
|