baseline: OpenMU upstream b5a0961 (fresh source)
This commit is contained in:
121
src/ChatServer/ExDbConnector/Settings.cs
Normal file
121
src/ChatServer/ExDbConnector/Settings.cs
Normal file
@@ -0,0 +1,121 @@
|
||||
// <copyright file="Settings.cs" company="MUnique">
|
||||
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
|
||||
// </copyright>
|
||||
|
||||
namespace MUnique.OpenMU.ChatServer.ExDbConnector;
|
||||
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
|
||||
/// <summary>
|
||||
/// A class which reads settings from a file.
|
||||
/// Line Format:
|
||||
/// [Key]=[Value]
|
||||
/// Line comments can be added by starting with "#".
|
||||
/// </summary>
|
||||
internal class Settings
|
||||
{
|
||||
private readonly IDictionary<string, string> _settingsDictionary = new Dictionary<string, string>();
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Settings"/> class.
|
||||
/// Reads the file contents in, if the file is available.
|
||||
/// </summary>
|
||||
/// <param name="file">The file.</param>
|
||||
public Settings(string file)
|
||||
{
|
||||
if (!File.Exists(file))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var line in File.ReadAllLines(file))
|
||||
{
|
||||
var elements = line.Split('=');
|
||||
if (elements.Length > 1
|
||||
&& !elements[0].StartsWith("#", StringComparison.InvariantCulture)
|
||||
&& !this._settingsDictionary.ContainsKey(elements[0]))
|
||||
{
|
||||
this._settingsDictionary.Add(elements[0], elements[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the configured chat server listener port.
|
||||
/// </summary>
|
||||
public int? ChatServerListenerPort
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this["ChatServerListenerPort"] != null && int.TryParse(this["ChatServerListenerPort"], out var result))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
return default;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the configured exDb server port.
|
||||
/// </summary>
|
||||
public int? ExDbPort
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this["ExDbPort"] != null)
|
||||
{
|
||||
if (int.TryParse(this["ExDbPort"], out int result))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
return default;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the configured exDb server host.
|
||||
/// </summary>
|
||||
public string? ExDbHost => this["ExDbHost"];
|
||||
|
||||
/// <summary>
|
||||
/// Gets the configured xor32 key.
|
||||
/// </summary>
|
||||
public byte[]? Xor32Key
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this["Xor32Key"] != null)
|
||||
{
|
||||
var customXor32KeyList = new List<byte>();
|
||||
var keyAsString = this["Xor32Key"];
|
||||
if (keyAsString is not null)
|
||||
{
|
||||
var bytesAsString = keyAsString.Split(' ');
|
||||
foreach (var byteString in bytesAsString)
|
||||
{
|
||||
customXor32KeyList.Add(byte.Parse(byteString, NumberStyles.HexNumber, CultureInfo.InvariantCulture));
|
||||
}
|
||||
}
|
||||
|
||||
return customXor32KeyList.ToArray();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private string? this[string key]
|
||||
{
|
||||
get
|
||||
{
|
||||
this._settingsDictionary.TryGetValue(key, out var value);
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user