Files
ppc_amnet/AMNet.Server/Config.cs
T

48 lines
1.9 KiB
C#

using System;
using System.Linq;
using Windows.Win32;
using Windows.Win32.Foundation;
namespace AMNet.Server;
internal static class Config
{
internal const string IOSection = "aimeio";
private const string ConfigFileName = @".\segatools.ini";
/// <summary>
/// Valid physical card identification methods.
/// IDm - uses the idm of the card to generate a 20-digit identifier (also known as the 0008 number)
/// Access - prefer the real access code of the card. if not available (i.e. Suica card), fallback to the IDm.
/// </summary>
private static readonly string[] ValidPhysicalCardIdentifiers = ["idm", "access"];
static Config()
{
GameId = ReadKey(IOSection, "gameId", 4);
ServerName = ReadKey(IOSection, "serverName", 26, Environment.MachineName);
var physicalCardIdentifierPreference = ReadKey(IOSection, "physicalCardIdentifier", 10);
PhysicalCardIdentifierPreference = ValidPhysicalCardIdentifiers.Contains(physicalCardIdentifierPreference) ? physicalCardIdentifierPreference : ValidPhysicalCardIdentifiers[^1];
EnableAimeTxt = PInvoke.GetPrivateProfileInt(IOSection, "enableKeyboardMode", 1, ConfigFileName) > 0;
AimeTxtPath = ReadKey("aime", "aimePath", PInvoke.MAX_PATH, @"DEVICE\aime.txt");
}
public static string GameId { get; }
public static string ServerName { get; }
public static string PhysicalCardIdentifierPreference { get; }
public static bool EnableAimeTxt { get; }
public static string AimeTxtPath { get; }
internal static unsafe string ReadKey(string section, string key, uint maxLength, string @default = null)
{
// +1 for null terminator
var buffer = stackalloc char[(int)maxLength + 1];
var bufferStr = new PWSTR(buffer);
PInvoke.GetPrivateProfileString(section, key, @default ?? string.Empty, bufferStr, maxLength + 1, ConfigFileName);
return bufferStr.ToString();
}
}