ddon-server/Arrowgene.Ddon.Server/ServerSetting.cs
2026-03-17 09:29:37 +08:00

82 lines
3.5 KiB
C#

using System.Net;
using System.Runtime.Serialization;
using Arrowgene.Networking.SAEAServer;
namespace Arrowgene.Ddon.Server
{
[DataContract]
public class ServerSetting
{
public const int InvalidId = -1;
[DataMember(Order = 0)] public int Id { get; set; }
[DataMember(Order = 1)] public string Name { get; set; }
[IgnoreDataMember] public IPAddress ListenIpAddress { get; set; }
[DataMember(Name = "ListenIpAddress", Order = 5)]
public string DataListenIpAddress
{
get => ListenIpAddress.ToString();
set => ListenIpAddress = string.IsNullOrEmpty(value) ? null : IPAddress.Parse(value);
}
[DataMember(Order = 6)] public ushort ServerPort { get; set; }
[DataMember(Order = 20)] public int LogLevel { get; set; }
[DataMember(Order = 21)] public bool LogUnknownPackets { get; set; }
[DataMember(Order = 22)] public bool LogOutgoingPackets { get; set; }
[DataMember(Order = 23)] public bool LogOutgoingPacketPayload { get; set; }
[DataMember(Order = 24)] public bool LogIncomingPackets { get; set; }
[DataMember(Order = 25)] public bool LogIncomingPacketPayload { get; set; }
[DataMember(Order = 26)] public bool LogIncomingPacketStructure { get; set; }
[DataMember(Order = 27)] public bool LogOutgoingPacketStructure { get; set; }
[DataMember(Order = 100)] public TcpServerSettings TcpServerSettings { get; set; }
[DataMember(Order = 120)] public int ConsumerQueueCapacityPerLane { get; set; }
public ServerSetting()
{
Id = InvalidId;
Name = "";
ListenIpAddress = IPAddress.Any;
ServerPort = 52100;
LogLevel = 0;
LogUnknownPackets = true;
LogOutgoingPackets = true;
LogOutgoingPacketStructure = false;
LogOutgoingPacketPayload = false;
LogIncomingPackets = true;
LogIncomingPacketStructure = false;
LogIncomingPacketPayload = false;
ConsumerQueueCapacityPerLane = 100000;
TcpServerSettings = new TcpServerSettings();
// DDON Specific defaults
TcpServerSettings.OrderingLaneCount = 1;
TcpServerSettings.MaxQueuedSendBytes = 8388608;
}
public ServerSetting(ServerSetting setting)
{
Id = setting.Id;
Name = setting.Name;
ListenIpAddress = setting.ListenIpAddress;
ServerPort = setting.ServerPort;
LogLevel = setting.LogLevel;
LogUnknownPackets = setting.LogUnknownPackets;
LogOutgoingPackets = setting.LogOutgoingPackets;
LogOutgoingPacketStructure = setting.LogOutgoingPacketStructure;
LogOutgoingPacketPayload = setting.LogOutgoingPacketPayload;
LogIncomingPackets = setting.LogIncomingPackets;
LogIncomingPacketStructure = setting.LogIncomingPacketStructure;
LogIncomingPacketPayload = setting.LogIncomingPacketPayload;
ConsumerQueueCapacityPerLane = setting.ConsumerQueueCapacityPerLane;
TcpServerSettings = new TcpServerSettings(setting.TcpServerSettings);
}
// Note: method is called after the object is completely deserialized - constructors are skipped.
[OnDeserialized]
void OnDeserialized(StreamingContext context)
{
TcpServerSettings ??= new TcpServerSettings();
}
}
}