From f26baf35a4f5fc675db805ebadd6875dfadefabd Mon Sep 17 00:00:00 2001 From: Kayori Date: Sat, 20 Sep 2025 16:54:42 +0200 Subject: [PATCH] more standard stuff to abstrractions --- Abstractions/Handlers/TResponseHandler.cs | 38 +++++++++++++++++++ Abstractions/SerializationTypes/XrpcInt.cs | 12 ++++++ Abstractions/SerializationTypes/XrpcString.cs | 12 ++++++ .../Handlers/Boot/GetServicesHandler.cs | 6 +-- .../Handlers/Common/PutPcbEventHandler.cs | 4 +- Core/Server/Services/CardService.cs | 25 ++++++------ Core/Server/Utils/LZ77.cs | 20 +++++----- Core/Server/Utils/RC4.cs | 12 +++--- 8 files changed, 94 insertions(+), 35 deletions(-) create mode 100644 Abstractions/Handlers/TResponseHandler.cs create mode 100644 Abstractions/SerializationTypes/XrpcInt.cs create mode 100644 Abstractions/SerializationTypes/XrpcString.cs diff --git a/Abstractions/Handlers/TResponseHandler.cs b/Abstractions/Handlers/TResponseHandler.cs new file mode 100644 index 0000000..37b3dc9 --- /dev/null +++ b/Abstractions/Handlers/TResponseHandler.cs @@ -0,0 +1,38 @@ +using System; +using System.Threading.Tasks; + +namespace Abstractions.Handlers; + +public abstract class ResponseHandler +{ + public string HandlerModule { get; set; } = ""; + public string HandlerMethod { get; set; } = ""; + public string? HandlerGameCode { get; set; } + public string? HandlerMinVer { get; set; } + public string? HandlerMaxVer { get; set; } + + public virtual void Configure() { throw new NotImplementedException("Configure method not implemented."); } + + protected void Module(string module) + { + this.HandlerModule = module; + } + + protected void Method(string method) + { + this.HandlerMethod = method; + } + + protected void GameCode(string gameCode) + { + this.HandlerGameCode = gameCode; + } + + protected void MinVer(string minVer) + { + this.HandlerMinVer = minVer; + } + + public virtual TResponse Handle(string model) { throw new NotImplementedException("Handle method not implemented."); } + public virtual Task HandleAsync(string model) { throw new NotImplementedException("Handle method not implemented."); } +} \ No newline at end of file diff --git a/Abstractions/SerializationTypes/XrpcInt.cs b/Abstractions/SerializationTypes/XrpcInt.cs new file mode 100644 index 0000000..34bf270 --- /dev/null +++ b/Abstractions/SerializationTypes/XrpcInt.cs @@ -0,0 +1,12 @@ +using System.Xml.Serialization; + +namespace Abstractions.SerializationTypes; + +public struct XrpcInt(int value) +{ + [XmlAttribute("__type")] + public string Type { get; set; } = "s32"; + + [XmlText] + public int Value { get; set; } = value; +} \ No newline at end of file diff --git a/Abstractions/SerializationTypes/XrpcString.cs b/Abstractions/SerializationTypes/XrpcString.cs new file mode 100644 index 0000000..99d54ca --- /dev/null +++ b/Abstractions/SerializationTypes/XrpcString.cs @@ -0,0 +1,12 @@ +using System.Xml.Serialization; + +namespace Abstractions.SerializationTypes; + +public struct XrpcString(string value) +{ + [XmlAttribute("__type")] + public string Type { get; set; } = "str"; + + [XmlText] + public string Value { get; set; } = value; +} \ No newline at end of file diff --git a/Core/Server/Handlers/Boot/GetServicesHandler.cs b/Core/Server/Handlers/Boot/GetServicesHandler.cs index 69c1b50..bafea78 100644 --- a/Core/Server/Handlers/Boot/GetServicesHandler.cs +++ b/Core/Server/Handlers/Boot/GetServicesHandler.cs @@ -65,7 +65,7 @@ namespace Server.Handlers.Boot "slobby", "sglobby" ]; - foreach(string service in kfcServices) + foreach(var service in kfcServices) services.Add(new XElement("item", new XAttribute("name", service), new XAttribute("url", sdvxurl))); } @@ -77,7 +77,7 @@ namespace Server.Handlers.Boot "slobby", "sglobby" ]; - foreach(string service in mdxServices) + foreach(var service in mdxServices) services.Add(new XElement("item", new XAttribute("name", service), new XAttribute("url", mdxurl))); } @@ -89,7 +89,7 @@ namespace Server.Handlers.Boot "slobby", "sglobby" ]; - foreach(string service in m39Services) + foreach(var service in m39Services) services.Add(new XElement("item", new XAttribute("name", service), new XAttribute("url", m39url))); } diff --git a/Core/Server/Handlers/Common/PutPcbEventHandler.cs b/Core/Server/Handlers/Common/PutPcbEventHandler.cs index ba38726..56b24e4 100644 --- a/Core/Server/Handlers/Common/PutPcbEventHandler.cs +++ b/Core/Server/Handlers/Common/PutPcbEventHandler.cs @@ -17,7 +17,7 @@ namespace Server.Handlers.Common var itemElement = rootCallElement?.Element("pcbevent")?.Element("item"); var timeElement = itemElement?.Element("time"); - string time = timeElement is not null ? UnixTimeStampToDateTime(double.Parse(timeElement.Value)).ToString() : ""; + var time = timeElement is not null ? UnixTimeStampToDateTime(double.Parse(timeElement.Value)).ToString() : ""; _logger.LogInformation("PCBEvent: tag={Tag} srcid={SrcId} model={Model} name={Name} time={Time}", rootCallElement?.Attribute("tag")?.Value ?? "", @@ -38,7 +38,7 @@ namespace Server.Handlers.Common public static DateTime UnixTimeStampToDateTime(double unixTimeStamp) { // Unix timestamp is seconds past epoch - DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); + var dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); dateTime = dateTime.AddSeconds(unixTimeStamp).ToLocalTime(); return dateTime; } diff --git a/Core/Server/Services/CardService.cs b/Core/Server/Services/CardService.cs index a665642..939e1e2 100644 --- a/Core/Server/Services/CardService.cs +++ b/Core/Server/Services/CardService.cs @@ -9,7 +9,7 @@ namespace Server.Services; public class CardService : ICardService { private const string Alphabet = "0123456789ABCDEFGHJKLMNPRSTUWXYZ"; - private readonly byte[] RawKey = Encoding.ASCII.GetBytes("?I'llB2c.YouXXXeMeHaYpy!"); + private readonly byte[] _rawKey = "?I'llB2c.YouXXXeMeHaYpy!"u8.ToArray(); private readonly DesEncryption _desEncryption; private readonly ILogger _logger; @@ -17,7 +17,7 @@ public class CardService : ICardService public CardService(ILogger logger, AppDbContext context) { - var encryptionKey = RawKey.Select(x => (byte)(x * 2)).ToArray(); + var encryptionKey = _rawKey.Select(x => (byte)(x * 2)).ToArray(); _desEncryption = new DesEncryption(encryptionKey); _logger = logger; _context = context; @@ -48,7 +48,7 @@ public class CardService : ICardService return string.Empty; } - for(int i = 13; i > 0; i--) + for(var i = 13; i > 0; i--) { card[i] ^= card[i - 1]; } @@ -58,15 +58,12 @@ public class CardService : ICardService var packed = Pack5(card.Take(13).ToArray()).Take(8).ToArray(); var decrypted = _desEncryption.Decrypt(packed).Reverse().ToArray(); - string cardId = BitConverter.ToString(decrypted).Replace("-", "").ToUpper(); + var cardId = Convert.ToHexString(decrypted).ToUpper(); - if(cardType == 1 && !cardId.StartsWith("E004") || cardType == 2 && cardId[0] != '0') - { - _logger.LogError("Invalid card `type"); - return string.Empty; - } + if ((cardType != 1 || cardId.StartsWith("E004")) && (cardType != 2 || cardId[0] == '0')) return cardId; + _logger.LogError("Invalid card `type"); + return string.Empty; - return cardId; } public string ConvertUidToKonamiId(string uid) @@ -77,7 +74,7 @@ public class CardService : ICardService return string.Empty; } - int cardType = uid.StartsWith("E004") ? 1 : uid[0] == '0' ? 2 : -1; + var cardType = uid.StartsWith("E004") ? 1 : uid[0] == '0' ? 2 : -1; if(cardType == -1) { @@ -106,7 +103,7 @@ public class CardService : ICardService } var unpackedId = Unpack5(encryptedId); - unpackedId = unpackedId.Take(13).Concat(new byte[] { 0, 0, 0 }).ToArray(); + unpackedId = unpackedId.Take(13).Concat("\0\0\0"u8.ToArray()).ToArray(); if(unpackedId.Length != 16) { @@ -123,7 +120,7 @@ public class CardService : ICardService } unpackedId[14] = (byte)cardType; - unpackedId[15] = (byte)CalculateChecksum(unpackedId); + unpackedId[15] = CalculateChecksum(unpackedId); return string.Concat(unpackedId.Select(u => Alphabet[u])); } @@ -158,7 +155,7 @@ public class CardService : ICardService private static byte[] Pack5(byte[] data) { var packed = new StringBuilder(); - foreach(byte b in data) + foreach(var b in data) { packed.Append(Convert.ToString(b, 2).PadLeft(5, '0')); } diff --git a/Core/Server/Utils/LZ77.cs b/Core/Server/Utils/LZ77.cs index 76882dc..fc3b07d 100644 --- a/Core/Server/Utils/LZ77.cs +++ b/Core/Server/Utils/LZ77.cs @@ -5,15 +5,15 @@ public class LZ77 public static byte[] Decompress(byte[] data) { // init a buffer, size comes from eamuemu - byte[] res = new byte[0x190000]; + var res = new byte[0x190000]; // current data location - int p = 0; + var p = 0; // current output location - int r = 0; + var r = 0; // traceback location - int t = 0; + var t = 0; // bitmask location - int b = 8; // read next bitmask byte on start + var b = 8; // read next bitmask byte on start byte mask = 0; while(true) @@ -50,7 +50,7 @@ public class LZ77 count = (count & 0x0F) + 3; // copy earlier result bytes to the end t = r - distance; // initialize traceback location - for(int i = 0; i < count; i++) + for(var i = 0; i < count; i++) { res[r] = t < 0 ? (byte)0x00 : res[t]; r += 1; @@ -62,16 +62,16 @@ public class LZ77 b += 1; } // r = result length - byte[] output = new byte[r]; + var output = new byte[r]; Array.Copy(res, output, r); return output; } public static byte[] CompressEmpty(byte[] data) { - byte[] res = new byte[data.Length + data.Length / 8 + 3]; - int p = 0; - for(int i = 0; i < data.Length; i++) + var res = new byte[data.Length + data.Length / 8 + 3]; + var p = 0; + for(var i = 0; i < data.Length; i++) { if(i % 8 == 0) { diff --git a/Core/Server/Utils/RC4.cs b/Core/Server/Utils/RC4.cs index c563107..bd9384a 100644 --- a/Core/Server/Utils/RC4.cs +++ b/Core/Server/Utils/RC4.cs @@ -6,14 +6,14 @@ namespace Server.Utils { public static string Encrypt(string key, string data) { - Encoding unicode = Encoding.Unicode; + var unicode = Encoding.Unicode; return Convert.ToBase64String(Encrypt(unicode.GetBytes(key), unicode.GetBytes(data))); } public static string Decrypt(string key, string data) { - Encoding unicode = Encoding.Unicode; + var unicode = Encoding.Unicode; return unicode.GetString(Encrypt(unicode.GetBytes(key), Convert.FromBase64String(data))); } @@ -30,7 +30,7 @@ namespace Server.Utils private static byte[] InitializeKeyStream(byte[] key) { - byte[] keyStream = Enumerable.Range(0, 256) + var keyStream = Enumerable.Range(0, 256) .Select(i => (byte)i) .ToArray(); @@ -46,10 +46,10 @@ namespace Server.Utils private static IEnumerable EncryptOutput(byte[] key, IEnumerable data) { - byte[] keyStream = InitializeKeyStream(key); + var keyStream = InitializeKeyStream(key); - int keyStreamIndex = 0; - int keyIndex = 0; + var keyStreamIndex = 0; + var keyIndex = 0; return data.Select((dataByte) => {