diff --git a/Application/Application.csproj b/Application/Application.csproj
index 572c37c..b777846 100644
--- a/Application/Application.csproj
+++ b/Application/Application.csproj
@@ -13,6 +13,7 @@
+
diff --git a/Application/Handlers/Api/Auth/ChangePasswordCommand.cs b/Application/Handlers/Api/Auth/ChangePasswordCommand.cs
index 31ce72f..40d5f5c 100644
--- a/Application/Handlers/Api/Auth/ChangePasswordCommand.cs
+++ b/Application/Handlers/Api/Auth/ChangePasswordCommand.cs
@@ -1,6 +1,6 @@
namespace Application.Handlers.Api.Auth;
-public record ChangePasswordCommand(string AccessCode, string OldPassword, string NewPassword) : IRequest>;
+public record ChangePasswordCommand(uint Baid, string OldPassword, string NewPassword) : IRequest>;
public class ChangePasswordCommandHandler(ITaikoDbContext context, ILogger logger)
@@ -8,15 +8,15 @@ public class ChangePasswordCommandHandler(ITaikoDbContext context, ILogger> Handle(ChangePasswordCommand request, CancellationToken cancellationToken)
{
- var card = await context.Cards.Include(card => card.Ba)
- .ThenInclude(user => user!.Credential)
- .FirstOrDefaultAsync(card => card.AccessCode == request.AccessCode, cancellationToken);
- if (card is null)
+ var user = await context.UserData.Include(u => u.Credential)
+ .FirstOrDefaultAsync(u => u.Baid == request.Baid, cancellationToken);
+
+ if (user is null)
{
- return ApiResult.Failed("Invalid access code");
+ return ApiResult.Failed("User not found");
}
- var credential = card.Ba?.Credential;
+ var credential = user.Credential;
if (credential is null || credential.Password == string.Empty)
{
return ApiResult.Failed("User not registered");
diff --git a/Application/Handlers/Api/Auth/RegisterCommand.cs b/Application/Handlers/Api/Auth/RegisterCommand.cs
index 6ac8958..9809b9c 100644
--- a/Application/Handlers/Api/Auth/RegisterCommand.cs
+++ b/Application/Handlers/Api/Auth/RegisterCommand.cs
@@ -1,13 +1,11 @@
namespace Application.Handlers.Api.Auth;
-public record RegisterCommand : IRequest>
-{
- public string AccessCode { get; set; } = string.Empty;
- public string Password { get; set; } = string.Empty;
- public bool RegisterWithLastPlayTime { get; set; }
- public DateTime LastPlayDateTime { get; set; }
- public string InviteCode { get; set; } = string.Empty;
-}
+public record RegisterCommand(
+ string AccessCode,
+ string Password,
+ bool RegisterWithLastPlayTime,
+ DateTime LastPlayDateTime,
+ string InviteCode) : IRequest>;
public class RegisterCommandHandler(ITaikoDbContext context, ILogger logger)
: IRequestHandler>
diff --git a/Application/Handlers/Api/Cards/BindAccessCodeCommand.cs b/Application/Handlers/Api/Cards/BindAccessCodeCommand.cs
index c780755..d085022 100644
--- a/Application/Handlers/Api/Cards/BindAccessCodeCommand.cs
+++ b/Application/Handlers/Api/Cards/BindAccessCodeCommand.cs
@@ -12,6 +12,7 @@ public class BindAccessCodeCommandHandler(ITaikoDbContext context, ILogger("Access code already exists");
}
+
var newCard = new Card
{
diff --git a/Application/Handlers/Api/User/GetSongLeaderboardQuery.cs b/Application/Handlers/Api/User/GetSongLeaderboardQuery.cs
index cdce2f4..3e01e89 100644
--- a/Application/Handlers/Api/User/GetSongLeaderboardQuery.cs
+++ b/Application/Handlers/Api/User/GetSongLeaderboardQuery.cs
@@ -1,7 +1,7 @@
namespace Application.Handlers.Api.User;
using LeaderBoard = PaginatedResult;
-public record GetSongLeaderboardQuery(uint SongId, Difficulty Difficulty, int Baid, int Page, int Limit) : IRequest>;
+public record GetSongLeaderboardQuery(uint SongId, Difficulty Difficulty, uint Baid, int Page, int Limit) : IRequest>;
public class GetSongLeaderboardQueryHandler(ITaikoDbContext context, ILogger logger)
: IRequestHandler>
diff --git a/Application/Handlers/Api/User/UpdateUserSettingsCommand.cs b/Application/Handlers/Api/User/UpdateUserSettingsCommand.cs
new file mode 100644
index 0000000..6835eaa
--- /dev/null
+++ b/Application/Handlers/Api/User/UpdateUserSettingsCommand.cs
@@ -0,0 +1,26 @@
+using Application.Mappers;
+
+namespace Application.Handlers.Api.User;
+
+public record UpdateUserSettingsCommand(uint Baid, UserSetting UserSetting): IRequest>;
+
+public class UpdateUserSettingsCommandHandler(ITaikoDbContext context)
+ : IRequestHandler>
+{
+ public async Task> Handle(UpdateUserSettingsCommand request, CancellationToken cancellationToken)
+ {
+ var user = await context.UserData.FirstOrDefaultAsync(u => u.Baid == request.Baid, cancellationToken);
+ if (user is null)
+ {
+ return ApiResult.Failed("User not found!");
+ }
+ UserSettingMapper.UpdateUserSetting(request.UserSetting, user);
+
+ var toneFlg = user.ToneFlgArray;
+ toneFlg = toneFlg.Append(0u).Append(request.UserSetting.SelectedToneId).Distinct().ToList();
+
+ user.ToneFlgArray = toneFlg;
+ await context.SaveChangesAsync(cancellationToken);
+ return ApiResult.Succeed(true);
+ }
+}
\ No newline at end of file
diff --git a/Application/Handlers/Game/GetCrownDataQuery.cs b/Application/Handlers/Game/GetCrownDataQuery.cs
new file mode 100644
index 0000000..4297272
--- /dev/null
+++ b/Application/Handlers/Game/GetCrownDataQuery.cs
@@ -0,0 +1,43 @@
+using Domain.Settings;
+using Microsoft.Extensions.Options;
+
+namespace Application.Handlers.Game;
+
+public record GetCrownDataQuery(uint Baid): IRequest;
+
+public class GetCrownDataQueryHandler(ITaikoDbContext context, IOptions options, ILogger logger)
+ : IRequestHandler
+{
+
+ public async Task Handle(GetCrownDataQuery request, CancellationToken cancellationToken)
+ {
+ var songBestData = await context.SongBestData.Where(datum => datum.Baid == request.Baid)
+ .ToListAsync(cancellationToken);
+ var songIdMax = options.Value.EnableMoreSongs ? Constants.MusicIdMaxExpanded : Constants.MusicIdMax;
+
+ var crown = new ushort[songIdMax + 1];
+ var dondafulCrown = new ushort[songIdMax + 1];
+
+ for (var songId = 0; songId < songIdMax; songId++)
+ {
+ var id = songId;
+ dondafulCrown[songId] = songBestData
+ // Select song of this song id with dondaful crown
+ .Where(datum => datum.SongId == id &&
+ datum.BestCrown == CrownType.Dondaful)
+ // Calculate flag according to difficulty
+ .Aggregate((byte)0, (flag, datum) => FlagCalculator.ComputeDondafulCrownFlag(flag, datum.Difficulty));
+
+ crown[songId] = songBestData
+ // Select song of this song id with clear or fc crown
+ .Where(datum => datum.SongId == id &&
+ datum.BestCrown is CrownType.Clear or CrownType.Gold)
+ // Calculate flag according to difficulty
+ .Aggregate((ushort)0, (flag, datum) => FlagCalculator.ComputeCrownFlag(flag, datum.BestCrown, datum.Difficulty));
+ }
+
+ var response = new CommonCrownDataResponse(GZipBytesUtil.GetGZipBytes(crown), GZipBytesUtil.GetGZipBytes(dondafulCrown));
+
+ return response;
+ }
+}
\ No newline at end of file
diff --git a/Application/Handlers/Game/GetScoreRankQuery.cs b/Application/Handlers/Game/GetScoreRankQuery.cs
new file mode 100644
index 0000000..e11d649
--- /dev/null
+++ b/Application/Handlers/Game/GetScoreRankQuery.cs
@@ -0,0 +1,47 @@
+using Domain.Settings;
+using Microsoft.Extensions.Options;
+
+namespace Application.Handlers.Game;
+
+public record GetScoreRankQuery(uint Baid): IRequest;
+
+public class GetScoreRankQueryHandler(ITaikoDbContext context, IOptions options, ILogger logger)
+ : IRequestHandler
+{
+ public async Task Handle(GetScoreRankQuery request, CancellationToken cancellationToken)
+ {
+ var songIdMax = options.Value.EnableMoreSongs ? Constants.MusicIdMaxExpanded : Constants.MusicIdMax;
+ var kiwamiScores = new byte[songIdMax + 1];
+ var miyabiScores = new ushort[songIdMax + 1];
+ var ikiScores = new ushort[songIdMax + 1];
+ var songBestData = await context.SongBestData.Where(datum => datum.Baid == request.Baid)
+ .ToListAsync(cancellationToken);
+
+ for (var songId = 0; songId < songIdMax; songId++)
+ {
+ var id = songId;
+ kiwamiScores[songId] = songBestData
+ .Where(datum => datum.SongId == id &&
+ datum.BestScoreRank == ScoreRank.Dondaful)
+ .Aggregate((byte)0, (flag, datum) => FlagCalculator.ComputeKiwamiScoreRankFlag(flag, datum.Difficulty));
+
+ ikiScores[songId] = songBestData
+ .Where(datum => datum.SongId == id &&
+ datum.BestScoreRank is ScoreRank.White or ScoreRank.Bronze or ScoreRank.Silver)
+ .Aggregate((ushort)0, (flag, datum) => FlagCalculator.ComputeMiyabiOrIkiScoreRank(flag, datum.BestScoreRank, datum.Difficulty));
+
+ miyabiScores[songId] = songBestData
+ .Where(datum => datum.SongId == id &&
+ datum.BestScoreRank is ScoreRank.Gold or ScoreRank.Purple or ScoreRank.Sakura)
+ .Aggregate((ushort)0, (flag, datum) => FlagCalculator.ComputeMiyabiOrIkiScoreRank(flag, datum.BestScoreRank, datum.Difficulty));
+ }
+
+ var response = new CommonScoreRankResponse(
+ GZipBytesUtil.GetGZipBytes(ikiScores),
+ GZipBytesUtil.GetGZipBytes(kiwamiScores),
+ GZipBytesUtil.GetGZipBytes(miyabiScores)
+ );
+ return response;
+ }
+}
+
diff --git a/Application/Handlers/Game/VerifyQrQuery.cs b/Application/Handlers/Game/VerifyQrQuery.cs
new file mode 100644
index 0000000..80e7e63
--- /dev/null
+++ b/Application/Handlers/Game/VerifyQrQuery.cs
@@ -0,0 +1,17 @@
+namespace Application.Handlers.Game;
+
+public record VerifyQrQuery(string Serial): IRequest;
+
+public class VerifyQrQueryHandler(IGameDataService gameDataService)
+ : IRequestHandler
+{
+ public Task Handle(VerifyQrQuery request, CancellationToken cancellationToken)
+ {
+ var qrCodeDataDictionary = gameDataService.GetQRCodeDataDictionary();
+
+ qrCodeDataDictionary.TryGetValue(request.Serial, out var qrCodeId);
+
+ return Task.FromResult(qrCodeId == 0 ?
+ new CommonVerifyQrResponse(false, 0) : new CommonVerifyQrResponse(true, qrCodeId));
+ }
+}
\ No newline at end of file
diff --git a/Application/Mappers/UserSettingMapper.cs b/Application/Mappers/UserSettingMapper.cs
index 3a94b48..b058fec 100644
--- a/Application/Mappers/UserSettingMapper.cs
+++ b/Application/Mappers/UserSettingMapper.cs
@@ -15,12 +15,26 @@ public static partial class UserSettingMapper
[MapProperty(nameof(UserDatum.UnlockedHead), nameof(UserSetting.UnlockedHead), Use = nameof(FixUnlock))]
[MapProperty(nameof(UserDatum.UnlockedPuchi), nameof(UserSetting.UnlockedPuchi), Use = nameof(FixUnlock))]
public static partial UserSetting MapToUserSetting(UserDatum user);
+
+ [MapperIgnoreSource(nameof(UserSetting.Baid))]
+ [MapperIgnoreSource(nameof(UserSetting.UnlockedKigurumi))]
+ [MapperIgnoreSource(nameof(UserSetting.UnlockedBody))]
+ [MapperIgnoreSource(nameof(UserSetting.UnlockedFace))]
+ [MapperIgnoreSource(nameof(UserSetting.UnlockedHead))]
+ [MapperIgnoreSource(nameof(UserSetting.UnlockedPuchi))]
+ [MapProperty(nameof(UserSetting.PlaySetting), nameof(UserDatum.OptionSetting), Use = nameof(PlaySettingToShort))]
+ public static partial void UpdateUserSetting(UserSetting userSetting, UserDatum user);
public static PlaySetting ShortToPlaySetting(short option)
{
return PlaySettingConverter.ShortToPlaySetting(option);
}
+ public static short PlaySettingToShort(PlaySetting setting)
+ {
+ return PlaySettingConverter.PlaySettingToShort(setting);
+ }
+
public static List FixUnlock(List unlock)
{
if (!unlock.Contains(0))
diff --git a/Application/Models/Game/CommonCrownDataResponse.cs b/Application/Models/Game/CommonCrownDataResponse.cs
new file mode 100644
index 0000000..3ed2a8f
--- /dev/null
+++ b/Application/Models/Game/CommonCrownDataResponse.cs
@@ -0,0 +1,3 @@
+namespace Application.Models.Game;
+
+public record CommonCrownDataResponse(byte[] CrownFlg, byte[] DondafulCrownFlg);
\ No newline at end of file
diff --git a/Application/Models/Game/CommonScoreRankResponse.cs b/Application/Models/Game/CommonScoreRankResponse.cs
new file mode 100644
index 0000000..b53f845
--- /dev/null
+++ b/Application/Models/Game/CommonScoreRankResponse.cs
@@ -0,0 +1,3 @@
+namespace Application.Models.Game;
+
+public record CommonScoreRankResponse(byte[] IkiScoreRankFlg, byte[] KiwamiScoreRankFlg, byte[] MiyabiScoreRankFlg);
\ No newline at end of file
diff --git a/Application/Models/Game/CommonVerifyQrResponse.cs b/Application/Models/Game/CommonVerifyQrResponse.cs
new file mode 100644
index 0000000..e0ac8f6
--- /dev/null
+++ b/Application/Models/Game/CommonVerifyQrResponse.cs
@@ -0,0 +1,3 @@
+namespace Application.Models.Game;
+
+public record CommonVerifyQrResponse(bool IsQrValid, uint QrCodeId);
\ No newline at end of file
diff --git a/Application/Utils/GZipBytesUtil.cs b/Application/Utils/GZipBytesUtil.cs
new file mode 100644
index 0000000..138594f
--- /dev/null
+++ b/Application/Utils/GZipBytesUtil.cs
@@ -0,0 +1,61 @@
+using System.Runtime.InteropServices;
+using System.Text;
+using ICSharpCode.SharpZipLib.GZip;
+
+namespace Application.Utils;
+
+public static class GZipBytesUtil
+{
+ public static MemoryStream GenerateStreamFromString(string value)
+ {
+ return new MemoryStream(Encoding.UTF8.GetBytes(value));
+ }
+
+ public static byte[] GetEmptyJsonGZipBytes()
+ {
+ var outputStream = new MemoryStream(1024);
+ using (var stream = new GZipOutputStream(outputStream))
+ using (var writer = new StreamWriter(stream, Encoding.UTF8))
+ {
+ /*writer.AutoFlush = true;
+ writer.WriteLine("{}");*/
+ stream.Write(Array.Empty());
+ }
+
+ return outputStream.ToArray();
+ }
+
+ public static byte[] GetGZipBytes(byte[] input)
+ {
+ var outputStream = new MemoryStream(1024);
+ using (var stream = new GZipOutputStream(outputStream))
+ {
+ stream.Write(input);
+ }
+
+ return outputStream.ToArray();
+ }
+
+ public static byte[] GetGZipBytes(T[] data) where T : struct
+ {
+ var outputStream = new MemoryStream(1024);
+ using (var stream = new GZipOutputStream(outputStream))
+ {
+ var byteRef = MemoryMarshal.AsBytes(new ReadOnlySpan(data));
+ stream.Write(byteRef);
+ }
+
+ return outputStream.ToArray();
+ }
+
+ public static byte[] DecompressGZipBytes(byte[] input)
+ {
+ using (var inputStream = new MemoryStream(input))
+ using (var stream = new GZipInputStream(inputStream))
+ using (var outputStream = new MemoryStream(1024))
+ {
+ stream.CopyTo(outputStream);
+ return outputStream.ToArray();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Server/.gitignore b/Server/.gitignore
new file mode 100644
index 0000000..e80d64d
--- /dev/null
+++ b/Server/.gitignore
@@ -0,0 +1 @@
+wwwroot/data/datatable/*
\ No newline at end of file
diff --git a/Server/Certificates/cert.pfx b/Server/Certificates/cert.pfx
new file mode 100644
index 0000000..b703cde
Binary files /dev/null and b/Server/Certificates/cert.pfx differ
diff --git a/Server/Certificates/root.pfx b/Server/Certificates/root.pfx
new file mode 100644
index 0000000..a40e669
Binary files /dev/null and b/Server/Certificates/root.pfx differ
diff --git a/Server/Configurations/AuthSettings.json b/Server/Configurations/AuthSettings.json
new file mode 100644
index 0000000..b1bea33
--- /dev/null
+++ b/Server/Configurations/AuthSettings.json
@@ -0,0 +1,8 @@
+{
+ "AuthSettings": {
+ "JwtKey": "SuperSecretKeyAndHeresItsPadding",
+ "JwtIssuer": "http://localhost:5000",
+ "JwtAudience": "http://localhost:5000",
+ "AuthenticationRequired": false
+ }
+}
\ No newline at end of file
diff --git a/Server/Configurations/DataSettings.json b/Server/Configurations/DataSettings.json
new file mode 100644
index 0000000..52eabe4
--- /dev/null
+++ b/Server/Configurations/DataSettings.json
@@ -0,0 +1,13 @@
+{
+ "DataSettings" : {
+ "DanDataFileName" : "dan_data.json",
+ "GaidenDataFileName" : "gaiden_data.json",
+ "EventFolderDataFileName" : "event_folder_data.json",
+ "IntroDataFileName" : "intro_data.json",
+ "MovieDataFileName": "movie_data.json",
+ "ShopFolderDataFileName": "shop_folder_data.json",
+ "TokenDataFileName": "token_data.json",
+ "LockedSongsDataFileName": "locked_songs_data.json",
+ "QRCodeDataFileName": "qrcode_data.json"
+ }
+}
\ No newline at end of file
diff --git a/Server/Configurations/Database.json b/Server/Configurations/Database.json
new file mode 100644
index 0000000..1dbc08c
--- /dev/null
+++ b/Server/Configurations/Database.json
@@ -0,0 +1,3 @@
+{
+ "DbFileName" : "taiko.db3"
+}
\ No newline at end of file
diff --git a/Server/Configurations/Kestrel.json b/Server/Configurations/Kestrel.json
new file mode 100644
index 0000000..cbd029f
--- /dev/null
+++ b/Server/Configurations/Kestrel.json
@@ -0,0 +1,34 @@
+{
+ "Kestrel": {
+ "Endpoints": {
+ "BaseServer": {
+ "Url": "http://0.0.0.0:5000"
+ },
+ "AmAuthServer": {
+ "Url": "http://0.0.0.0:80"
+ },
+ "MuchaServer": {
+ "Url": "https://0.0.0.0:10122"
+ },
+ "GameServer1": {
+ "Url": "https://0.0.0.0:54430"
+ },
+ "GameServer2": {
+ "Url": "https://0.0.0.0:54431"
+ },
+ "GameServerCN": {
+ "Url": "https://0.0.0.0:57402"
+ },
+ "GarmcServer": {
+ "Url": "https://0.0.0.0:443"
+ }
+ },
+ "Certificates": {
+ "Default": {
+ "Path": "Certificates/cert.pfx",
+ "Password": "",
+ "AllowInvalid": true
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Server/Configurations/Logging.json b/Server/Configurations/Logging.json
new file mode 100644
index 0000000..5a5b182
--- /dev/null
+++ b/Server/Configurations/Logging.json
@@ -0,0 +1,27 @@
+{
+ "Serilog": {
+ "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
+ "MinimumLevel": {
+ "Default": "Information",
+ "Override": {
+ "Microsoft": "Warning",
+ "Microsoft.AspNetCore": "Warning",
+ "Microsoft.Hosting.Lifetime": "Information"
+ }
+ },
+ "Filter": [
+ {
+ "Name": "ByExcluding",
+ "Args": {
+ "expression": "@mt = 'An unhandled exception has occurred while executing the request.'"
+ }
+ }
+ ],
+ "WriteTo": [
+ {
+ "Name": "File",
+ "Args": { "path": "./Logs/log-.txt", "rollingInterval": "Day" }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/Server/Configurations/ServerSettings.json b/Server/Configurations/ServerSettings.json
new file mode 100644
index 0000000..9995f9e
--- /dev/null
+++ b/Server/Configurations/ServerSettings.json
@@ -0,0 +1,8 @@
+{
+ "ServerSettings": {
+ "MuchaUrl": "https://v402-front.mucha-prd.nbgi-amnet.jp:10122",
+ "GameUrl": "vsapi.taiko-p.jp",
+ "EnableMoreSongs": false,
+ "MoreSongsSize": 9000
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/AmAuth/PowerOnController.cs b/Server/Controllers/AmAuth/PowerOnController.cs
new file mode 100644
index 0000000..3d27ab1
--- /dev/null
+++ b/Server/Controllers/AmAuth/PowerOnController.cs
@@ -0,0 +1,52 @@
+using Domain.Settings;
+using Microsoft.Extensions.Options;
+using Server.Models;
+using Server.Utils;
+
+namespace Server.Controllers.AmAuth;
+
+[ApiController]
+[Route("/sys/servlet/PowerOn")]
+public class PowerOnController : BaseController
+{
+ private readonly ServerSettings settings;
+
+ public PowerOnController(IOptions settings)
+ {
+ this.settings = settings.Value;
+ }
+
+ [HttpPost]
+ public ContentResult PowerOn([FromForm] PowerOnRequest request)
+ {
+ Logger.LogInformation("Power on request: {Request}",request.Stringify());
+ var now = DateTime.Now;
+ var response = new Dictionary
+ {
+ {"stat", "1"},
+ {"uri", settings.GameUrl},
+ {"host", settings.GameUrl},
+ {"place_id", "JPN0123"},
+ {"name", "NAMCO"},
+ {"nickname", "NAMCO"},
+ {"region0", "1"},
+ {"region_name0", "NAMCO"},
+ {"region_name1", "X"},
+ {"region_name2", "Y"},
+ {"region_name3", "Z"},
+ {"country", "JPN"},
+ {"allnet_id", "456"},
+ {"timezone", "002,00"},
+ {"setting", ""},
+ {"year", now.Year.ToString()},
+ {"month", now.Month.ToString()},
+ {"day", now.Day.ToString()},
+ {"hour", now.Hour.ToString()},
+ {"minute", now.Minute.ToString()},
+ {"second", now.Second.ToString()},
+ {"res_class", "PowerOnResponseVer2"},
+ {"token", "123"}
+ };
+ return Content(FormOutputUtil.ToFormOutput(response) + '\n');
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/AmUpdater/MuchaController.cs b/Server/Controllers/AmUpdater/MuchaController.cs
new file mode 100644
index 0000000..dc17f3c
--- /dev/null
+++ b/Server/Controllers/AmUpdater/MuchaController.cs
@@ -0,0 +1,90 @@
+using Domain.Settings;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Options;
+using Server.Models;
+using Server.Utils;
+
+namespace Server.Controllers.AmUpdater;
+
+public class MuchaController : BaseController
+{
+ private readonly ServerSettings settings;
+
+ public MuchaController(IOptions settings)
+ {
+ this.settings = settings.Value;
+ }
+
+ [HttpPost("/mucha_front/boardauth.do")]
+
+ public ContentResult BoardAuth([FromForm] MuchaUpdateCheckRequest request)
+ {
+ Logger.LogInformation("Mucha request: {Request}", request.Stringify());
+ var serverTime = DateTime.Now.ToString("yyyyMMddHHmm");
+ var utcServerTime = DateTime.UtcNow.ToString("yyyyMMddHHmm");
+ var response = new Dictionary
+ {
+ { "RESULTS", "001" },
+ { "AREA_0", "008" },
+ { "AREA_0_EN", "" },
+ { "AREA_1", "009" },
+ { "AREA_1_EN", "" },
+ { "AREA_2", "010" },
+ { "AREA_2_EN", "" },
+ { "AREA_3", "011" },
+ { "AREA_3_EN", "" },
+ { "AREA_FULL_0", "" },
+ { "AREA_FULL_0_EN", "" },
+ { "AREA_FULL_1", "" },
+ { "AREA_FULL_1_EN", "" },
+ { "AREA_FULL_2", "" },
+ { "AREA_FULL_2_EN", "" },
+ { "AREA_FULL_3", "" },
+ { "AREA_FULL_3_EN", "" },
+ { "AUTH_INTERVAL", "86400" },
+ { "CHARGE_URL", $"{settings.MuchaUrl}/charge/" },
+ { "CONSUME_TOKEN", "0" },
+ { "COUNTRY_CD", "JPN" },
+ { "DONGLE_FLG", "1" },
+ { "EXPIRATION_DATE", "null" },
+ { "FILE_URL", $"{settings.MuchaUrl}/file/" },
+ { "FORCE_BOOT", "0" },
+ { "PLACE_ID", request.PlaceId ?? "" },
+ { "PREFECTURE_ID", "14" },
+ { "SERVER_TIME", serverTime },
+ { "UTC_SERVER_TIME", utcServerTime },
+ { "SHOP_NAME", "NAMCO" },
+ { "SHOP_NAME_EN", "NAMCO" },
+ { "SHOP_NICKNAME", "W" },
+ { "SHOP_NICKNAME_EN", "W" },
+ { "URL_1", $"{settings.MuchaUrl}/url1/" },
+ { "URL_2", $"{settings.MuchaUrl}/url2/" },
+ { "URL_3", $"{settings.MuchaUrl}/url3/" },
+ { "USE_TOKEN", "0" }
+ };
+ var formOutput = FormOutputUtil.ToFormOutput(response);
+ return Content(formOutput);
+ }
+
+ [HttpPost("/mucha_front/updatacheck.do")]
+ public ContentResult UpdateCheck(MuchaBoardAuthRequest request)
+ {
+ Logger.LogInformation("Request is {Request}", request.Stringify());
+ var response = new Dictionary
+ {
+ { "RESULTS", "001" },
+ { "UPDATE_VER_1", request.GameVersion ?? "S1210JPN08.18" },
+ { "UPDATE_URL_1", $"{settings.MuchaUrl}/updUrl1/" },
+ { "UPDATE_SIZE_1", "0" },
+ { "UPDATE_CRC_1", "0000000000000000" },
+ { "CHECK_URL_1", $"{settings.MuchaUrl}/checkUrl/" },
+ { "EXE_VER_1", request.GameVersion ?? "S1210JPN08.18" },
+ { "INFO_SIZE_1", "0" },
+ { "COM_SIZE_1", "0" },
+ { "COM_TIME_1", "0" },
+ { "LAN_INFO_SIZE_1", "0" }
+ };
+ var formOutput = FormOutputUtil.ToFormOutput(response);
+ return Content(formOutput);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Api/AuthController.cs b/Server/Controllers/Api/AuthController.cs
new file mode 100644
index 0000000..111c876
--- /dev/null
+++ b/Server/Controllers/Api/AuthController.cs
@@ -0,0 +1,132 @@
+using System.IdentityModel.Tokens.Jwt;
+using System.Security.Claims;
+using System.Text;
+using Application.Handlers.Api.Auth;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.Extensions.Options;
+using Microsoft.IdentityModel.Tokens;
+using OtpNet;
+using Shared.Models.Requests;
+
+namespace Server.Controllers.Api;
+
+[ApiController]
+[Route("api/[controller]")]
+public class AuthController : BaseController
+{
+
+ [HttpPost("Login")]
+ [AllowAnonymous]
+ public async Task Login(LoginRequest loginRequest)
+ {
+ var loginCommand = new LoginCommand(loginRequest.AccessCode, loginRequest.Password);
+ var apiResult = await Mediator.Send(loginCommand);
+
+ if (!apiResult.Succeeded)
+ {
+ return Unauthorized(apiResult.Message);
+ }
+
+ return Ok(apiResult.Data);
+ }
+
+ /*[HttpPost("LoginWithToken")]
+ [ServiceFilter(typeof(AuthorizeIfRequiredAttribute))]
+ public IActionResult LoginWithToken()
+ {
+ var tokenInfo = authService.ExtractTokenInfo(Microsoft.AspNetCore.Http.HttpContext);
+ if (tokenInfo == null)
+ {
+ return Unauthorized();
+ }
+
+ return Ok();
+ }*/
+
+
+ [HttpPost("Register")]
+ [AllowAnonymous]
+ public async Task Register(RegisterRequest registerRequest)
+ {
+ var registerCommand = RegisterCommandMapper.ToCommand(registerRequest);
+ var apiResult = await Mediator.Send(registerCommand);
+
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return Ok();
+ }
+
+ [HttpPost]
+ [Authorize(Policy = "AuthConditional")]
+ public async Task ChangePassword(ChangePasswordRequest request)
+ {
+ var baid = uint.Parse(User.Claims.First(c => c.Type == ClaimTypes.Name).Value);
+ var changePasswordCommand = new ChangePasswordCommand(baid, request.OldPassword, request.NewPassword);
+ var apiResult = await Mediator.Send(changePasswordCommand);
+
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return Ok();
+ }
+
+ [HttpPost]
+ [Authorize(Policy = "AuthConditional")]
+ public async Task ChangePasswordAdmin(ChangePasswordRequest request)
+ {
+ var changePasswordCommand = ChangePasswordCommandMapper.ToCommand(request);
+ var apiResult = await Mediator.Send(changePasswordCommand);
+
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return Ok();
+ }
+
+ [HttpPost]
+ [Authorize(Policy = "AuthConditionalAdmin")]
+ public async Task ResetPasswordAdmin(ResetPasswordRequest resetPasswordRequest)
+ {
+ var resetPasswordCommand = new ResetPasswordCommand(resetPasswordRequest.Baid);
+ var apiResult = await Mediator.Send(resetPasswordCommand);
+
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return Ok();
+ }
+
+ [HttpPost]
+ [Authorize(Policy = "AuthConditional")]
+ public async Task ResetPassword(ResetPasswordRequest resetPasswordRequest)
+ {
+ var baid = uint.Parse(User.Claims.First(c => c.Type == ClaimTypes.Name).Value);
+ var resetPasswordCommand = new ResetPasswordCommand(baid);
+ var apiResult = await Mediator.Send(resetPasswordCommand);
+
+ if (!apiResult.Succeeded)
+ {
+ return Unauthorized(apiResult.Message);
+ }
+
+ return Ok();
+ }
+
+ [HttpPost("GenerateOtp")]
+ [Authorize(Policy = "AuthConditionalAdmin")]
+ public IActionResult GenerateOtp(GenerateOtpRequest request)
+ {
+ var command = new GenerateOtpCommand(request.Baid);
+ var apiResult = Mediator.Send(command);
+ return Ok(apiResult.Result.Data);
+ }
+}
diff --git a/Server/Controllers/Api/CardsController.cs b/Server/Controllers/Api/CardsController.cs
new file mode 100644
index 0000000..b360e3a
--- /dev/null
+++ b/Server/Controllers/Api/CardsController.cs
@@ -0,0 +1,73 @@
+using System.Security.Claims;
+using Application.Handlers.Api.Cards;
+using Microsoft.AspNetCore.Authorization;
+using Shared.Models.Requests;
+
+namespace Server.Controllers.Api;
+
+[ApiController]
+[Route("api/[controller]")]
+public class CardsController : BaseController
+{
+ [HttpDelete("admin/{accessCode}")]
+ [Authorize(Policy = "AuthConditionalAdmin")]
+ public async Task DeleteAccessCodeAdmin(string accessCode)
+ {
+ var command = new DeleteCardCommand(accessCode, 0, true);
+ var apiResult = await Mediator.Send(command);
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return NoContent();
+ }
+
+ [HttpDelete("{accessCode}")]
+ [Authorize(Policy = "AuthConditional")]
+ public async Task DeleteAccessCode(string accessCode)
+ {
+ var baid = uint.Parse(User.Claims.First(c => c.Type == ClaimTypes.Name).Value);
+ var command = new DeleteCardCommand(accessCode, baid, false);
+ var apiResult = await Mediator.Send(command);
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return NoContent();
+ }
+
+ [HttpPost]
+ [Authorize(Policy = "AuthConditional")]
+ public async Task BindAccessCode(BindAccessCodeRequest request)
+ {
+ if (request.Baid != 0)
+ {
+ return BadRequest("Baid must be 0");
+ }
+ var baid = uint.Parse(User.Claims.First(c => c.Type == ClaimTypes.Name).Value);
+ var command = new BindAccessCodeCommand(request.AccessCode, baid);
+ var apiResult = await Mediator.Send(command);
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return Ok();
+ }
+
+ [HttpPost]
+ [Authorize(Policy = "AuthConditionalAdmin")]
+ public async Task BindAccessCodeAdmin(BindAccessCodeRequest request)
+ {
+ var command = new BindAccessCodeCommand(request.AccessCode, request.Baid);
+ var apiResult = await Mediator.Send(command);
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return Ok();
+ }
+}
diff --git a/Server/Controllers/Api/DanBestDataController.cs b/Server/Controllers/Api/DanBestDataController.cs
new file mode 100644
index 0000000..a6c9b0e
--- /dev/null
+++ b/Server/Controllers/Api/DanBestDataController.cs
@@ -0,0 +1,41 @@
+using System.Security.Claims;
+using Application.Handlers.Api.Data;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.Extensions.Options;
+
+namespace Server.Controllers.Api;
+
+[ApiController]
+[Route("api/[controller]")]
+public class DanBestDataController : BaseController
+{
+ [HttpGet("my")]
+ [Authorize(Policy = "AuthConditional")]
+ public async Task GetDanBestData()
+ {
+ var baid = uint.Parse(User.Claims.First(c => c.Type == ClaimTypes.Name).Value);
+
+ var query = new GetDanBestDataQuery(baid);
+ var apiResult = await Mediator.Send(query);
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return Ok(apiResult.Data);
+ }
+
+ [HttpGet("{baid}")]
+ [Authorize(Policy = "AuthConditionalAdmin")]
+ public async Task GetDanBestData(uint baid)
+ {
+ var query = new GetDanBestDataQuery(baid);
+ var apiResult = await Mediator.Send(query);
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return Ok(apiResult.Data);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Api/FavoriteSongsController.cs b/Server/Controllers/Api/FavoriteSongsController.cs
new file mode 100644
index 0000000..deb3152
--- /dev/null
+++ b/Server/Controllers/Api/FavoriteSongsController.cs
@@ -0,0 +1,75 @@
+using System.Security.Claims;
+using Application.Handlers.Api.User;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.Extensions.Options;
+using Shared.Models.Requests;
+
+namespace Server.Controllers.Api;
+
+[ApiController]
+[Route("api/[controller]")]
+public class FavoriteSongsController : BaseController
+{
+ [HttpPost]
+ [Authorize(Policy = "AuthConditional")]
+ public async Task UpdateFavoriteSong(SetFavoriteRequest request)
+ {
+ if (request.Baid != 0)
+ {
+ return BadRequest("Baid must be 0");
+ }
+ var baid = uint.Parse(User.Claims.First(c => c.Type == ClaimTypes.Name).Value);
+ var command = new UpdateFavoriteSongCommand(baid, request.SongId, request.IsFavorite);
+ var apiResult = await Mediator.Send(command);
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return NoContent();
+ }
+
+ [HttpPost]
+ [Authorize(Policy = "AuthConditionalAdmin")]
+ public async Task UpdateFavoriteSongAdmin(SetFavoriteRequest request)
+ {
+ var command = new UpdateFavoriteSongCommand(request.Baid, request.SongId, request.IsFavorite);
+ var apiResult = await Mediator.Send(command);
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return NoContent();
+ }
+
+ [HttpGet("my")]
+ [Authorize(Policy = "AuthConditional")]
+ public async Task GetFavoriteSongs()
+ {
+ var baid = uint.Parse(User.Claims.First(c => c.Type == ClaimTypes.Name).Value);
+
+ var query = new GetFavoriteSongsQuery(baid);
+ var apiResult = await Mediator.Send(query);
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return Ok(apiResult.Data);
+ }
+
+ [HttpGet("{baid}")]
+ [Authorize(Policy = "AuthConditionalAdmin")]
+ public async Task GetFavoriteSongs(uint baid)
+ {
+ var query = new GetFavoriteSongsQuery(baid);
+ var apiResult = await Mediator.Send(query);
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return Ok(apiResult.Data);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Api/GameDataController.cs b/Server/Controllers/Api/GameDataController.cs
new file mode 100644
index 0000000..716c4f6
--- /dev/null
+++ b/Server/Controllers/Api/GameDataController.cs
@@ -0,0 +1,44 @@
+using Application.Interfaces;
+using Microsoft.AspNetCore.Authorization;
+
+namespace Server.Controllers.Api;
+
+[ApiController]
+[Route("api/[controller]")]
+public class GameDataController(IGameDataService gameDataService) : BaseController
+{
+ [HttpGet("MusicDetails")]
+ [Authorize(Policy = "AuthConditional")]
+ public IActionResult GetMusicDetails()
+ {
+ return Ok(gameDataService.GetMusicDetailDictionary());
+ }
+
+ [HttpGet("Costumes")]
+ [Authorize(Policy = "AuthConditional")]
+ public IActionResult GetCostumes()
+ {
+ return Ok(gameDataService.GetCostumeList());
+ }
+
+ [HttpGet("Titles")]
+ [Authorize(Policy = "AuthConditional")]
+ public IActionResult GetTitles()
+ {
+ return Ok(gameDataService.GetTitleDictionary());
+ }
+
+ [HttpGet("LockedCostumes")]
+ [Authorize(Policy = "AuthConditional")]
+ public IActionResult GetLockedCostumes()
+ {
+ return Ok(gameDataService.GetLockedCostumeDataDictionary());
+ }
+
+ [HttpGet("LockedTitles")]
+ [Authorize(Policy = "AuthConditional")]
+ public IActionResult GetLockedTitles()
+ {
+ return Ok(gameDataService.GetLockedTitleDataDictionary());
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Api/PlayDataController.cs b/Server/Controllers/Api/PlayDataController.cs
new file mode 100644
index 0000000..628d27f
--- /dev/null
+++ b/Server/Controllers/Api/PlayDataController.cs
@@ -0,0 +1,42 @@
+using System.Security.Claims;
+using Application.Handlers.Api.User;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.Extensions.Options;
+using Riok.Mapperly.Abstractions;
+using Shared.Models.Responses;
+
+namespace Server.Controllers.Api;
+
+[ApiController]
+[Route("api/[controller]")]
+public class PlayDataController : BaseController
+{
+ [HttpGet("{baid}")]
+ [Authorize(Policy = "AuthConditionalAdmin")]
+ public async Task GetSongBestRecords(uint baid)
+ {
+ var query = new GetSongBestRecordsQuery(baid);
+ var apiResult = await Mediator.Send(query);
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return Ok(apiResult.Data);
+ }
+
+ [HttpGet("my")]
+ [Authorize(Policy = "AuthConditional")]
+ public async Task GetSongBestRecords()
+ {
+ var baid = uint.Parse(User.Claims.First(c => c.Type == ClaimTypes.Name).Value);
+ var query = new GetSongBestRecordsQuery(baid);
+ var apiResult = await Mediator.Send(query);
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return Ok(apiResult.Data);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Api/PlayHistoryController.cs b/Server/Controllers/Api/PlayHistoryController.cs
new file mode 100644
index 0000000..ffa4e92
--- /dev/null
+++ b/Server/Controllers/Api/PlayHistoryController.cs
@@ -0,0 +1,40 @@
+using System.Security.Claims;
+using Application.Handlers.Api.User;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.Extensions.Options;
+
+namespace Server.Controllers.Api;
+
+[ApiController]
+[Route("api/[controller]")]
+public class PlayHistoryController : BaseController
+{
+ [HttpGet("{baid}")]
+ [Authorize(Policy = "AuthConditionalAdmin")]
+ public async Task GetSongHistory(uint baid)
+ {
+ var query = new GetSongHistoryQuery(baid);
+ var apiResult = await Mediator.Send(query);
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return Ok(apiResult.Data);
+ }
+
+ [HttpGet("my")]
+ [Authorize(Policy = "AuthConditional")]
+ public async Task GetSongHistory()
+ {
+ var baid = uint.Parse(User.Claims.First(c => c.Type == ClaimTypes.Name).Value);
+ var query = new GetSongHistoryQuery(baid);
+ var apiResult = await Mediator.Send(query);
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return Ok(apiResult.Data);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Api/SongLeaderboardController.cs b/Server/Controllers/Api/SongLeaderboardController.cs
new file mode 100644
index 0000000..71f5142
--- /dev/null
+++ b/Server/Controllers/Api/SongLeaderboardController.cs
@@ -0,0 +1,28 @@
+using System.Security.Claims;
+using Application.Handlers.Api.User;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.Extensions.Options;
+using Shared.Models.Requests;
+
+namespace Server.Controllers.Api;
+
+[ApiController]
+[Route("api/[controller]")]
+
+public class SongLeaderboardController : BaseController
+{
+ [HttpGet("{songId}")]
+ [Authorize("AuthConditional")]
+ public async Task GetSongLeaderboard([FromQuery]GetSongLeaderboardRequest request)
+ {
+ var baid = uint.Parse(User.Claims.First(c => c.Type == ClaimTypes.Name).Value);
+ var query = new GetSongLeaderboardQuery(request.SongId, request.Difficulty, baid, request.Page, request.Limit);
+ var apiResult = await Mediator.Send(query);
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return Ok(apiResult.Data);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Api/UserSettingsController.cs b/Server/Controllers/Api/UserSettingsController.cs
new file mode 100644
index 0000000..73cc3f6
--- /dev/null
+++ b/Server/Controllers/Api/UserSettingsController.cs
@@ -0,0 +1,41 @@
+using System.Security.Claims;
+using Application.Handlers.Api.User;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.Extensions.Options;
+
+namespace Server.Controllers.Api;
+
+[ApiController]
+[Route("/api/[controller]")]
+public class UserSettingsController : BaseController
+{
+ [HttpPost("{baid}")]
+ [Authorize(Policy = "AuthConditionalAdmin")]
+ public async Task SaveUserSetting(uint baid, UserSetting userSetting)
+ {
+ var command = new UpdateUserSettingsCommand(baid, userSetting);
+ var result = await Mediator.Send(command);
+ if (!result.Succeeded)
+ {
+ return BadRequest(result.Message);
+ }
+
+ return NoContent();
+ }
+
+ [HttpPost("my")]
+ [Authorize(Policy = "AuthConditional")]
+ public async Task SaveMyUserSetting(UserSetting userSetting)
+ {
+ var baid = uint.Parse(User.Claims.First(c => c.Type == ClaimTypes.Name).Value);
+ var command = new UpdateUserSettingsCommand(baid, userSetting);
+ var result = await Mediator.Send(command);
+ if (!result.Succeeded)
+ {
+ return BadRequest(result.Message);
+ }
+
+ return NoContent();
+ }
+
+}
\ No newline at end of file
diff --git a/Server/Controllers/Api/UsersController.cs b/Server/Controllers/Api/UsersController.cs
new file mode 100644
index 0000000..9d29477
--- /dev/null
+++ b/Server/Controllers/Api/UsersController.cs
@@ -0,0 +1,88 @@
+using System.Security.Claims;
+using Application.Handlers.Api.User;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.Extensions.Options;
+using Shared.Models.Requests;
+using Shared.Models.Responses;
+
+namespace Server.Controllers.Api;
+
+[ApiController]
+[Route("api/[controller]")]
+public class UsersController : BaseController
+{
+ [HttpGet("my")]
+ [Authorize(Policy = "AuthConditional")]
+ public async Task GetUser()
+ {
+ var baid = uint.Parse(User.Claims.First(c => c.Type == ClaimTypes.Name).Value);
+ var query = new GetUserQuery(baid);
+ var apiResult = await Mediator.Send(query);
+
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return Ok(apiResult.Data);
+ }
+
+ [HttpGet("{baid}")]
+ [Authorize(Policy = "AuthConditionalAdmin")]
+ public async Task GetUser(uint baid)
+ {
+ var query = new GetUserQuery(baid);
+ var apiResult = await Mediator.Send(query);
+
+ if (!apiResult.Succeeded)
+ {
+ return null;
+ }
+
+ return apiResult.Data;
+ }
+
+ [HttpGet]
+ [Authorize(Policy = "AuthConditionalAdmin")]
+ public async Task> GetUsers([FromQuery] GetUsersRequest request)
+ {
+ var query = new GetUsersQuery(request.Page, request.Limit, request.SearchTerm);
+ var apiResult = await Mediator.Send(query);
+
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return Ok(apiResult.Data);
+ }
+
+ [HttpDelete("{baid}")]
+ [Authorize(Policy = "AuthConditionalAdmin")]
+ public async Task DeleteUser(uint baid)
+ {
+ var command = new DeleteUserCommand(baid);
+ var apiResult = await Mediator.Send(command);
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return NoContent();
+ }
+
+ [HttpDelete("me")]
+ [Authorize(Policy = "AuthConditional")]
+ public async Task DeleteCurrentUser()
+ {
+ var baid = uint.Parse(User.Claims.First(c => c.Type == ClaimTypes.Name).Value);
+ var command = new DeleteUserCommand(baid);
+ var apiResult = await Mediator.Send(command);
+ if (!apiResult.Succeeded)
+ {
+ return BadRequest(apiResult.Message);
+ }
+
+ return NoContent();
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/BaseController.cs b/Server/Controllers/BaseController.cs
new file mode 100644
index 0000000..3ce1536
--- /dev/null
+++ b/Server/Controllers/BaseController.cs
@@ -0,0 +1,12 @@
+namespace Server.Controllers;
+
+public abstract class BaseController : ControllerBase where T : BaseController
+{
+ private ILogger? logger;
+
+ private ISender? mediator;
+
+ protected ISender Mediator => (mediator ??= HttpContext.RequestServices.GetService()) ?? throw new InvalidOperationException();
+
+ protected ILogger Logger => (logger ??= HttpContext.RequestServices.GetService>()) ?? throw new InvalidOperationException();
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/AddTokenCountController.cs b/Server/Controllers/Game/AddTokenCountController.cs
new file mode 100644
index 0000000..6b4de9c
--- /dev/null
+++ b/Server/Controllers/Game/AddTokenCountController.cs
@@ -0,0 +1,39 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class AddTokenCountController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/addtokencount_7547j3o4.php")]
+ [Produces("application/protobuf")]
+ public async Task AddTokenCount([FromBody] AddTokenCountRequest request)
+ {
+ Logger.LogInformation("[3906] AddTokenCount request : {Request}", request.Stringify());
+
+ var command = new AddTokenCountCommand(AddTokenCountRequestMapper.Map(request));
+ await Mediator.Send(command);
+
+ var response = new AddTokenCountResponse
+ {
+ Result = 1
+ };
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/addtokencount.php")]
+ [Produces("application/protobuf")]
+ public async Task AddTokenCount3209([FromBody] Server.Models.v3209.AddTokenCountRequest request)
+ {
+ Logger.LogInformation("[3209] AddTokenCount request : {Request}", request.Stringify());
+
+ var command = new AddTokenCountCommand(AddTokenCountRequestMapper.Map(request));
+ await Mediator.Send(command);
+
+ var response = new AddTokenCountResponse
+ {
+ Result = 1
+ };
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/BaidController.cs b/Server/Controllers/Game/BaidController.cs
new file mode 100644
index 0000000..81ba4f6
--- /dev/null
+++ b/Server/Controllers/Game/BaidController.cs
@@ -0,0 +1,64 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class BaidController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/baidcheck_dcfxit1u.php")]
+ [Produces("application/protobuf")]
+ public async Task GetBaid([FromBody] BAIDRequest request)
+ {
+ Logger.LogInformation("Baid request: {Request}", request.Stringify());
+ var commonResponse = await Mediator.Send(new BaidQuery(request.AccessCode));
+ BAIDResponse response;
+ if (commonResponse.IsNewUser)
+ {
+ Logger.LogInformation("New user with access code {AccessCode}", request.AccessCode);
+
+ response = new BAIDResponse
+ {
+ Result = 1,
+ PlayerType = 1,
+ Baid = commonResponse.Baid,
+ };
+
+ return Ok(response);
+ }
+
+ response = Mappers.BaidResponseMapper.Map3906WithPostProcess(commonResponse);
+ response.PlayerType = 0;
+ response.IsDispAchievementTypeSet = true;
+ response.IsDispSouuchiOn = true;
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/baidcheck.php")]
+ [Produces("application/protobuf")]
+ public async Task GetBaid3209([FromBody] Server.Models.v3209.BAIDRequest request)
+ {
+ Logger.LogInformation("Baid request: {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new BaidQuery(request.WechatQrStr));
+ Server.Models.v3209.BAIDResponse response;
+ if (commonResponse.IsNewUser)
+ {
+ Logger.LogInformation("New user with access code {AccessCode}", request.WechatQrStr);
+
+ response = new Server.Models.v3209.BAIDResponse
+ {
+ Result = 1,
+ PlayerType = 1,
+ Baid = commonResponse.Baid,
+ };
+
+ return Ok(response);
+ }
+
+ response = Mappers.BaidResponseMapper.Map3209WithPostProcess(commonResponse);
+ response.PlayerType = 0;
+ response.IsDispAchievementTypeSet = true;
+ response.IsDispSouuchiOn = true;
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/BookkeepingController.cs b/Server/Controllers/Game/BookkeepingController.cs
new file mode 100644
index 0000000..5ae34b3
--- /dev/null
+++ b/Server/Controllers/Game/BookkeepingController.cs
@@ -0,0 +1,31 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class BookkeepingController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/bookkeeping_s4esi5un.php")]
+ [Produces("application/protobuf")]
+ public IActionResult StartupAuth([FromBody] BookKeepingRequest request)
+ {
+ Logger.LogInformation("[3906] Bookkeeping request: {Request}", request.Stringify());
+ var response = new BookKeepingResponse
+ {
+ Result = 1
+ };
+
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/bookkeeping.php")]
+ [Produces("application/protobuf")]
+ public IActionResult StartupAuth3209([FromBody] Server.Models.v3209.BookKeepingRequest request)
+ {
+ Logger.LogInformation("[3209] Bookkeeping request: {Request}", request.Stringify());
+ var response = new BookKeepingResponse
+ {
+ Result = 1
+ };
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/ChallengeCompetitionController.cs b/Server/Controllers/Game/ChallengeCompetitionController.cs
new file mode 100644
index 0000000..b89d3ea
--- /dev/null
+++ b/Server/Controllers/Game/ChallengeCompetitionController.cs
@@ -0,0 +1,33 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class ChallengeCompetitionController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/challengecompe.php")]
+ [Produces("application/protobuf")]
+ public IActionResult HandleChallenge([FromBody] ChallengeCompeRequest request)
+ {
+ Logger.LogInformation("ChallengeCompe request : {Request}", request.Stringify());
+
+ var response = new ChallengeCompeResponse
+ {
+ Result = 1
+ };
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/challengecompe.php")]
+ [Produces("application/protobuf")]
+ public IActionResult HandleChallenge3209([FromBody] Server.Models.v3209.ChallengeCompeRequest request)
+ {
+ Logger.LogInformation("ChallengeCompe request : {Request}", request.Stringify());
+
+ var response = new Server.Models.v3209.ChallengeCompeResponse
+ {
+ Result = 1
+ };
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/CrownsDataController.cs b/Server/Controllers/Game/CrownsDataController.cs
new file mode 100644
index 0000000..1c27994
--- /dev/null
+++ b/Server/Controllers/Game/CrownsDataController.cs
@@ -0,0 +1,44 @@
+using Application.Utils;
+using Microsoft.Extensions.Options;
+
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class CrownsDataController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/crownsdata_oqgqy90s.php")]
+ [Produces("application/protobuf")]
+ public async Task CrownsData([FromBody] CrownsDataRequest request)
+ {
+ Logger.LogInformation("CrownsData request : {Request}", request.Stringify());
+
+ var crownData = await Mediator.Send(new GetCrownDataQuery(request.Baid));
+
+ var response = new CrownsDataResponse
+ {
+ Result = 1,
+ CrownFlg = crownData.CrownFlg,
+ DondafulCrownFlg = crownData.DondafulCrownFlg
+ };
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/crownsdata.php")]
+ [Produces("application/protobuf")]
+ public async Task CrownsData3209([FromBody] Server.Models.v3209.CrownsDataRequest request)
+ {
+ Logger.LogInformation("CrownsData request : {Request}", request.Stringify());
+
+ var crownData = await Mediator.Send(new GetCrownDataQuery((uint)request.Baid));
+
+ var response = new Server.Models.v3209.CrownsDataResponse
+ {
+ Result = 1,
+ CrownFlg = crownData.CrownFlg,
+ DondafulCrownFlg = crownData.DondafulCrownFlg
+ };
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/ExecuteQrCodeController.cs b/Server/Controllers/Game/ExecuteQrCodeController.cs
new file mode 100644
index 0000000..9db5dfa
--- /dev/null
+++ b/Server/Controllers/Game/ExecuteQrCodeController.cs
@@ -0,0 +1,35 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class ExecuteQrCodeController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/executeqrcode_rgowsr5m.php")]
+ [Produces("application/protobuf")]
+ public IActionResult ExecuteQrCode([FromBody] ExecuteQrcodeRequest request)
+ {
+ Logger.LogInformation("ExecuteQrcode request : {Request}", request.Stringify());
+
+ var response = new ExecuteQrcodeResponse
+ {
+ QrcodeId = 1,
+ Result = 1
+ };
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/executeqrcode.php")]
+ [Produces("application/protobuf")]
+ public IActionResult ExecuteQrCode3209([FromBody] Server.Models.v3209.ExecuteQrcodeRequest request)
+ {
+ Logger.LogInformation("ExecuteQrcode request : {Request}", request.Stringify());
+
+ var response = new Server.Models.v3209.ExecuteQrcodeResponse
+ {
+ QrcodeId = 1,
+ Result = 1
+ };
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/GetAiDataController.cs b/Server/Controllers/Game/GetAiDataController.cs
new file mode 100644
index 0000000..939e8ad
--- /dev/null
+++ b/Server/Controllers/Game/GetAiDataController.cs
@@ -0,0 +1,27 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class GetAiDataController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/getaidata_6x30b9nr.php")]
+ [Produces("application/protobuf")]
+ public async Task GetAiData([FromBody] GetAiDataRequest request)
+ {
+ Logger.LogInformation("GetAiData request : {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new GetAiDataQuery(request.Baid));
+ var response = Mappers.AiDataResponseMapper.MapTo3906(commonResponse);
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/getaidata.php")]
+ [Produces("application/protobuf")]
+ public async Task GetAiData3209([FromBody] Server.Models.v3209.GetAiDataRequest request)
+ {
+ Logger.LogInformation("GetAiData request : {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new GetAiDataQuery((uint)request.Baid));
+ var response = Mappers.AiDataResponseMapper.MapTo3209(commonResponse);
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/GetAiScoreController.cs b/Server/Controllers/Game/GetAiScoreController.cs
new file mode 100644
index 0000000..857e0b0
--- /dev/null
+++ b/Server/Controllers/Game/GetAiScoreController.cs
@@ -0,0 +1,30 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class GetAiScoreController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/getaiscore_lp38po4w.php")]
+ [Produces("application/protobuf")]
+ public async Task GetAiScore([FromBody] GetAiScoreRequest request)
+ {
+ Logger.LogInformation("GetAiScore request : {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new GetAiScoreQuery(request.Baid, request.SongNo, request.Level));
+ var response = AiScoreMappers.MapTo3906(commonResponse);
+
+ return Ok(response);
+ }
+
+ [HttpPost("v12r00_cn/chassis/getaiscore.php")]
+ [Produces("application/protobuf")]
+ public async Task GetAiScore3209([FromBody] Server.Models.v3209.GetAiScoreRequest request)
+ {
+ Logger.LogInformation("GetAiScore request : {Request}", request.Stringify());
+
+ var commonResponse =
+ await Mediator.Send(new GetAiScoreQuery((uint)request.Baid, request.SongNo, request.Level));
+ var response = AiScoreMappers.MapTo3209(commonResponse);
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/GetApplicationUrlController.cs b/Server/Controllers/Game/GetApplicationUrlController.cs
new file mode 100644
index 0000000..1919b85
--- /dev/null
+++ b/Server/Controllers/Game/GetApplicationUrlController.cs
@@ -0,0 +1,37 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class GetApplicationUrlController : BaseController
+{
+
+ [HttpPost("/v12r08_ww/chassis/getapplicationurl.php")]
+ [Produces("application/protobuf")]
+ public IActionResult GetApplicationUrl([FromBody] GetApplicationUrlRequest request)
+ {
+ Logger.LogInformation("GetApplicationUrl request : {Request}", request.Stringify());
+
+ var response = new GetApplicationUrlResponse
+ {
+ Result = 1,
+ ApplicationUrl = $"{HttpContext.Request.Host.Value}/app"
+ };
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/getapplicationurl.php")]
+ [Produces("application/protobuf")]
+ public IActionResult GetApplicationUrl3209([FromBody] Server.Models.v3209.GetApplicationUrlRequest request)
+ {
+ Logger.LogInformation("GetApplicationUrl request : {Request}", request.Stringify());
+
+ var response = new Server.Models.v3209.GetApplicationUrlResponse
+ {
+ Result = 1,
+ ApplicationUrl = $"{HttpContext.Request.Host.Value}/app"
+ };
+
+ return Ok(response);
+ }
+
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/GetDanOdaiController.cs b/Server/Controllers/Game/GetDanOdaiController.cs
new file mode 100644
index 0000000..d0f6bd4
--- /dev/null
+++ b/Server/Controllers/Game/GetDanOdaiController.cs
@@ -0,0 +1,39 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class GetDanOdaiController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/getdanodai_ela9zu1a.php")]
+ [Produces("application/protobuf")]
+ public async Task GetDanOdai([FromBody] GetDanOdaiRequest request)
+ {
+ Logger.LogInformation("GetDanOdai request : {Request}", request.Stringify());
+
+ var response = new GetDanOdaiResponse
+ {
+ Result = 1
+ };
+
+ var odaiDataList = await Mediator.Send(new GetDanOdaiQuery(request.DanIds, request.Type));
+ response.AryOdaiDatas.AddRange(odaiDataList.Select(DanDataMappers.To3906OdaiData));
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/getdanodai.php")]
+ [Produces("application/protobuf")]
+ public async Task GetDanOdai3209([FromBody] Server.Models.v3209.GetDanOdaiRequest request)
+ {
+ Logger.LogInformation("GetDanOdai request : {Request}", request.Stringify());
+
+ var response = new Server.Models.v3209.GetDanOdaiResponse
+ {
+ Result = 1
+ };
+
+ var odaiDataList = await Mediator.Send(new GetDanOdaiQuery(request.DanIds, request.Type));
+ response.AryOdaiDatas.AddRange(odaiDataList.Select(DanDataMappers.To3209OdaiData));
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/GetDanScoreController.cs b/Server/Controllers/Game/GetDanScoreController.cs
new file mode 100644
index 0000000..15f29f9
--- /dev/null
+++ b/Server/Controllers/Game/GetDanScoreController.cs
@@ -0,0 +1,29 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class GetDanScoreController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/getdanscore_frqhg7q6.php")]
+ [Produces("application/protobuf")]
+ public async Task GetDanScore([FromBody] GetDanScoreRequest request)
+ {
+ Logger.LogInformation("GetDanScore request : {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new GetDanScoreQuery(request.Baid, request.Type, request.DanIds));
+ var response = DanScoreMappers.MapTo3906(commonResponse);
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/getdanscore.php")]
+ [Produces("application/protobuf")]
+ public async Task GetDanScore3209([FromBody] Server.Models.v3209.GetDanScoreRequest request)
+ {
+ Logger.LogInformation("GetDanScore3209 request : {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new GetDanScoreQuery((uint)request.Baid, request.Type, request.DanIds));
+ var response = DanScoreMappers.MapTo3209(commonResponse);
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/GetFolderController.cs b/Server/Controllers/Game/GetFolderController.cs
new file mode 100644
index 0000000..ca3cc5b
--- /dev/null
+++ b/Server/Controllers/Game/GetFolderController.cs
@@ -0,0 +1,25 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class GetFolderController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/getfolder_rffj346i.php")]
+ [Produces("application/protobuf")]
+ public async Task GetFolder([FromBody] GetfolderRequest request)
+ {
+ Logger.LogInformation("GetFolder request : {Request}", request.Stringify());
+ var commonResponse = await Mediator.Send(new GetFolderQuery(request.FolderIds));
+ var response = FolderDataMappers.MapTo3906(commonResponse);
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/getfolder.php")]
+ [Produces("application/protobuf")]
+ public async Task GetFolder([FromBody] Server.Models.v3209.GetfolderRequest request)
+ {
+ Logger.LogInformation("GetFolder3209 request : {Request}", request.Stringify());
+ var commonResponse = await Mediator.Send(new GetFolderQuery(request.FolderIds));
+ var response = FolderDataMappers.MapTo3209(commonResponse);
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/GetGenericMasterController.cs b/Server/Controllers/Game/GetGenericMasterController.cs
new file mode 100644
index 0000000..965f6e2
--- /dev/null
+++ b/Server/Controllers/Game/GetGenericMasterController.cs
@@ -0,0 +1,40 @@
+using Application.Utils;
+
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class GetGenericMasterController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/getgenericmaster_ts8om3qd.php")]
+ [Produces("application/protobuf")]
+ public IActionResult GetGenericMaster([FromBody] GetGenericMasterRequest request)
+ {
+ Logger.LogInformation("GetGenericMasterRequest: {Request}", request.Stringify());
+
+ var response = new GetGenericMasterResponse
+ {
+ Result = 1,
+ VerupNo = 2,
+ EnableIdBit = FlagCalculator.GetBitArrayTrue(5000)
+ };
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/getgenericmaster.php")]
+ [Produces("application/protobuf")]
+ public IActionResult GetGenericMaster([FromBody] Server.Models.v3209.GetGenericMasterRequest request)
+ {
+ Logger.LogInformation("GetGenericMaster3209Request: {Request}", request.Stringify());
+
+ var response = new Server.Models.v3209.GetGenericMasterResponse
+ {
+ Result = 1,
+ VerupNo = 2,
+ EnableIdBit = FlagCalculator.GetBitArrayTrue(5000)
+ };
+
+ return Ok(response);
+ }
+
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/GetScoreRankController.cs b/Server/Controllers/Game/GetScoreRankController.cs
new file mode 100644
index 0000000..a98dfad
--- /dev/null
+++ b/Server/Controllers/Game/GetScoreRankController.cs
@@ -0,0 +1,44 @@
+using Application.Utils;
+using Microsoft.Extensions.Options;
+
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class GetScoreRankController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/getscorerank_1c8l7y61.php")]
+ [Produces("application/protobuf")]
+ public async Task GetScoreRank([FromBody] GetScoreRankRequest request)
+ {
+ Logger.LogInformation("GetScoreRank request : {Request}", request.Stringify());
+
+ var scoreRankData = await Mediator.Send(new GetScoreRankQuery(request.Baid));
+ var response = new GetScoreRankResponse
+ {
+ Result = 1,
+ IkiScoreRankFlg = scoreRankData.IkiScoreRankFlg,
+ KiwamiScoreRankFlg = scoreRankData.KiwamiScoreRankFlg,
+ MiyabiScoreRankFlg = scoreRankData.MiyabiScoreRankFlg
+ };
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/getscorerank.php")]
+ [Produces("application/protobuf")]
+ public async Task GetScoreRank3209([FromBody] Server.Models.v3209.GetScoreRankRequest request)
+ {
+ Logger.LogInformation("GetScoreRank request : {Request}", request.Stringify());
+
+ var scoreRankData = await Mediator.Send(new GetScoreRankQuery((uint)request.Baid));
+ var response = new Server.Models.v3209.GetScoreRankResponse
+ {
+ Result = 1,
+ IkiScoreRankFlg = scoreRankData.IkiScoreRankFlg,
+ KiwamiScoreRankFlg = scoreRankData.KiwamiScoreRankFlg,
+ MiyabiScoreRankFlg = scoreRankData.MiyabiScoreRankFlg
+ };
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/GetShopFolderController.cs b/Server/Controllers/Game/GetShopFolderController.cs
new file mode 100644
index 0000000..b6ca650
--- /dev/null
+++ b/Server/Controllers/Game/GetShopFolderController.cs
@@ -0,0 +1,29 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class GetShopFolderController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/getshopfolder_w4xik0uw.php")]
+ [Produces("application/protobuf")]
+ public async Task GetShopFolder([FromBody] GetShopFolderRequest request)
+ {
+ Logger.LogInformation("GetShopFolder request : {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new GetShopFolderQuery());
+ var response = ShopFolderDataMappers.MapTo3906(commonResponse);
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/getshopfolder.php")]
+ [Produces("application/protobuf")]
+ public async Task GetShopFolder3209([FromBody] Server.Models.v3209.GetShopFolderRequest request)
+ {
+ Logger.LogInformation("GetShopFolder request : {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new GetShopFolderQuery());
+ var response = ShopFolderDataMappers.MapTo3209(commonResponse);
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/GetSongIntroductionController.cs b/Server/Controllers/Game/GetSongIntroductionController.cs
new file mode 100644
index 0000000..c3eca07
--- /dev/null
+++ b/Server/Controllers/Game/GetSongIntroductionController.cs
@@ -0,0 +1,29 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class GetSongIntroductionController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/getsongintroduction_66blw6is.php")]
+ [Produces("application/protobuf")]
+ public async Task GetSongIntroduction([FromBody] GetSongIntroductionRequest request)
+ {
+ Logger.LogInformation("GetSongIntroduction request : {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new GetSongIntroductionQuery(request.SetIds));
+ var response = SongIntroductionDataMappers.MapTo3906(commonResponse);
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/getsongintroduction.php")]
+ [Produces("application/protobuf")]
+ public async Task GetSongIntroduction3209([FromBody] Server.Models.v3209.GetSongIntroductionRequest request)
+ {
+ Logger.LogInformation("GetSongIntroduction request : {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new GetSongIntroductionQuery(request.SetIds));
+ var response = SongIntroductionDataMappers.MapTo3209(commonResponse);
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/GetTelopController.cs b/Server/Controllers/Game/GetTelopController.cs
new file mode 100644
index 0000000..59f9286
--- /dev/null
+++ b/Server/Controllers/Game/GetTelopController.cs
@@ -0,0 +1,47 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class GetTelopController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/gettelop_o0cb2z3e.php")]
+ [Produces("application/protobuf")]
+ public IActionResult GetTelop([FromBody] GettelopRequest request)
+ {
+ Logger.LogInformation("GetTelop request : {Request}", request.Stringify());
+
+ var startDateTime = DateTime.Now - TimeSpan.FromDays(999.0);
+ var endDateTime = DateTime.Now + TimeSpan.FromDays(999.0);
+
+ var response = new GettelopResponse
+ {
+ Result = 1,
+ StartDatetime = startDateTime.ToString(Constants.DateTimeFormat),
+ EndDatetime = endDateTime.ToString(Constants.DateTimeFormat),
+ Telop = "Hello 3906",
+ VerupNo = 1
+ };
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/gettelop.php")]
+ [Produces("application/protobuf")]
+ public IActionResult GetTelop3209([FromBody] Server.Models.v3209.GettelopRequest request)
+ {
+ Logger.LogInformation("GetTelop request : {Request}", request.Stringify());
+
+ var startDateTime = DateTime.Now - TimeSpan.FromDays(999.0);
+ var endDateTime = DateTime.Now + TimeSpan.FromDays(999.0);
+
+ var response = new Server.Models.v3209.GettelopResponse
+ {
+ Result = 1,
+ StartDatetime = startDateTime.ToString(Constants.DateTimeFormat),
+ EndDatetime = endDateTime.ToString(Constants.DateTimeFormat),
+ Telop = "Hello 3209",
+ VerupNo = 1
+ };
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/GetTokenCountController.cs b/Server/Controllers/Game/GetTokenCountController.cs
new file mode 100644
index 0000000..434e8c6
--- /dev/null
+++ b/Server/Controllers/Game/GetTokenCountController.cs
@@ -0,0 +1,29 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class GetTokenCountController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/gettokencount_iut9g23g.php")]
+ [Produces("application/protobuf")]
+ public async Task GetTokenCount([FromBody] GetTokenCountRequest request)
+ {
+ Logger.LogInformation("GetTokenCount request : {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new GetTokenCountQuery(request.Baid));
+ var response = TokenCountDataMappers.MapTo3906(commonResponse);
+
+ return Ok(response);
+ }
+
+ [HttpPost("v12r00_cn/chassis/gettokencount.php")]
+ [Produces("application/protobuf")]
+ public async Task GetTokenCount3209([FromBody] Server.Models.v3209.GetTokenCountRequest request)
+ {
+ Logger.LogInformation("GetTokenCount request : {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new GetTokenCountQuery((uint)request.Baid));
+ var response = TokenCountDataMappers.MapTo3209(commonResponse);
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/HeadClerk2Controller.cs b/Server/Controllers/Game/HeadClerk2Controller.cs
new file mode 100644
index 0000000..f688d83
--- /dev/null
+++ b/Server/Controllers/Game/HeadClerk2Controller.cs
@@ -0,0 +1,19 @@
+using Server.Models.v3209;
+
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class HeadClerk2Controller : BaseController
+{
+ [HttpPost("/v12r00_cn/chassis/headclerk2.php")]
+ [Produces("application/protobuf")]
+ public IActionResult UploadHeadClert2([FromBody] HeadClerk2Request request)
+ {
+ Logger.LogInformation("HeadClerk2 request : {Request}", request.Stringify());
+ var response = new HeadClerk2Response
+ {
+ Result = 1
+ };
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/HeartbeatController.cs b/Server/Controllers/Game/HeartbeatController.cs
new file mode 100644
index 0000000..964d254
--- /dev/null
+++ b/Server/Controllers/Game/HeartbeatController.cs
@@ -0,0 +1,34 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class HeartbeatController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/heartbeat_hcv5akgr.php")]
+ [Produces("application/protobuf")]
+ public IActionResult HeartBeat([FromBody] HeartBeatRequest request)
+ {
+ Logger.LogInformation("Heartbeat request: {Request}", request.Stringify());
+ var response = new HeartBeatResponse
+ {
+ Result = 1,
+ ComSvrStat = 1,
+ GameSvrStat = 1
+ };
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/heartbeat.php")]
+ [Produces("application/protobuf")]
+ public IActionResult HeartBeat3209([FromBody] Server.Models.v3209.HeartBeatRequest request)
+ {
+ Logger.LogInformation("Heartbeat request: {Request}", request.Stringify());
+ var response = new Server.Models.v3209.HeartBeatResponse
+ {
+ Result = 1,
+ GameSvrStat = 1
+ };
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/InitialDataCheckController.cs b/Server/Controllers/Game/InitialDataCheckController.cs
new file mode 100644
index 0000000..c29b507
--- /dev/null
+++ b/Server/Controllers/Game/InitialDataCheckController.cs
@@ -0,0 +1,30 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class InitialDataCheckController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/initialdatacheck_vaosv643.php")]
+ [Produces("application/protobuf")]
+ public async Task InitialDataCheck([FromBody] InitialdatacheckRequest request)
+ {
+ Logger.LogInformation("Initial data check request: {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new GetInitialDataQuery());
+ var response = InitialDataMappers.MapTo3906(commonResponse);
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/initialdatacheck.php")]
+ [Produces("application/protobuf")]
+ public async Task InitialDataCheckCN([FromBody] Server.Models.v3209.InitialdatacheckRequest request)
+ {
+ Logger.LogInformation("Initial data check request: {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new GetInitialDataQuery());
+ var response = InitialDataMappers.MapTo3209(commonResponse);
+
+ return Ok(response);
+ }
+
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/MyDonEntryController.cs b/Server/Controllers/Game/MyDonEntryController.cs
new file mode 100644
index 0000000..0df5d0e
--- /dev/null
+++ b/Server/Controllers/Game/MyDonEntryController.cs
@@ -0,0 +1,27 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class MyDonEntryController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/mydonentry_3nrd7kwk.php")]
+ [Produces("application/protobuf")]
+ public async Task GetMyDonEntry([FromBody] MydonEntryRequest request)
+ {
+ Logger.LogInformation("MyDonEntry request : {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new AddMyDonEntryCommand(request.AccessCode, request.MydonName, request.MydonNameLanguage));
+ var response = MyDonEntryMappers.MapTo3906(commonResponse);
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/mydonentry.php")]
+ [Produces("application/protobuf")]
+ public async Task GetMyDonEntry3209([FromBody] Server.Models.v3209.MydonEntryRequest request)
+ {
+ Logger.LogInformation("MyDonEntry request : {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new AddMyDonEntryCommand(request.WechatQrStr, request.MydonName, request.MydonNameLanguage));
+ var response = MyDonEntryMappers.MapTo3209(commonResponse);
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/PlayResultController.cs b/Server/Controllers/Game/PlayResultController.cs
new file mode 100644
index 0000000..ec896ce
--- /dev/null
+++ b/Server/Controllers/Game/PlayResultController.cs
@@ -0,0 +1,46 @@
+using Application.Utils;
+
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class PlayResultController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/playresult_r3ky4a4z.php")]
+ [Produces("application/protobuf")]
+ public async Task UploadPlayResult([FromBody] PlayResultRequest request)
+ {
+ Logger.LogInformation("PlayResult request : {Request}", request.Stringify());
+
+ var truncated = request.PlayresultData.Skip(32).ToArray();
+ var decompressed = GZipBytesUtil.DecompressGZipBytes(truncated);
+ var playResultData = Serializer.Deserialize(new ReadOnlySpan(decompressed));
+ Logger.LogInformation("Play result data {Data}", playResultData.Stringify());
+
+ var commonRequest = PlayResultMappers.Map(playResultData);
+ var commonResponse = await Mediator.Send(new UpdatePlayResultCommand(request.BaidConf, commonRequest));
+ var response = new PlayResultResponse
+ {
+ Result = commonResponse
+ };
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/playresult.php")]
+ [Produces("application/protobuf")]
+ public async Task UploadPlayResult3209([FromBody] Server.Models.v3209.PlayResultRequest request)
+ {
+ Logger.LogInformation("PlayResult3209 request : {Request}", request.Stringify());
+ var decompressed = GZipBytesUtil.DecompressGZipBytes(request.PlayresultData);
+ var playResultData =
+ Serializer.Deserialize(new ReadOnlySpan(decompressed));
+ Logger.LogInformation("Play result data 3209 {Data}", playResultData.Stringify());
+
+ var commonRequest = PlayResultMappers.Map(playResultData);
+ var commonResponse = await Mediator.Send(new UpdatePlayResultCommand((uint) request.BaidConf, commonRequest));
+ var response = new Server.Models.v3209.PlayResultResponse
+ {
+ Result = commonResponse
+ };
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/RewardItemController.cs b/Server/Controllers/Game/RewardItemController.cs
new file mode 100644
index 0000000..3c165d6
--- /dev/null
+++ b/Server/Controllers/Game/RewardItemController.cs
@@ -0,0 +1,33 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class RewardItemController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/rewarditem.php")]
+ [Produces("application/protobuf")]
+ public IActionResult RewardItem([FromBody] RewardItemRequest request)
+ {
+ Logger.LogInformation("RewardItem request : {Request}", request.Stringify());
+
+ var response = new RewardItemResponse
+ {
+ Result = 1
+ };
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/rewarditem.php")]
+ [Produces("application/protobuf")]
+ public IActionResult RewardItem3209([FromBody] Server.Models.v3209.RewardItemRequest request)
+ {
+ Logger.LogInformation("RewardItem request : {Request}", request.Stringify());
+
+ var response = new Server.Models.v3209.RewardItemResponse
+ {
+ Result = 1
+ };
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/SelfBestController.cs b/Server/Controllers/Game/SelfBestController.cs
new file mode 100644
index 0000000..88abc4d
--- /dev/null
+++ b/Server/Controllers/Game/SelfBestController.cs
@@ -0,0 +1,31 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class SelfBestController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/selfbest_5nz47auu.php")]
+ [Produces("application/protobuf")]
+ public async Task SelfBest([FromBody] SelfBestRequest request)
+ {
+ Logger.LogInformation("SelfBest request : {Request}", request.Stringify());
+
+ var commonResponse =
+ await Mediator.Send(new GetSelfBestQuery(request.Baid, request.Level, request.ArySongNoes));
+ var response = SelfBestMappers.MapTo3906(commonResponse);
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/selfbest.php")]
+ [Produces("application/protobuf")]
+ public async Task SelfBest3209([FromBody] Server.Models.v3209.SelfBestRequest request)
+ {
+ Logger.LogInformation("SelfBest3209 request : {Request}", request.Stringify());
+
+ var commonResponse =
+ await Mediator.Send(new GetSelfBestQuery((uint)request.Baid, request.Level, request.ArySongNoes));
+ var response = SelfBestMappers.MapTo3209(commonResponse);
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/SetAnyStringController.cs b/Server/Controllers/Game/SetAnyStringController.cs
new file mode 100644
index 0000000..dde5491
--- /dev/null
+++ b/Server/Controllers/Game/SetAnyStringController.cs
@@ -0,0 +1,33 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class SetAnyStringController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/setanystring_mssxf3bo.php")]
+ [Produces("application/protobuf")]
+ public IActionResult SetAnyString([FromBody] SetAnyStringRequest request)
+ {
+ Logger.LogInformation("SetAnyString request : {Request}", request.Stringify());
+
+ var response = new SetAnyStringResponse
+ {
+ Result = 1,
+ };
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/setanystring.php")]
+ [Produces("application/protobuf")]
+ public IActionResult SetAnyString3209([FromBody] Server.Models.v3209.SetAnyStringRequest request)
+ {
+ Logger.LogInformation("SetAnyString request : {Request}", request.Stringify());
+
+ var response = new Server.Models.v3209.SetAnyStringResponse
+ {
+ Result = 1,
+ };
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/SongPurchaseController.cs b/Server/Controllers/Game/SongPurchaseController.cs
new file mode 100644
index 0000000..31e78f2
--- /dev/null
+++ b/Server/Controllers/Game/SongPurchaseController.cs
@@ -0,0 +1,28 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class SongPurchaseController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/songpurchase_wm2fh5bl.php")]
+ [Produces("application/protobuf")]
+ public async Task SongPurchase([FromBody] SongPurchaseRequest request)
+ {
+ Logger.LogInformation("SongPurchase request : {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(SongPurchaseMappers.MapToCommand(request));
+ var response = SongPurchaseMappers.MapTo3906(commonResponse);
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/songpurchase.php")]
+ [Produces("application/protobuf")]
+ public async Task SongPurchase3209([FromBody] Server.Models.v3209.SongPurchaseRequest request)
+ {
+ Logger.LogInformation("SongPurchase request : {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(SongPurchaseMappers.MapToCommand(request));
+ var response = SongPurchaseMappers.MapTo3209(commonResponse);
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/StartupAuthController.cs b/Server/Controllers/Game/StartupAuthController.cs
new file mode 100644
index 0000000..b1596fd
--- /dev/null
+++ b/Server/Controllers/Game/StartupAuthController.cs
@@ -0,0 +1,28 @@
+using taiko.vsinterface;
+
+namespace Server.Controllers.Game;
+
+[ApiController]
+[Route("/v01r00/chassis/startupauth.php")]
+public class StartupAuthController : BaseController
+{
+ [HttpPost]
+ [Produces("application/protobuf")]
+ public IActionResult StartupAuth([FromBody] StartupAuthRequest request)
+ {
+ Logger.LogInformation("StartupAuth request: {Request}", request.Stringify());
+ var response = new StartupAuthResponse
+ {
+ Result = 1
+ };
+ var info = request.AryOperationInfoes.ConvertAll(input =>
+ new StartupAuthResponse.OperationData
+ {
+ KeyData = input.KeyData,
+ ValueData = input.ValueData
+ });
+ response.AryOperationInfoes.AddRange(info);
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/TournamentCheckController.cs b/Server/Controllers/Game/TournamentCheckController.cs
new file mode 100644
index 0000000..18cde8d
--- /dev/null
+++ b/Server/Controllers/Game/TournamentCheckController.cs
@@ -0,0 +1,33 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class TournamentCheckController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/tournamentcheck.php")]
+ [Produces("application/protobuf")]
+ public IActionResult TournamentCheck([FromBody] TournamentcheckRequest request)
+ {
+ Logger.LogInformation("TournamentCheck request : {Request}", request.Stringify());
+
+ var response = new TournamentcheckResponse
+ {
+ Result = 1,
+ };
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/tournamentcheck.php")]
+ [Produces("application/protobuf")]
+ public IActionResult TournamentCheck3209([FromBody] Server.Models.v3209.TournamentcheckRequest request)
+ {
+ Logger.LogInformation("TournamentCheck request : {Request}", request.Stringify());
+
+ var response = new Server.Models.v3209.TournamentcheckResponse
+ {
+ Result = 1,
+ };
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/UserDataController.cs b/Server/Controllers/Game/UserDataController.cs
new file mode 100644
index 0000000..e549d0c
--- /dev/null
+++ b/Server/Controllers/Game/UserDataController.cs
@@ -0,0 +1,29 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class UserDataController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/userdata_gc6x17o8.php")]
+ [Produces("application/protobuf")]
+ public async Task GetUserData([FromBody] UserDataRequest request)
+ {
+ Logger.LogInformation("UserData request : {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new UserDataQuery(request.Baid));
+ var response = UserDataMappers.MapTo3906(commonResponse);
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/userdata.php")]
+ [Produces("application/protobuf")]
+ public async Task GetUserData3209([FromBody] Server.Models.v3209.UserDataRequest request)
+ {
+ Logger.LogInformation("UserData request : {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new UserDataQuery((uint)request.Baid));
+ var response = UserDataMappers.MapTo3209(commonResponse);
+
+ return Ok(response);
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Game/VerifyQrCodeController.cs b/Server/Controllers/Game/VerifyQrCodeController.cs
new file mode 100644
index 0000000..7177128
--- /dev/null
+++ b/Server/Controllers/Game/VerifyQrCodeController.cs
@@ -0,0 +1,38 @@
+namespace Server.Controllers.Game;
+
+[ApiController]
+public class VerifyQrCodeController : BaseController
+{
+ [HttpPost("/v12r08_ww/chassis/verifyqrcode_ku5ra5q7.php")]
+ [Produces("application/protobuf")]
+ public async Task VerifyQrCode([FromBody] VerifyQrcodeRequest request)
+ {
+ Logger.LogInformation("VerifyQrCode request : {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new VerifyQrQuery(request.QrcodeSerial));
+ var response = new VerifyQrcodeResponse
+ {
+ Result = commonResponse.IsQrValid ? 1u : 51u,
+ QrcodeId = commonResponse.QrCodeId
+ };
+
+ return Ok(response);
+ }
+
+ [HttpPost("/v12r00_cn/chassis/verifyqrcode.php")]
+ [Produces("application/protobuf")]
+ public async Task VerifyQrCode3209([FromBody] Server.Models.v3209.VerifyQrcodeRequest request)
+ {
+ Logger.LogInformation("VerifyQrCode request : {Request}", request.Stringify());
+
+ var commonResponse = await Mediator.Send(new VerifyQrQuery(request.QrcodeSerial));
+ var response = new Models.v3209.VerifyQrcodeResponse
+ {
+ Result = commonResponse.IsQrValid ? 1u : 51u,
+ QrcodeId = commonResponse.QrCodeId
+ };
+
+ return Ok(response);
+
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Garmc/PingController.cs b/Server/Controllers/Garmc/PingController.cs
new file mode 100644
index 0000000..e637072
--- /dev/null
+++ b/Server/Controllers/Garmc/PingController.cs
@@ -0,0 +1,40 @@
+using Garm;
+using google.type;
+
+namespace Server.Controllers.Garmc;
+
+[Route("/v1/s12-jp-dev/garm.Monitoring/Ping")]
+[ApiController]
+public class PingController : BaseController
+{
+ [HttpPost]
+ [Produces("application/protobuf")]
+ public async Task Ping()
+ {
+ HttpContext.Request.EnableBuffering();
+ var body = await HttpContext.Request.BodyReader.ReadAsync();
+ var request = Serializer.Deserialize(body.Buffer);
+ Logger.LogInformation("Ping request: {Request}", request.Stringify());
+ var response = new PingResponse
+ {
+ ServerRecvTime = DateTime.UtcNow - TimeSpan.FromMilliseconds(50),
+ ServerSendTime = DateTime.UtcNow + TimeSpan.FromMilliseconds(50),
+ ClientIp = "127.0.0.1",
+ GeoData = new GeoData
+ {
+ Country = "JPN",
+ Region = "Kanto",
+ City = "Tokyo",
+ Latlng = new LatLng
+ {
+ Latitude = 114.0,
+ Longitude = 514.0
+ }
+ },
+ UnderMaintenance = false,
+ AcidAvailable = true
+ };
+ Response.Headers.Append("x-drpc-code", "0");
+ return response;
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Garmc/RegisterSystemBoardBillingController.cs b/Server/Controllers/Garmc/RegisterSystemBoardBillingController.cs
new file mode 100644
index 0000000..dbd225b
--- /dev/null
+++ b/Server/Controllers/Garmc/RegisterSystemBoardBillingController.cs
@@ -0,0 +1,24 @@
+using Garm;
+
+namespace Server.Controllers.Garmc;
+
+[Route("/v1/s12-jp-dev/garm.SystemBoard/RegisterSystemBoardBilling")]
+[ApiController]
+public class RegisterSystemBoardBillingController : BaseController
+{
+ [HttpPost]
+ [Produces("application/protobuf")]
+ public async Task RegisterSystemBoardBilling()
+ {
+ HttpContext.Request.EnableBuffering();
+ var body = await HttpContext.Request.BodyReader.ReadAsync();
+ var request = Serializer.Deserialize(body.Buffer);
+ Logger.LogInformation("RegisterSystemBoardBilling request: {Request}", request.Stringify());
+ var response = new RegisterSystemBoardBillingResponse
+ {
+ TooMany = false
+ };
+ Response.Headers.Append("x-drpc-code", "0");
+ return response;
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/Garmc/RegisterSystemBoardController.cs b/Server/Controllers/Garmc/RegisterSystemBoardController.cs
new file mode 100644
index 0000000..3421c46
--- /dev/null
+++ b/Server/Controllers/Garmc/RegisterSystemBoardController.cs
@@ -0,0 +1,24 @@
+using Garm;
+
+namespace Server.Controllers.Garmc;
+
+[Route("/v1/s12-jp-dev/garm.SystemBoard/RegisterSystemBoard")]
+[ApiController]
+public class RegisterSystemBoardController : BaseController
+{
+ [HttpPost]
+ [Produces("application/protobuf")]
+ public async Task RegisterSystemBoard()
+ {
+ HttpContext.Request.EnableBuffering();
+ var body = await HttpContext.Request.BodyReader.ReadAsync();
+ var request = Serializer.Deserialize(body.Buffer);
+ Logger.LogInformation("RegisterSystemBoard request: {Request}", request.Stringify());
+ var response = new RegisterSystemBoardResponse
+ {
+ Token = "114514"
+ };
+ Response.Headers.Append("x-drpc-code", "0");
+ return response;
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/MuchaActivation/OtkController.cs b/Server/Controllers/MuchaActivation/OtkController.cs
new file mode 100644
index 0000000..add3ce1
--- /dev/null
+++ b/Server/Controllers/MuchaActivation/OtkController.cs
@@ -0,0 +1,54 @@
+using System.Buffers;
+using System.Text;
+using System.Text.Json.Serialization;
+
+namespace Server.Controllers.MuchaActivation;
+
+
+public class OtkResponse
+{
+ [JsonPropertyName("status")]
+ public int Status { get; set; }
+
+ [JsonPropertyName("message")]
+ public string? Message { get; set; }
+
+ [JsonPropertyName("otk")]
+ public string? Otk { get; set; }
+
+ [JsonPropertyName("uuid")]
+ public string? Uuid { get; set; }
+
+ [JsonPropertyName("expiredAt")]
+ public string? ExpiredAt { get; set; }
+}
+
+[Route("/mucha_activation/otk")]
+[ApiController]
+public class OtkController : BaseController
+{
+ [HttpPost]
+ public async Task Otk()
+ {
+ HttpContext.Request.EnableBuffering();
+ var body = await HttpContext.Request.BodyReader.ReadAsync();
+ var json = Encoding.UTF8.GetString(body.Buffer.ToArray());
+ Logger.LogInformation("MuchaActivation request: {Request}", json);
+ var expiredAt = DateTime.Now.AddDays(10).ToString("yyyy-MM-ddThh:mm:ssZ");
+ // Generate a random string otk with randomNumberGenerator
+ var random = new Random();
+ var randomNumber = random.Next(10000000, 99999999);
+ var otk = randomNumber.ToString();
+ var g = Guid.NewGuid();
+ var uuid = g.ToString();
+ var response = new OtkResponse
+ {
+ Status = 200,
+ Message = "Success",
+ Otk = otk,
+ Uuid = uuid,
+ ExpiredAt = expiredAt
+ };
+ return response;
+ }
+}
\ No newline at end of file
diff --git a/Server/Controllers/MuchaActivation/SignatureController.cs b/Server/Controllers/MuchaActivation/SignatureController.cs
new file mode 100644
index 0000000..47f981c
--- /dev/null
+++ b/Server/Controllers/MuchaActivation/SignatureController.cs
@@ -0,0 +1,39 @@
+using System.Buffers;
+using System.Text;
+using System.Text.Json.Serialization;
+
+namespace Server.Controllers.MuchaActivation;
+
+
+public class SignatureResponse
+{
+ [JsonPropertyName("status")]
+ public int Status { get; set; }
+
+ [JsonPropertyName("message")]
+ public string? Message { get; set; }
+
+ [JsonPropertyName("signature")]
+ public string? Signature { get; set; }
+}
+
+[Route("/mucha_activation/signature")]
+[ApiController]
+public class SignatureController : BaseController
+{
+ [HttpPost]
+ public async Task Signature()
+ {
+ HttpContext.Request.EnableBuffering();
+ var body = await HttpContext.Request.BodyReader.ReadAsync();
+ var json = Encoding.UTF8.GetString(body.Buffer.ToArray());
+ Logger.LogInformation("Signature request: {Request}", json);
+ var response = new SignatureResponse
+ {
+ Status = 200,
+ Message = "Success",
+ Signature = "1220"
+ };
+ return response;
+ }
+}
\ No newline at end of file
diff --git a/Server/Conventions/ControllerHidingConvention.cs b/Server/Conventions/ControllerHidingConvention.cs
new file mode 100644
index 0000000..7f862e8
--- /dev/null
+++ b/Server/Conventions/ControllerHidingConvention.cs
@@ -0,0 +1,14 @@
+using Microsoft.AspNetCore.Mvc.ApplicationModels;
+
+namespace Server.Conventions;
+
+public class ControllerHidingConvention : IActionModelConvention
+{
+ public void Apply(ActionModel action)
+ {
+ if (action.Controller.ControllerType.Namespace != "TaikoLocalServer.Controllers.Api")
+ {
+ action.ApiExplorer.IsVisible = false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Server/Formatters/CsvFormatter.cs b/Server/Formatters/CsvFormatter.cs
new file mode 100644
index 0000000..02d4af1
--- /dev/null
+++ b/Server/Formatters/CsvFormatter.cs
@@ -0,0 +1,35 @@
+using Serilog.Events;
+using Serilog.Formatting;
+
+namespace Server.Formatters;
+
+public class CsvFormatter: ITextFormatter
+{
+ public void Format(LogEvent logEvent, TextWriter output)
+ {
+ logEvent.Properties.TryGetValue("ChassisId", out var chassisId);
+ logEvent.Properties.TryGetValue("ShopId", out var shopId);
+ logEvent.Properties.TryGetValue("Baid", out var baid);
+ logEvent.Properties.TryGetValue("PlayedAt", out var playedAt);
+ logEvent.Properties.TryGetValue("IsRight", out var isRight);
+ logEvent.Properties.TryGetValue("Type", out var type);
+ logEvent.Properties.TryGetValue("Amount", out var amount);
+
+ output.Write(logEvent.Timestamp.ToString("yyyy-MM-dd"));
+ output.Write(",");
+ output.Write(chassisId);
+ output.Write(",");
+ output.Write(shopId);
+ output.Write(",");
+ output.Write(baid);
+ output.Write(",");
+ output.Write(playedAt);
+ output.Write(",");
+ output.Write(isRight);
+ output.Write(",");
+ output.Write(type);
+ output.Write(",");
+ output.Write(amount);
+ output.WriteLine();
+ }
+}
\ No newline at end of file
diff --git a/Server/GlobalUsings.cs b/Server/GlobalUsings.cs
new file mode 100644
index 0000000..ff5a2e9
--- /dev/null
+++ b/Server/GlobalUsings.cs
@@ -0,0 +1,22 @@
+// Global using directives
+
+global using Microsoft.AspNetCore.Mvc;
+global using Microsoft.EntityFrameworkCore;
+global using ProtoBuf;
+global using MediatR;
+global using Swan.Formatters;
+
+global using Application.Handlers.Game;
+global using Application.Handlers.Api;
+global using Application.Models.Api;
+global using Application.Models.Game;
+global using Application.Utils;
+global using Domain.Enums;
+global using Domain.Entities;
+global using Domain.Models;
+global using Domain.Settings;
+global using Domain.Common;
+global using Server.Models;
+global using Server.Models.v3906;
+global using Server.Mappers;
+global using Server.Utils;
diff --git a/Server/Mappers/AddTokenCountRequestMapper.cs b/Server/Mappers/AddTokenCountRequestMapper.cs
new file mode 100644
index 0000000..4675005
--- /dev/null
+++ b/Server/Mappers/AddTokenCountRequestMapper.cs
@@ -0,0 +1,11 @@
+using Riok.Mapperly.Abstractions;
+
+namespace Server.Mappers;
+
+[Mapper]
+public static partial class AddTokenCountRequestMapper
+{
+ public static partial CommonAddTokenCountRequest Map(AddTokenCountRequest request);
+
+ public static partial CommonAddTokenCountRequest Map(Models.v3209.AddTokenCountRequest request);
+}
\ No newline at end of file
diff --git a/Server/Mappers/AiDataResponseMapper.cs b/Server/Mappers/AiDataResponseMapper.cs
new file mode 100644
index 0000000..adb0428
--- /dev/null
+++ b/Server/Mappers/AiDataResponseMapper.cs
@@ -0,0 +1,11 @@
+using Riok.Mapperly.Abstractions;
+
+namespace Server.Mappers;
+
+[Mapper]
+public static partial class AiDataResponseMapper
+{
+ public static partial GetAiDataResponse MapTo3906(CommonAiDataResponse response);
+
+ public static partial Models.v3209.GetAiDataResponse MapTo3209(CommonAiDataResponse response);
+}
\ No newline at end of file
diff --git a/Server/Mappers/AiScoreMappers.cs b/Server/Mappers/AiScoreMappers.cs
new file mode 100644
index 0000000..ba2ce7c
--- /dev/null
+++ b/Server/Mappers/AiScoreMappers.cs
@@ -0,0 +1,21 @@
+using Riok.Mapperly.Abstractions;
+
+namespace Server.Mappers;
+
+[Mapper]
+public static partial class AiScoreMappers
+{
+ [MapProperty(nameof(AiScoreDatum.AiSectionScoreData), nameof(CommonAiScoreResponse.AryBestSectionDatas))]
+ public static partial CommonAiScoreResponse MapToCommonAiScoreResponse(AiScoreDatum datum);
+
+ public static CommonAiScoreResponse MapAsSuccess(AiScoreDatum datum)
+ {
+ var response= MapToCommonAiScoreResponse(datum);
+ response.Result = 1;
+ return response;
+ }
+
+ public static partial GetAiScoreResponse MapTo3906(CommonAiScoreResponse response);
+
+ public static partial Models.v3209.GetAiScoreResponse MapTo3209(CommonAiScoreResponse response);
+}
\ No newline at end of file
diff --git a/Server/Mappers/BaidResponseMapper.cs b/Server/Mappers/BaidResponseMapper.cs
new file mode 100644
index 0000000..b200341
--- /dev/null
+++ b/Server/Mappers/BaidResponseMapper.cs
@@ -0,0 +1,49 @@
+using Riok.Mapperly.Abstractions;
+
+namespace Server.Mappers;
+
+[Mapper]
+public static partial class BaidResponseMapper
+{
+ public static partial BAIDResponse MapTo3906(CommonBaidResponse commonBaidResponse);
+
+ public static BAIDResponse Map3906WithPostProcess(CommonBaidResponse commonBaidResponse)
+ {
+ var response = MapTo3906(commonBaidResponse);
+ response.AryCostumedata = new BAIDResponse.CostumeData
+ {
+ Costume1 = commonBaidResponse.CostumeData[0],
+ Costume2 = commonBaidResponse.CostumeData[1],
+ Costume3 = commonBaidResponse.CostumeData[2],
+ Costume4 = commonBaidResponse.CostumeData[3],
+ Costume5 = commonBaidResponse.CostumeData[4]
+ };
+ response.CostumeFlg1 = commonBaidResponse.CostumeFlagArrays[0];
+ response.CostumeFlg2 = commonBaidResponse.CostumeFlagArrays[1];
+ response.CostumeFlg3 = commonBaidResponse.CostumeFlagArrays[2];
+ response.CostumeFlg4 = commonBaidResponse.CostumeFlagArrays[3];
+ response.CostumeFlg5 = commonBaidResponse.CostumeFlagArrays[4];
+ return response;
+ }
+
+ public static partial Models.v3209.BAIDResponse MapTo3209(CommonBaidResponse commonBaidResponse);
+
+ public static Models.v3209.BAIDResponse Map3209WithPostProcess(CommonBaidResponse commonBaidResponse)
+ {
+ var response = MapTo3209(commonBaidResponse);
+ response.AryCostumedata = new Models.v3209.BAIDResponse.CostumeData
+ {
+ Costume1 = commonBaidResponse.CostumeData[0],
+ Costume2 = commonBaidResponse.CostumeData[1],
+ Costume3 = commonBaidResponse.CostumeData[2],
+ Costume4 = commonBaidResponse.CostumeData[3],
+ Costume5 = commonBaidResponse.CostumeData[4]
+ };
+ response.CostumeFlg1 = commonBaidResponse.CostumeFlagArrays[0];
+ response.CostumeFlg2 = commonBaidResponse.CostumeFlagArrays[1];
+ response.CostumeFlg3 = commonBaidResponse.CostumeFlagArrays[2];
+ response.CostumeFlg4 = commonBaidResponse.CostumeFlagArrays[3];
+ response.CostumeFlg5 = commonBaidResponse.CostumeFlagArrays[4];
+ return response;
+ }
+}
\ No newline at end of file
diff --git a/Server/Mappers/ChangePasswordCommandMapper.cs b/Server/Mappers/ChangePasswordCommandMapper.cs
new file mode 100644
index 0000000..1964412
--- /dev/null
+++ b/Server/Mappers/ChangePasswordCommandMapper.cs
@@ -0,0 +1,11 @@
+using Application.Handlers.Api.Auth;
+using Riok.Mapperly.Abstractions;
+using Shared.Models.Requests;
+
+namespace Server.Mappers;
+
+[Mapper]
+public static partial class ChangePasswordCommandMapper
+{
+ public static partial ChangePasswordCommand ToCommand(ChangePasswordRequest request);
+}
\ No newline at end of file
diff --git a/Server/Mappers/DanDataMappers.cs b/Server/Mappers/DanDataMappers.cs
new file mode 100644
index 0000000..5a80686
--- /dev/null
+++ b/Server/Mappers/DanDataMappers.cs
@@ -0,0 +1,11 @@
+using Riok.Mapperly.Abstractions;
+
+namespace Server.Mappers;
+
+[Mapper]
+public static partial class DanDataMappers
+{
+ public static partial GetDanOdaiResponse.OdaiData To3906OdaiData(DanData data);
+
+ public static partial Models.v3209.GetDanOdaiResponse.OdaiData To3209OdaiData(DanData data);
+}
\ No newline at end of file
diff --git a/Server/Mappers/DanScoreMappers.cs b/Server/Mappers/DanScoreMappers.cs
new file mode 100644
index 0000000..b9acc56
--- /dev/null
+++ b/Server/Mappers/DanScoreMappers.cs
@@ -0,0 +1,10 @@
+using Riok.Mapperly.Abstractions;
+
+namespace Server.Mappers;
+
+[Mapper]
+public static partial class DanScoreMappers
+{
+ public static partial GetDanScoreResponse MapTo3906(CommonDanScoreDataResponse response);
+ public static partial Models.v3209.GetDanScoreResponse MapTo3209(CommonDanScoreDataResponse response);
+}
\ No newline at end of file
diff --git a/Server/Mappers/FolderDataMappers.cs b/Server/Mappers/FolderDataMappers.cs
new file mode 100644
index 0000000..345ee2d
--- /dev/null
+++ b/Server/Mappers/FolderDataMappers.cs
@@ -0,0 +1,11 @@
+using Riok.Mapperly.Abstractions;
+
+namespace Server.Mappers;
+
+[Mapper]
+public static partial class FolderDataMappers
+{
+ public static partial GetfolderResponse MapTo3906(CommonGetFolderResponse response);
+
+ public static partial Models.v3209.GetfolderResponse MapTo3209(CommonGetFolderResponse response);
+}
\ No newline at end of file
diff --git a/Server/Mappers/InitialDataMappers.cs b/Server/Mappers/InitialDataMappers.cs
new file mode 100644
index 0000000..629a499
--- /dev/null
+++ b/Server/Mappers/InitialDataMappers.cs
@@ -0,0 +1,11 @@
+using Riok.Mapperly.Abstractions;
+
+namespace Server.Mappers;
+
+[Mapper]
+public static partial class InitialDataMappers
+{
+ public static partial InitialdatacheckResponse MapTo3906(CommonInitialDataCheckResponse response);
+
+ public static partial Models.v3209.InitialdatacheckResponse MapTo3209(CommonInitialDataCheckResponse response);
+}
\ No newline at end of file
diff --git a/Server/Mappers/MyDonEntryMappers.cs b/Server/Mappers/MyDonEntryMappers.cs
new file mode 100644
index 0000000..6135783
--- /dev/null
+++ b/Server/Mappers/MyDonEntryMappers.cs
@@ -0,0 +1,11 @@
+using Riok.Mapperly.Abstractions;
+
+namespace Server.Mappers;
+
+[Mapper]
+public static partial class MyDonEntryMappers
+{
+ public static partial MydonEntryResponse MapTo3906(CommonMyDonEntryResponse response);
+
+ public static partial Models.v3209.MydonEntryResponse MapTo3209(CommonMyDonEntryResponse response);
+}
\ No newline at end of file
diff --git a/Server/Mappers/PlayResultMappers.cs b/Server/Mappers/PlayResultMappers.cs
new file mode 100644
index 0000000..8a4b08b
--- /dev/null
+++ b/Server/Mappers/PlayResultMappers.cs
@@ -0,0 +1,11 @@
+using Riok.Mapperly.Abstractions;
+
+namespace Server.Mappers;
+
+[Mapper]
+public static partial class PlayResultMappers
+{
+ public static partial CommonPlayResultData Map(PlayResultDataRequest request);
+
+ public static partial CommonPlayResultData Map(Models.v3209.PlayResultDataRequest request);
+}
\ No newline at end of file
diff --git a/Server/Mappers/RegisterCommandMapper.cs b/Server/Mappers/RegisterCommandMapper.cs
new file mode 100644
index 0000000..555843a
--- /dev/null
+++ b/Server/Mappers/RegisterCommandMapper.cs
@@ -0,0 +1,11 @@
+using Application.Handlers.Api.Auth;
+using Riok.Mapperly.Abstractions;
+using Shared.Models.Requests;
+
+namespace Server.Mappers;
+
+[Mapper]
+public static partial class RegisterCommandMapper
+{
+ public static partial RegisterCommand ToCommand(RegisterRequest request);
+}
\ No newline at end of file
diff --git a/Server/Mappers/SelfBestMappers.cs b/Server/Mappers/SelfBestMappers.cs
new file mode 100644
index 0000000..8b278b0
--- /dev/null
+++ b/Server/Mappers/SelfBestMappers.cs
@@ -0,0 +1,11 @@
+using Riok.Mapperly.Abstractions;
+
+namespace Server.Mappers;
+
+[Mapper]
+public static partial class SelfBestMappers
+{
+ public static partial SelfBestResponse MapTo3906(CommonSelfBestResponse response);
+
+ public static partial Models.v3209.SelfBestResponse MapTo3209(CommonSelfBestResponse response);
+}
\ No newline at end of file
diff --git a/Server/Mappers/ShopFolderDataMappers.cs b/Server/Mappers/ShopFolderDataMappers.cs
new file mode 100644
index 0000000..ae5c98e
--- /dev/null
+++ b/Server/Mappers/ShopFolderDataMappers.cs
@@ -0,0 +1,11 @@
+using Riok.Mapperly.Abstractions;
+
+namespace Server.Mappers;
+
+[Mapper]
+public static partial class ShopFolderDataMappers
+{
+ public static partial GetShopFolderResponse MapTo3906(CommonGetShopFolderResponse response);
+
+ public static partial Models.v3209.GetShopFolderResponse MapTo3209(CommonGetShopFolderResponse response);
+}
\ No newline at end of file
diff --git a/Server/Mappers/SongIntroductionDataMappers.cs b/Server/Mappers/SongIntroductionDataMappers.cs
new file mode 100644
index 0000000..61d2227
--- /dev/null
+++ b/Server/Mappers/SongIntroductionDataMappers.cs
@@ -0,0 +1,12 @@
+using Riok.Mapperly.Abstractions;
+
+namespace Server.Mappers;
+
+[Mapper]
+public static partial class SongIntroductionDataMappers
+{
+ public static partial GetSongIntroductionResponse MapTo3906(CommonGetSongIntroductionResponse response);
+
+ public static partial Models.v3209.GetSongIntroductionResponse
+ MapTo3209(CommonGetSongIntroductionResponse response);
+}
\ No newline at end of file
diff --git a/Server/Mappers/SongPurchaseMappers.cs b/Server/Mappers/SongPurchaseMappers.cs
new file mode 100644
index 0000000..11776b5
--- /dev/null
+++ b/Server/Mappers/SongPurchaseMappers.cs
@@ -0,0 +1,15 @@
+using Riok.Mapperly.Abstractions;
+
+namespace Server.Mappers;
+
+[Mapper]
+public static partial class SongPurchaseMappers
+{
+ public static partial SongPurchaseResponse MapTo3906(CommonSongPurchaseResponse response);
+
+ public static partial Models.v3209.SongPurchaseResponse MapTo3209(CommonSongPurchaseResponse response);
+
+ public static partial PurchaseSongCommand MapToCommand(SongPurchaseRequest request);
+
+ public static partial PurchaseSongCommandCN MapToCommand(Models.v3209.SongPurchaseRequest request);
+}
\ No newline at end of file
diff --git a/Server/Mappers/TokenCountDataMappers.cs b/Server/Mappers/TokenCountDataMappers.cs
new file mode 100644
index 0000000..17fc1e8
--- /dev/null
+++ b/Server/Mappers/TokenCountDataMappers.cs
@@ -0,0 +1,11 @@
+using Riok.Mapperly.Abstractions;
+
+namespace Server.Mappers;
+
+[Mapper]
+public static partial class TokenCountDataMappers
+{
+ public static partial GetTokenCountResponse MapTo3906(CommonGetTokenCountResponse response);
+
+ public static partial Models.v3209.GetTokenCountResponse MapTo3209(CommonGetTokenCountResponse response);
+}
\ No newline at end of file
diff --git a/Server/Mappers/UserDataMappers.cs b/Server/Mappers/UserDataMappers.cs
new file mode 100644
index 0000000..43833c8
--- /dev/null
+++ b/Server/Mappers/UserDataMappers.cs
@@ -0,0 +1,11 @@
+using Riok.Mapperly.Abstractions;
+
+namespace Server.Mappers;
+
+[Mapper]
+public static partial class UserDataMappers
+{
+ public static partial UserDataResponse MapTo3906(CommonUserDataResponse response);
+
+ public static partial Models.v3209.UserDataResponse MapTo3209(CommonUserDataResponse response);
+}
\ No newline at end of file
diff --git a/Server/Middlewares/AllNetRequestMiddleware.cs b/Server/Middlewares/AllNetRequestMiddleware.cs
new file mode 100644
index 0000000..fc2e023
--- /dev/null
+++ b/Server/Middlewares/AllNetRequestMiddleware.cs
@@ -0,0 +1,52 @@
+using System.Net;
+using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
+
+namespace Server.Middlewares;
+
+public class AllNetRequestMiddleware(RequestDelegate next)
+{
+ public async Task InvokeAsync(HttpContext context)
+ {
+ if (context.Request.Method != WebRequestMethods.Http.Post)
+ {
+ context.Response.StatusCode = StatusCodes.Status405MethodNotAllowed;
+ return;
+ }
+
+ if (!context.Request.HasFormContentType)
+ {
+ await next(context);
+ return;
+ }
+
+ context.Request.EnableBuffering();
+ var bodyAsText = await new StreamReader(context.Request.Body).ReadToEndAsync();
+ var compressed = Convert.FromBase64String(bodyAsText);
+ var decompressed = Decompress(compressed);
+ context.Request.Body.Position = 0;
+ context.Request.Body = decompressed;
+ context.Request.ContentLength = decompressed.Length;
+
+ // Call the next delegate/middleware in the pipeline.
+ await next(context);
+ }
+
+ private static Stream Decompress(byte[] data)
+ {
+ var outputStream = new MemoryStream();
+ using var compressedStream = new MemoryStream(data);
+ using var inputStream = new InflaterInputStream(compressedStream);
+ inputStream.CopyTo(outputStream);
+ outputStream.Position = 0;
+ return outputStream;
+ }
+}
+
+public static class AllNetMiddlewareExtensions
+{
+ public static IApplicationBuilder UseAllNetRequestMiddleware(
+ this IApplicationBuilder builder)
+ {
+ return builder.UseMiddleware();
+ }
+}
\ No newline at end of file
diff --git a/Server/Models/3209/Game.cs b/Server/Models/3209/Game.cs
new file mode 100644
index 0000000..9a8f76e
--- /dev/null
+++ b/Server/Models/3209/Game.cs
@@ -0,0 +1,3225 @@
+//
+// This file was generated by a tool; you should avoid making direct changes.
+// Consider using 'partial classes' to extend these types
+// Input: my.proto
+//
+
+#region Designer generated code
+#pragma warning disable CS0612, CS0618, CS1591, CS3021, IDE0079, IDE1006, RCS1036, RCS1057, RCS1085, RCS1192
+namespace Server.Models.v3209;
+[global::ProtoBuf.ProtoContract()]
+public partial class HeartBeatRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class HeartBeatResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"game_svr_stat", IsRequired = true)]
+ public uint GameSvrStat { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class BookKeepingRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"update_date", IsRequired = true)]
+ public string UpdateDate { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"credit_cost_1", IsRequired = true)]
+ public uint CreditCost1 { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"credit_cost_2", IsRequired = true)]
+ public uint CreditCost2 { get; set; }
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"credit_songs_1", IsRequired = true)]
+ public uint CreditSongs1 { get; set; }
+
+ [global::ProtoBuf.ProtoMember(7, Name = @"credit_songs_2", IsRequired = true)]
+ public uint CreditSongs2 { get; set; }
+
+ [global::ProtoBuf.ProtoMember(8, Name = @"all_play_cnt", IsRequired = true)]
+ public uint AllPlayCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(9, Name = @"service_sw_cnt", IsRequired = true)]
+ public uint ServiceSwCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(10, Name = @"free_play_cnt", IsRequired = true)]
+ public uint FreePlayCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(11, Name = @"error_log")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string ErrorLog
+ {
+ get => __pbn__ErrorLog ?? "";
+ set => __pbn__ErrorLog = value;
+ }
+ public bool ShouldSerializeErrorLog() => __pbn__ErrorLog != null;
+ public void ResetErrorLog() => __pbn__ErrorLog = null;
+ private string __pbn__ErrorLog;
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class BookKeepingResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class InitialdatacheckRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"hdd_ver", IsRequired = true)]
+ public uint HddVer { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class InitialdatacheckResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"default_song_flg")]
+ public byte[] DefaultSongFlg
+ {
+ get => __pbn__DefaultSongFlg;
+ set => __pbn__DefaultSongFlg = value;
+ }
+ public bool ShouldSerializeDefaultSongFlg() => __pbn__DefaultSongFlg != null;
+ public void ResetDefaultSongFlg() => __pbn__DefaultSongFlg = null;
+ private byte[] __pbn__DefaultSongFlg;
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"achievement_song_bit")]
+ public byte[] AchievementSongBit
+ {
+ get => __pbn__AchievementSongBit;
+ set => __pbn__AchievementSongBit = value;
+ }
+ public bool ShouldSerializeAchievementSongBit() => __pbn__AchievementSongBit != null;
+ public void ResetAchievementSongBit() => __pbn__AchievementSongBit = null;
+ private byte[] __pbn__AchievementSongBit;
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"ura_release_bit")]
+ public byte[] UraReleaseBit
+ {
+ get => __pbn__UraReleaseBit;
+ set => __pbn__UraReleaseBit = value;
+ }
+ public bool ShouldSerializeUraReleaseBit() => __pbn__UraReleaseBit != null;
+ public void ResetUraReleaseBit() => __pbn__UraReleaseBit = null;
+ private byte[] __pbn__UraReleaseBit;
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"song_introduction_end_datetime")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string SongIntroductionEndDatetime
+ {
+ get => __pbn__SongIntroductionEndDatetime ?? "";
+ set => __pbn__SongIntroductionEndDatetime = value;
+ }
+ public bool ShouldSerializeSongIntroductionEndDatetime() => __pbn__SongIntroductionEndDatetime != null;
+ public void ResetSongIntroductionEndDatetime() => __pbn__SongIntroductionEndDatetime = null;
+ private string __pbn__SongIntroductionEndDatetime;
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"ary_movie_info")]
+ public global::System.Collections.Generic.List AryMovieInfoes { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(7, Name = @"ary_ai_event_data")]
+ public global::System.Collections.Generic.List AryAiEventDatas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(8, Name = @"ary_chassis_function_id")]
+ public uint[] AryChassisFunctionIds { get; set; }
+
+ [global::ProtoBuf.ProtoMember(9, Name = @"ary_verup_no_data_1")]
+ public global::System.Collections.Generic.List AryVerupNoData1s { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(10, Name = @"ary_verup_no_data_2")]
+ public global::System.Collections.Generic.List AryVerupNoData2s { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(11, Name = @"server_current_datetime")]
+ public ulong ServerCurrentDatetime
+ {
+ get => __pbn__ServerCurrentDatetime.GetValueOrDefault();
+ set => __pbn__ServerCurrentDatetime = value;
+ }
+ public bool ShouldSerializeServerCurrentDatetime() => __pbn__ServerCurrentDatetime != null;
+ public void ResetServerCurrentDatetime() => __pbn__ServerCurrentDatetime = null;
+ private ulong? __pbn__ServerCurrentDatetime;
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class MovieData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"movie_id", IsRequired = true)]
+ public uint MovieId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"enable_days", IsRequired = true)]
+ public uint EnableDays { get; set; }
+
+ }
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class AiEventData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"ai_event_id", IsRequired = true)]
+ public uint AiEventId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"token_id")]
+ public uint TokenId
+ {
+ get => __pbn__TokenId.GetValueOrDefault();
+ set => __pbn__TokenId = value;
+ }
+ public bool ShouldSerializeTokenId() => __pbn__TokenId != null;
+ public void ResetTokenId() => __pbn__TokenId = null;
+ private uint? __pbn__TokenId;
+
+ }
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class VerupNoData1 : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"master_type", IsRequired = true)]
+ public uint MasterType { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"verup_no", IsRequired = true)]
+ public uint VerupNo { get; set; }
+
+ }
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class VerupNoData2 : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"master_type", IsRequired = true)]
+ public uint MasterType { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"ary_information_data")]
+ public global::System.Collections.Generic.List AryInformationDatas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class InformationData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"info_id", IsRequired = true)]
+ public uint InfoId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"verup_no", IsRequired = true)]
+ public uint VerupNo { get; set; }
+
+ }
+
+ }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GettelopRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"telop_id", IsRequired = true)]
+ public uint TelopId { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GettelopResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"verup_no")]
+ public uint VerupNo
+ {
+ get => __pbn__VerupNo.GetValueOrDefault();
+ set => __pbn__VerupNo = value;
+ }
+ public bool ShouldSerializeVerupNo() => __pbn__VerupNo != null;
+ public void ResetVerupNo() => __pbn__VerupNo = null;
+ private uint? __pbn__VerupNo;
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"start_datetime")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string StartDatetime
+ {
+ get => __pbn__StartDatetime ?? "";
+ set => __pbn__StartDatetime = value;
+ }
+ public bool ShouldSerializeStartDatetime() => __pbn__StartDatetime != null;
+ public void ResetStartDatetime() => __pbn__StartDatetime = null;
+ private string __pbn__StartDatetime;
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"end_datetime")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string EndDatetime
+ {
+ get => __pbn__EndDatetime ?? "";
+ set => __pbn__EndDatetime = value;
+ }
+ public bool ShouldSerializeEndDatetime() => __pbn__EndDatetime != null;
+ public void ResetEndDatetime() => __pbn__EndDatetime = null;
+ private string __pbn__EndDatetime;
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"telop")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string Telop
+ {
+ get => __pbn__Telop ?? "";
+ set => __pbn__Telop = value;
+ }
+ public bool ShouldSerializeTelop() => __pbn__Telop != null;
+ public void ResetTelop() => __pbn__Telop = null;
+ private string __pbn__Telop;
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetfolderRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"folder_id")]
+ public uint[] FolderIds { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetfolderResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"ary_eventfolder_data")]
+ public global::System.Collections.Generic.List AryEventfolderDatas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class EventfolderData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"folder_id", IsRequired = true)]
+ public uint FolderId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"verup_no", IsRequired = true)]
+ public uint VerupNo { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"priority", IsRequired = true)]
+ public uint Priority { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"song_no")]
+ public uint[] SongNoes { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"parent_folder_id", IsRequired = true)]
+ public uint ParentFolderId { get; set; }
+
+ }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetShopFolderRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetShopFolderResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"verup_no")]
+ public uint VerupNo
+ {
+ get => __pbn__VerupNo.GetValueOrDefault();
+ set => __pbn__VerupNo = value;
+ }
+ public bool ShouldSerializeVerupNo() => __pbn__VerupNo != null;
+ public void ResetVerupNo() => __pbn__VerupNo = null;
+ private uint? __pbn__VerupNo;
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"token_id")]
+ public uint TokenId
+ {
+ get => __pbn__TokenId.GetValueOrDefault();
+ set => __pbn__TokenId = value;
+ }
+ public bool ShouldSerializeTokenId() => __pbn__TokenId != null;
+ public void ResetTokenId() => __pbn__TokenId = null;
+ private uint? __pbn__TokenId;
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"ary_shop_folder_data")]
+ public global::System.Collections.Generic.List AryShopFolderDatas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class ShopFolderData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"song_no", IsRequired = true)]
+ public uint SongNo { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"price", IsRequired = true)]
+ public uint Price { get; set; }
+
+ }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetSongIntroductionRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"set_id")]
+ public uint[] SetIds { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetSongIntroductionResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"ary_song_introduction_data")]
+ public global::System.Collections.Generic.List ArySongIntroductionDatas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class SongIntroductionData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"set_id", IsRequired = true)]
+ public uint SetId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"verup_no", IsRequired = true)]
+ public uint VerupNo { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"main_song_no")]
+ public uint MainSongNo
+ {
+ get => __pbn__MainSongNo.GetValueOrDefault();
+ set => __pbn__MainSongNo = value;
+ }
+ public bool ShouldSerializeMainSongNo() => __pbn__MainSongNo != null;
+ public void ResetMainSongNo() => __pbn__MainSongNo = null;
+ private uint? __pbn__MainSongNo;
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"sub_song_no")]
+ public uint[] SubSongNoes { get; set; }
+
+ }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class TournamentcheckRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"kit_id", IsRequired = true)]
+ public uint KitId { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class TournamentcheckResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"rare_rate")]
+ public uint RareRate
+ {
+ get => __pbn__RareRate.GetValueOrDefault();
+ set => __pbn__RareRate = value;
+ }
+ public bool ShouldSerializeRareRate() => __pbn__RareRate != null;
+ public void ResetRareRate() => __pbn__RareRate = null;
+ private uint? __pbn__RareRate;
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"ary_gacha_song_data")]
+ public global::System.Collections.Generic.List AryGachaSongDatas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"ary_gacha_tone_data")]
+ public global::System.Collections.Generic.List AryGachaToneDatas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"ary_gacha_costume_1_data")]
+ public global::System.Collections.Generic.List AryGachaCostume1Datas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"ary_gacha_costume_2_data")]
+ public global::System.Collections.Generic.List AryGachaCostume2Datas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(7, Name = @"ary_gacha_costume_3_data")]
+ public global::System.Collections.Generic.List AryGachaCostume3Datas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(8, Name = @"ary_gacha_costume_4_data")]
+ public global::System.Collections.Generic.List AryGachaCostume4Datas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(9, Name = @"ary_gacha_costume_5_data")]
+ public global::System.Collections.Generic.List AryGachaCostume5Datas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(10, Name = @"ary_gacha_title_data")]
+ public global::System.Collections.Generic.List AryGachaTitleDatas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class GachainfoData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"normal_gacha_flg", IsRequired = true)]
+ public byte[] NormalGachaFlg { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"rare_gacha_flg", IsRequired = true)]
+ public byte[] RareGachaFlg { get; set; }
+
+ }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetDanOdaiRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"type", IsRequired = true)]
+ public uint Type { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"dan_id")]
+ public uint[] DanIds { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetDanOdaiResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"ary_odai_data")]
+ public global::System.Collections.Generic.List AryOdaiDatas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class OdaiData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"dan_id", IsRequired = true)]
+ public uint DanId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"verup_no", IsRequired = true)]
+ public uint VerupNo { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"title", IsRequired = true)]
+ public string Title { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"ary_odai_song")]
+ public global::System.Collections.Generic.List AryOdaiSongs { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"ary_odai_border")]
+ public global::System.Collections.Generic.List AryOdaiBorders { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class OdaiSong : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"song_no", IsRequired = true)]
+ public uint SongNo { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"level", IsRequired = true)]
+ public uint Level { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"is_hidden_song_name", IsRequired = true)]
+ public bool IsHiddenSongName { get; set; }
+
+ }
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class OdaiBorder : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"odai_type", IsRequired = true)]
+ public uint OdaiType { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"border_type", IsRequired = true)]
+ public uint BorderType { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"red_border_total")]
+ public uint RedBorderTotal
+ {
+ get => __pbn__RedBorderTotal.GetValueOrDefault();
+ set => __pbn__RedBorderTotal = value;
+ }
+ public bool ShouldSerializeRedBorderTotal() => __pbn__RedBorderTotal != null;
+ public void ResetRedBorderTotal() => __pbn__RedBorderTotal = null;
+ private uint? __pbn__RedBorderTotal;
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"gold_border_total")]
+ public uint GoldBorderTotal
+ {
+ get => __pbn__GoldBorderTotal.GetValueOrDefault();
+ set => __pbn__GoldBorderTotal = value;
+ }
+ public bool ShouldSerializeGoldBorderTotal() => __pbn__GoldBorderTotal != null;
+ public void ResetGoldBorderTotal() => __pbn__GoldBorderTotal = null;
+ private uint? __pbn__GoldBorderTotal;
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"red_border_1")]
+ public uint RedBorder1
+ {
+ get => __pbn__RedBorder1.GetValueOrDefault();
+ set => __pbn__RedBorder1 = value;
+ }
+ public bool ShouldSerializeRedBorder1() => __pbn__RedBorder1 != null;
+ public void ResetRedBorder1() => __pbn__RedBorder1 = null;
+ private uint? __pbn__RedBorder1;
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"gold_border_1")]
+ public uint GoldBorder1
+ {
+ get => __pbn__GoldBorder1.GetValueOrDefault();
+ set => __pbn__GoldBorder1 = value;
+ }
+ public bool ShouldSerializeGoldBorder1() => __pbn__GoldBorder1 != null;
+ public void ResetGoldBorder1() => __pbn__GoldBorder1 = null;
+ private uint? __pbn__GoldBorder1;
+
+ [global::ProtoBuf.ProtoMember(7, Name = @"red_border_2")]
+ public uint RedBorder2
+ {
+ get => __pbn__RedBorder2.GetValueOrDefault();
+ set => __pbn__RedBorder2 = value;
+ }
+ public bool ShouldSerializeRedBorder2() => __pbn__RedBorder2 != null;
+ public void ResetRedBorder2() => __pbn__RedBorder2 = null;
+ private uint? __pbn__RedBorder2;
+
+ [global::ProtoBuf.ProtoMember(8, Name = @"gold_border_2")]
+ public uint GoldBorder2
+ {
+ get => __pbn__GoldBorder2.GetValueOrDefault();
+ set => __pbn__GoldBorder2 = value;
+ }
+ public bool ShouldSerializeGoldBorder2() => __pbn__GoldBorder2 != null;
+ public void ResetGoldBorder2() => __pbn__GoldBorder2 = null;
+ private uint? __pbn__GoldBorder2;
+
+ [global::ProtoBuf.ProtoMember(9, Name = @"red_border_3")]
+ public uint RedBorder3
+ {
+ get => __pbn__RedBorder3.GetValueOrDefault();
+ set => __pbn__RedBorder3 = value;
+ }
+ public bool ShouldSerializeRedBorder3() => __pbn__RedBorder3 != null;
+ public void ResetRedBorder3() => __pbn__RedBorder3 = null;
+ private uint? __pbn__RedBorder3;
+
+ [global::ProtoBuf.ProtoMember(10, Name = @"gold_border_3")]
+ public uint GoldBorder3
+ {
+ get => __pbn__GoldBorder3.GetValueOrDefault();
+ set => __pbn__GoldBorder3 = value;
+ }
+ public bool ShouldSerializeGoldBorder3() => __pbn__GoldBorder3 != null;
+ public void ResetGoldBorder3() => __pbn__GoldBorder3 = null;
+ private uint? __pbn__GoldBorder3;
+
+ }
+
+ }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class VerifyQrcodeRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"baid", IsRequired = true)]
+ public ulong Baid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"qrcode_serial", IsRequired = true)]
+ public string QrcodeSerial { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"is_new_card")]
+ public bool IsNewCard
+ {
+ get => __pbn__IsNewCard.GetValueOrDefault();
+ set => __pbn__IsNewCard = value;
+ }
+ public bool ShouldSerializeIsNewCard() => __pbn__IsNewCard != null;
+ public void ResetIsNewCard() => __pbn__IsNewCard = null;
+ private bool? __pbn__IsNewCard;
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class VerifyQrcodeResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"qrcode_id")]
+ public uint QrcodeId
+ {
+ get => __pbn__QrcodeId.GetValueOrDefault();
+ set => __pbn__QrcodeId = value;
+ }
+ public bool ShouldSerializeQrcodeId() => __pbn__QrcodeId != null;
+ public void ResetQrcodeId() => __pbn__QrcodeId = null;
+ private uint? __pbn__QrcodeId;
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class ExecuteQrcodeRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"baid", IsRequired = true)]
+ public ulong Baid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"qrcode_serial", IsRequired = true)]
+ public string QrcodeSerial { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class ExecuteQrcodeResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"qrcode_id")]
+ public uint QrcodeId
+ {
+ get => __pbn__QrcodeId.GetValueOrDefault();
+ set => __pbn__QrcodeId = value;
+ }
+ public bool ShouldSerializeQrcodeId() => __pbn__QrcodeId != null;
+ public void ResetQrcodeId() => __pbn__QrcodeId = null;
+ private uint? __pbn__QrcodeId;
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetApplicationUrlRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"baid", IsRequired = true)]
+ public ulong Baid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"qrcode_id", IsRequired = true)]
+ public uint QrcodeId { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetApplicationUrlResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"application_url")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string ApplicationUrl
+ {
+ get => __pbn__ApplicationUrl ?? "";
+ set => __pbn__ApplicationUrl = value;
+ }
+ public bool ShouldSerializeApplicationUrl() => __pbn__ApplicationUrl != null;
+ public void ResetApplicationUrl() => __pbn__ApplicationUrl = null;
+ private string __pbn__ApplicationUrl;
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class SetAnyStringRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"any_string", IsRequired = true)]
+ public string AnyString { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class SetAnyStringResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetGenericMasterRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"master_type", IsRequired = true)]
+ public uint MasterType { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetGenericMasterResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"verup_no")]
+ public uint VerupNo
+ {
+ get => __pbn__VerupNo.GetValueOrDefault();
+ set => __pbn__VerupNo = value;
+ }
+ public bool ShouldSerializeVerupNo() => __pbn__VerupNo != null;
+ public void ResetVerupNo() => __pbn__VerupNo = null;
+ private uint? __pbn__VerupNo;
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"enable_id_bit")]
+ public byte[] EnableIdBit
+ {
+ get => __pbn__EnableIdBit;
+ set => __pbn__EnableIdBit = value;
+ }
+ public bool ShouldSerializeEnableIdBit() => __pbn__EnableIdBit != null;
+ public void ResetEnableIdBit() => __pbn__EnableIdBit = null;
+ private byte[] __pbn__EnableIdBit;
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class MusicUsbAuth1Request : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"usbmem_ver", IsRequired = true)]
+ public string UsbmemVer { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"usbmem_serial", IsRequired = true)]
+ public string UsbmemSerial { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"usbmem_vid", IsRequired = true)]
+ public string UsbmemVid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"usbmem_pid", IsRequired = true)]
+ public string UsbmemPid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(7, Name = @"app_ver", IsRequired = true)]
+ public uint AppVer { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class MusicUsbAuth1Response : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"secret_key_1")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string SecretKey1
+ {
+ get => __pbn__SecretKey1 ?? "";
+ set => __pbn__SecretKey1 = value;
+ }
+ public bool ShouldSerializeSecretKey1() => __pbn__SecretKey1 != null;
+ public void ResetSecretKey1() => __pbn__SecretKey1 = null;
+ private string __pbn__SecretKey1;
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"secret_key_2")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string SecretKey2
+ {
+ get => __pbn__SecretKey2 ?? "";
+ set => __pbn__SecretKey2 = value;
+ }
+ public bool ShouldSerializeSecretKey2() => __pbn__SecretKey2 != null;
+ public void ResetSecretKey2() => __pbn__SecretKey2 = null;
+ private string __pbn__SecretKey2;
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"datafile_hash")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string DatafileHash
+ {
+ get => __pbn__DatafileHash ?? "";
+ set => __pbn__DatafileHash = value;
+ }
+ public bool ShouldSerializeDatafileHash() => __pbn__DatafileHash != null;
+ public void ResetDatafileHash() => __pbn__DatafileHash = null;
+ private string __pbn__DatafileHash;
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class MusicUsbAuth2Request : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"usbmem_ver", IsRequired = true)]
+ public string UsbmemVer { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"usbmem_serial", IsRequired = true)]
+ public string UsbmemSerial { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"usbmem_vid", IsRequired = true)]
+ public string UsbmemVid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"usbmem_pid", IsRequired = true)]
+ public string UsbmemPid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(7, Name = @"app_ver", IsRequired = true)]
+ public uint AppVer { get; set; }
+
+ [global::ProtoBuf.ProtoMember(8, Name = @"datafile_hash", IsRequired = true)]
+ public string DatafileHash { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class MusicUsbAuth2Response : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class BAIDRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"wechat_qr_str", IsRequired = true)]
+ public string WechatQrStr { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"country_id", IsRequired = true)]
+ public string CountryId { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class BAIDResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"player_type")]
+ public uint PlayerType
+ {
+ get => __pbn__PlayerType.GetValueOrDefault();
+ set => __pbn__PlayerType = value;
+ }
+ public bool ShouldSerializePlayerType() => __pbn__PlayerType != null;
+ public void ResetPlayerType() => __pbn__PlayerType = null;
+ private uint? __pbn__PlayerType;
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"baid")]
+ public ulong Baid
+ {
+ get => __pbn__Baid.GetValueOrDefault();
+ set => __pbn__Baid = value;
+ }
+ public bool ShouldSerializeBaid() => __pbn__Baid != null;
+ public void ResetBaid() => __pbn__Baid = null;
+ private ulong? __pbn__Baid;
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"mydon_name")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string MyDonName
+ {
+ get => __pbn__MydonName ?? "";
+ set => __pbn__MydonName = value;
+ }
+ public bool ShouldSerializeMydonName() => __pbn__MydonName != null;
+ public void ResetMydonName() => __pbn__MydonName = null;
+ private string __pbn__MydonName;
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"mydon_name_language")]
+ public uint MyDonNameLanguage
+ {
+ get => __pbn__MydonNameLanguage.GetValueOrDefault();
+ set => __pbn__MydonNameLanguage = value;
+ }
+ public bool ShouldSerializeMydonNameLanguage() => __pbn__MydonNameLanguage != null;
+ public void ResetMydonNameLanguage() => __pbn__MydonNameLanguage = null;
+ private uint? __pbn__MydonNameLanguage;
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"title")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string Title
+ {
+ get => __pbn__Title ?? "";
+ set => __pbn__Title = value;
+ }
+ public bool ShouldSerializeTitle() => __pbn__Title != null;
+ public void ResetTitle() => __pbn__Title = null;
+ private string __pbn__Title;
+
+ [global::ProtoBuf.ProtoMember(7, Name = @"titleplate_id")]
+ public uint TitlePlateId
+ {
+ get => __pbn__TitleplateId.GetValueOrDefault();
+ set => __pbn__TitleplateId = value;
+ }
+ public bool ShouldSerializeTitleplateId() => __pbn__TitleplateId != null;
+ public void ResetTitleplateId() => __pbn__TitleplateId = null;
+ private uint? __pbn__TitleplateId;
+
+ [global::ProtoBuf.ProtoMember(8, Name = @"color_face")]
+ public uint ColorFace
+ {
+ get => __pbn__ColorFace.GetValueOrDefault();
+ set => __pbn__ColorFace = value;
+ }
+ public bool ShouldSerializeColorFace() => __pbn__ColorFace != null;
+ public void ResetColorFace() => __pbn__ColorFace = null;
+ private uint? __pbn__ColorFace;
+
+ [global::ProtoBuf.ProtoMember(9, Name = @"color_body")]
+ public uint ColorBody
+ {
+ get => __pbn__ColorBody.GetValueOrDefault();
+ set => __pbn__ColorBody = value;
+ }
+ public bool ShouldSerializeColorBody() => __pbn__ColorBody != null;
+ public void ResetColorBody() => __pbn__ColorBody = null;
+ private uint? __pbn__ColorBody;
+
+ [global::ProtoBuf.ProtoMember(10, Name = @"color_limb")]
+ public uint ColorLimb
+ {
+ get => __pbn__ColorLimb.GetValueOrDefault();
+ set => __pbn__ColorLimb = value;
+ }
+ public bool ShouldSerializeColorLimb() => __pbn__ColorLimb != null;
+ public void ResetColorLimb() => __pbn__ColorLimb = null;
+ private uint? __pbn__ColorLimb;
+
+ [global::ProtoBuf.ProtoMember(11, Name = @"ary_costumedata")]
+ public CostumeData AryCostumedata { get; set; }
+
+ [global::ProtoBuf.ProtoMember(12, Name = @"costume_flg_1")]
+ public byte[] CostumeFlg1
+ {
+ get => __pbn__CostumeFlg1;
+ set => __pbn__CostumeFlg1 = value;
+ }
+ public bool ShouldSerializeCostumeFlg1() => __pbn__CostumeFlg1 != null;
+ public void ResetCostumeFlg1() => __pbn__CostumeFlg1 = null;
+ private byte[] __pbn__CostumeFlg1;
+
+ [global::ProtoBuf.ProtoMember(13, Name = @"costume_flg_2")]
+ public byte[] CostumeFlg2
+ {
+ get => __pbn__CostumeFlg2;
+ set => __pbn__CostumeFlg2 = value;
+ }
+ public bool ShouldSerializeCostumeFlg2() => __pbn__CostumeFlg2 != null;
+ public void ResetCostumeFlg2() => __pbn__CostumeFlg2 = null;
+ private byte[] __pbn__CostumeFlg2;
+
+ [global::ProtoBuf.ProtoMember(14, Name = @"costume_flg_3")]
+ public byte[] CostumeFlg3
+ {
+ get => __pbn__CostumeFlg3;
+ set => __pbn__CostumeFlg3 = value;
+ }
+ public bool ShouldSerializeCostumeFlg3() => __pbn__CostumeFlg3 != null;
+ public void ResetCostumeFlg3() => __pbn__CostumeFlg3 = null;
+ private byte[] __pbn__CostumeFlg3;
+
+ [global::ProtoBuf.ProtoMember(15, Name = @"costume_flg_4")]
+ public byte[] CostumeFlg4
+ {
+ get => __pbn__CostumeFlg4;
+ set => __pbn__CostumeFlg4 = value;
+ }
+ public bool ShouldSerializeCostumeFlg4() => __pbn__CostumeFlg4 != null;
+ public void ResetCostumeFlg4() => __pbn__CostumeFlg4 = null;
+ private byte[] __pbn__CostumeFlg4;
+
+ [global::ProtoBuf.ProtoMember(16, Name = @"costume_flg_5")]
+ public byte[] CostumeFlg5
+ {
+ get => __pbn__CostumeFlg5;
+ set => __pbn__CostumeFlg5 = value;
+ }
+ public bool ShouldSerializeCostumeFlg5() => __pbn__CostumeFlg5 != null;
+ public void ResetCostumeFlg5() => __pbn__CostumeFlg5 = null;
+ private byte[] __pbn__CostumeFlg5;
+
+ [global::ProtoBuf.ProtoMember(17, Name = @"last_play_datetime")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string LastPlayDatetime
+ {
+ get => __pbn__LastPlayDatetime ?? "";
+ set => __pbn__LastPlayDatetime = value;
+ }
+ public bool ShouldSerializeLastPlayDatetime() => __pbn__LastPlayDatetime != null;
+ public void ResetLastPlayDatetime() => __pbn__LastPlayDatetime = null;
+ private string __pbn__LastPlayDatetime;
+
+ [global::ProtoBuf.ProtoMember(18, Name = @"is_disp_dan_on")]
+ public bool DisplayDan
+ {
+ get => __pbn__IsDispDanOn.GetValueOrDefault();
+ set => __pbn__IsDispDanOn = value;
+ }
+ public bool ShouldSerializeIsDispDanOn() => __pbn__IsDispDanOn != null;
+ public void ResetIsDispDanOn() => __pbn__IsDispDanOn = null;
+ private bool? __pbn__IsDispDanOn;
+
+ [global::ProtoBuf.ProtoMember(19, Name = @"got_dan_max")]
+ public uint GotDanMax
+ {
+ get => __pbn__GotDanMax.GetValueOrDefault();
+ set => __pbn__GotDanMax = value;
+ }
+ public bool ShouldSerializeGotDanMax() => __pbn__GotDanMax != null;
+ public void ResetGotDanMax() => __pbn__GotDanMax = null;
+ private uint? __pbn__GotDanMax;
+
+ [global::ProtoBuf.ProtoMember(20, Name = @"got_dan_flg")]
+ public byte[] GotDanFlg
+ {
+ get => __pbn__GotDanFlg;
+ set => __pbn__GotDanFlg = value;
+ }
+ public bool ShouldSerializeGotDanFlg() => __pbn__GotDanFlg != null;
+ public void ResetGotDanFlg() => __pbn__GotDanFlg = null;
+ private byte[] __pbn__GotDanFlg;
+
+ [global::ProtoBuf.ProtoMember(21, Name = @"got_danextra_flg")]
+ public byte[] GotGaidenFlg
+ {
+ get => pbnGotGaidenFlg;
+ set => pbnGotGaidenFlg = value;
+ }
+ public bool ShouldSerializeGotDanextraFlg() => pbnGotGaidenFlg != null;
+ public void ResetGotDanextraFlg() => pbnGotGaidenFlg = null;
+ private byte[] pbnGotGaidenFlg;
+
+ [global::ProtoBuf.ProtoMember(22, Name = @"default_tone_setting")]
+ public uint SelectedToneId
+ {
+ get => __pbn__DefaultToneSetting.GetValueOrDefault();
+ set => __pbn__DefaultToneSetting = value;
+ }
+ public bool ShouldSerializeDefaultToneSetting() => __pbn__DefaultToneSetting != null;
+ public void ResetDefaultToneSetting() => __pbn__DefaultToneSetting = null;
+ private uint? __pbn__DefaultToneSetting;
+
+ [global::ProtoBuf.ProtoMember(23, Name = @"generic_info_flg")]
+ public byte[] GenericInfoFlg
+ {
+ get => __pbn__GenericInfoFlg;
+ set => __pbn__GenericInfoFlg = value;
+ }
+ public bool ShouldSerializeGenericInfoFlg() => __pbn__GenericInfoFlg != null;
+ public void ResetGenericInfoFlg() => __pbn__GenericInfoFlg = null;
+ private byte[] __pbn__GenericInfoFlg;
+
+ [global::ProtoBuf.ProtoMember(24, Name = @"ary_crown_count")]
+ public uint[] AryCrownCounts { get; set; }
+
+ [global::ProtoBuf.ProtoMember(25, Name = @"ary_score_rank_count")]
+ public uint[] AryScoreRankCounts { get; set; }
+
+ [global::ProtoBuf.ProtoMember(26, Name = @"is_disp_achievement_on")]
+ public bool IsDispAchievementOn
+ {
+ get => __pbn__IsDispAchievementOn.GetValueOrDefault();
+ set => __pbn__IsDispAchievementOn = value;
+ }
+ public bool ShouldSerializeIsDispAchievementOn() => __pbn__IsDispAchievementOn != null;
+ public void ResetIsDispAchievementOn() => __pbn__IsDispAchievementOn = null;
+ private bool? __pbn__IsDispAchievementOn;
+
+ [global::ProtoBuf.ProtoMember(27, Name = @"disp_achievement_type")]
+ public uint DispAchievementType
+ {
+ get => __pbn__DispAchievementType.GetValueOrDefault();
+ set => __pbn__DispAchievementType = value;
+ }
+ public bool ShouldSerializeDispAchievementType() => __pbn__DispAchievementType != null;
+ public void ResetDispAchievementType() => __pbn__DispAchievementType = null;
+ private uint? __pbn__DispAchievementType;
+
+ [global::ProtoBuf.ProtoMember(28, Name = @"is_disp_achievement_type_set")]
+ public bool IsDispAchievementTypeSet
+ {
+ get => __pbn__IsDispAchievementTypeSet.GetValueOrDefault();
+ set => __pbn__IsDispAchievementTypeSet = value;
+ }
+ public bool ShouldSerializeIsDispAchievementTypeSet() => __pbn__IsDispAchievementTypeSet != null;
+ public void ResetIsDispAchievementTypeSet() => __pbn__IsDispAchievementTypeSet = null;
+ private bool? __pbn__IsDispAchievementTypeSet;
+
+ [global::ProtoBuf.ProtoMember(29, Name = @"last_play_mode")]
+ public uint LastPlayMode
+ {
+ get => __pbn__LastPlayMode.GetValueOrDefault();
+ set => __pbn__LastPlayMode = value;
+ }
+ public bool ShouldSerializeLastPlayMode() => __pbn__LastPlayMode != null;
+ public void ResetLastPlayMode() => __pbn__LastPlayMode = null;
+ private uint? __pbn__LastPlayMode;
+
+ [global::ProtoBuf.ProtoMember(30, Name = @"is_disp_souuchi_on")]
+ public bool IsDispSouuchiOn
+ {
+ get => __pbn__IsDispSouuchiOn.GetValueOrDefault();
+ set => __pbn__IsDispSouuchiOn = value;
+ }
+ public bool ShouldSerializeIsDispSouuchiOn() => __pbn__IsDispSouuchiOn != null;
+ public void ResetIsDispSouuchiOn() => __pbn__IsDispSouuchiOn = null;
+ private bool? __pbn__IsDispSouuchiOn;
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class CostumeData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"costume_1")]
+ public uint Costume1
+ {
+ get => __pbn__Costume1.GetValueOrDefault();
+ set => __pbn__Costume1 = value;
+ }
+ public bool ShouldSerializeCostume1() => __pbn__Costume1 != null;
+ public void ResetCostume1() => __pbn__Costume1 = null;
+ private uint? __pbn__Costume1;
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"costume_2")]
+ public uint Costume2
+ {
+ get => __pbn__Costume2.GetValueOrDefault();
+ set => __pbn__Costume2 = value;
+ }
+ public bool ShouldSerializeCostume2() => __pbn__Costume2 != null;
+ public void ResetCostume2() => __pbn__Costume2 = null;
+ private uint? __pbn__Costume2;
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"costume_3")]
+ public uint Costume3
+ {
+ get => __pbn__Costume3.GetValueOrDefault();
+ set => __pbn__Costume3 = value;
+ }
+ public bool ShouldSerializeCostume3() => __pbn__Costume3 != null;
+ public void ResetCostume3() => __pbn__Costume3 = null;
+ private uint? __pbn__Costume3;
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"costume_4")]
+ public uint Costume4
+ {
+ get => __pbn__Costume4.GetValueOrDefault();
+ set => __pbn__Costume4 = value;
+ }
+ public bool ShouldSerializeCostume4() => __pbn__Costume4 != null;
+ public void ResetCostume4() => __pbn__Costume4 = null;
+ private uint? __pbn__Costume4;
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"costume_5")]
+ public uint Costume5
+ {
+ get => __pbn__Costume5.GetValueOrDefault();
+ set => __pbn__Costume5 = value;
+ }
+ public bool ShouldSerializeCostume5() => __pbn__Costume5 != null;
+ public void ResetCostume5() => __pbn__Costume5 = null;
+ private uint? __pbn__Costume5;
+
+ }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class MydonEntryRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"wechat_qr_str", IsRequired = true)]
+ public string WechatQrStr { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"country_id", IsRequired = true)]
+ public string CountryId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"mydon_name", IsRequired = true)]
+ public string MydonName { get; set; }
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"mydon_name_language", IsRequired = true)]
+ public uint MydonNameLanguage { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class MydonEntryResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"baid")]
+ public ulong Baid
+ {
+ get => __pbn__Baid.GetValueOrDefault();
+ set => __pbn__Baid = value;
+ }
+ public bool ShouldSerializeBaid() => __pbn__Baid != null;
+ public void ResetBaid() => __pbn__Baid = null;
+ private ulong? __pbn__Baid;
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"mydon_name")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string MydonName
+ {
+ get => __pbn__MydonName ?? "";
+ set => __pbn__MydonName = value;
+ }
+ public bool ShouldSerializeMydonName() => __pbn__MydonName != null;
+ public void ResetMydonName() => __pbn__MydonName = null;
+ private string __pbn__MydonName;
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"mydon_name_language")]
+ public uint MydonNameLanguage
+ {
+ get => __pbn__MydonNameLanguage.GetValueOrDefault();
+ set => __pbn__MydonNameLanguage = value;
+ }
+ public bool ShouldSerializeMydonNameLanguage() => __pbn__MydonNameLanguage != null;
+ public void ResetMydonNameLanguage() => __pbn__MydonNameLanguage = null;
+ private uint? __pbn__MydonNameLanguage;
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class UserDataRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"wechat_qr_str", IsRequired = true)]
+ public string WechatQrStr { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"baid", IsRequired = true)]
+ public ulong Baid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class UserDataResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"tone_flg")]
+ public byte[] ToneFlg
+ {
+ get => __pbn__ToneFlg;
+ set => __pbn__ToneFlg = value;
+ }
+ public bool ShouldSerializeToneFlg() => __pbn__ToneFlg != null;
+ public void ResetToneFlg() => __pbn__ToneFlg = null;
+ private byte[] __pbn__ToneFlg;
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"title_flg")]
+ public byte[] TitleFlg
+ {
+ get => __pbn__TitleFlg;
+ set => __pbn__TitleFlg = value;
+ }
+ public bool ShouldSerializeTitleFlg() => __pbn__TitleFlg != null;
+ public void ResetTitleFlg() => __pbn__TitleFlg = null;
+ private byte[] __pbn__TitleFlg;
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"release_song_flg")]
+ public byte[] ReleaseSongFlg
+ {
+ get => __pbn__ReleaseSongFlg;
+ set => __pbn__ReleaseSongFlg = value;
+ }
+ public bool ShouldSerializeReleaseSongFlg() => __pbn__ReleaseSongFlg != null;
+ public void ResetReleaseSongFlg() => __pbn__ReleaseSongFlg = null;
+ private byte[] __pbn__ReleaseSongFlg;
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"ura_release_song_flg")]
+ public byte[] UraReleaseSongFlg
+ {
+ get => __pbn__UraReleaseSongFlg;
+ set => __pbn__UraReleaseSongFlg = value;
+ }
+ public bool ShouldSerializeUraReleaseSongFlg() => __pbn__UraReleaseSongFlg != null;
+ public void ResetUraReleaseSongFlg() => __pbn__UraReleaseSongFlg = null;
+ private byte[] __pbn__UraReleaseSongFlg;
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"ary_favorite_song_no")]
+ public uint[] AryFavoriteSongNoes { get; set; }
+
+ [global::ProtoBuf.ProtoMember(7, Name = @"ary_recent_song_no")]
+ public uint[] AryRecentSongNoes { get; set; }
+
+ [global::ProtoBuf.ProtoMember(8, Name = @"disp_score_type")]
+ public uint DispScoreType
+ {
+ get => __pbn__DispScoreType.GetValueOrDefault();
+ set => __pbn__DispScoreType = value;
+ }
+ public bool ShouldSerializeDispScoreType() => __pbn__DispScoreType != null;
+ public void ResetDispScoreType() => __pbn__DispScoreType = null;
+ private uint? __pbn__DispScoreType;
+
+ [global::ProtoBuf.ProtoMember(9, Name = @"disp_level_chassis")]
+ public uint DispLevelChassis
+ {
+ get => __pbn__DispLevelChassis.GetValueOrDefault();
+ set => __pbn__DispLevelChassis = value;
+ }
+ public bool ShouldSerializeDispLevelChassis() => __pbn__DispLevelChassis != null;
+ public void ResetDispLevelChassis() => __pbn__DispLevelChassis = null;
+ private uint? __pbn__DispLevelChassis;
+
+ [global::ProtoBuf.ProtoMember(10, Name = @"disp_level_self")]
+ public uint DispLevelSelf
+ {
+ get => __pbn__DispLevelSelf.GetValueOrDefault();
+ set => __pbn__DispLevelSelf = value;
+ }
+ public bool ShouldSerializeDispLevelSelf() => __pbn__DispLevelSelf != null;
+ public void ResetDispLevelSelf() => __pbn__DispLevelSelf = null;
+ private uint? __pbn__DispLevelSelf;
+
+ [global::ProtoBuf.ProtoMember(11, Name = @"is_disp_tojiru_on")]
+ public bool IsDispTojiruOn
+ {
+ get => __pbn__IsDispTojiruOn.GetValueOrDefault();
+ set => __pbn__IsDispTojiruOn = value;
+ }
+ public bool ShouldSerializeIsDispTojiruOn() => __pbn__IsDispTojiruOn != null;
+ public void ResetIsDispTojiruOn() => __pbn__IsDispTojiruOn = null;
+ private bool? __pbn__IsDispTojiruOn;
+
+ [global::ProtoBuf.ProtoMember(12, Name = @"default_option_setting")]
+ public byte[] DefaultOptionSetting
+ {
+ get => __pbn__DefaultOptionSetting;
+ set => __pbn__DefaultOptionSetting = value;
+ }
+ public bool ShouldSerializeDefaultOptionSetting() => __pbn__DefaultOptionSetting != null;
+ public void ResetDefaultOptionSetting() => __pbn__DefaultOptionSetting = null;
+ private byte[] __pbn__DefaultOptionSetting;
+
+ [global::ProtoBuf.ProtoMember(13, Name = @"notes_position", DataFormat = global::ProtoBuf.DataFormat.ZigZag)]
+ public int NotesPosition
+ {
+ get => __pbn__NotesPosition.GetValueOrDefault();
+ set => __pbn__NotesPosition = value;
+ }
+ public bool ShouldSerializeNotesPosition() => __pbn__NotesPosition != null;
+ public void ResetNotesPosition() => __pbn__NotesPosition = null;
+ private int? __pbn__NotesPosition;
+
+ [global::ProtoBuf.ProtoMember(14, Name = @"is_voice_on")]
+ public bool IsVoiceOn
+ {
+ get => __pbn__IsVoiceOn.GetValueOrDefault();
+ set => __pbn__IsVoiceOn = value;
+ }
+ public bool ShouldSerializeIsVoiceOn() => __pbn__IsVoiceOn != null;
+ public void ResetIsVoiceOn() => __pbn__IsVoiceOn = null;
+ private bool? __pbn__IsVoiceOn;
+
+ [global::ProtoBuf.ProtoMember(15, Name = @"is_skip_on")]
+ public bool IsSkipOn
+ {
+ get => __pbn__IsSkipOn.GetValueOrDefault();
+ set => __pbn__IsSkipOn = value;
+ }
+ public bool ShouldSerializeIsSkipOn() => __pbn__IsSkipOn != null;
+ public void ResetIsSkipOn() => __pbn__IsSkipOn = null;
+ private bool? __pbn__IsSkipOn;
+
+ [global::ProtoBuf.ProtoMember(16, Name = @"difficulty_setting_course")]
+ public uint DifficultySettingCourse
+ {
+ get => __pbn__DifficultySettingCourse.GetValueOrDefault();
+ set => __pbn__DifficultySettingCourse = value;
+ }
+ public bool ShouldSerializeDifficultySettingCourse() => __pbn__DifficultySettingCourse != null;
+ public void ResetDifficultySettingCourse() => __pbn__DifficultySettingCourse = null;
+ private uint? __pbn__DifficultySettingCourse;
+
+ [global::ProtoBuf.ProtoMember(17, Name = @"difficulty_setting_star")]
+ public uint DifficultySettingStar
+ {
+ get => __pbn__DifficultySettingStar.GetValueOrDefault();
+ set => __pbn__DifficultySettingStar = value;
+ }
+ public bool ShouldSerializeDifficultySettingStar() => __pbn__DifficultySettingStar != null;
+ public void ResetDifficultySettingStar() => __pbn__DifficultySettingStar = null;
+ private uint? __pbn__DifficultySettingStar;
+
+ [global::ProtoBuf.ProtoMember(18, Name = @"difficulty_setting_sort")]
+ public uint DifficultySettingSort
+ {
+ get => __pbn__DifficultySettingSort.GetValueOrDefault();
+ set => __pbn__DifficultySettingSort = value;
+ }
+ public bool ShouldSerializeDifficultySettingSort() => __pbn__DifficultySettingSort != null;
+ public void ResetDifficultySettingSort() => __pbn__DifficultySettingSort = null;
+ private uint? __pbn__DifficultySettingSort;
+
+ [global::ProtoBuf.ProtoMember(19, Name = @"difficulty_played_course")]
+ public uint DifficultyPlayedCourse
+ {
+ get => __pbn__DifficultyPlayedCourse.GetValueOrDefault();
+ set => __pbn__DifficultyPlayedCourse = value;
+ }
+ public bool ShouldSerializeDifficultyPlayedCourse() => __pbn__DifficultyPlayedCourse != null;
+ public void ResetDifficultyPlayedCourse() => __pbn__DifficultyPlayedCourse = null;
+ private uint? __pbn__DifficultyPlayedCourse;
+
+ [global::ProtoBuf.ProtoMember(20, Name = @"difficulty_played_star")]
+ public uint DifficultyPlayedStar
+ {
+ get => __pbn__DifficultyPlayedStar.GetValueOrDefault();
+ set => __pbn__DifficultyPlayedStar = value;
+ }
+ public bool ShouldSerializeDifficultyPlayedStar() => __pbn__DifficultyPlayedStar != null;
+ public void ResetDifficultyPlayedStar() => __pbn__DifficultyPlayedStar = null;
+ private uint? __pbn__DifficultyPlayedStar;
+
+ [global::ProtoBuf.ProtoMember(21, Name = @"difficulty_played_sort")]
+ public uint DifficultyPlayedSort
+ {
+ get => __pbn__DifficultyPlayedSort.GetValueOrDefault();
+ set => __pbn__DifficultyPlayedSort = value;
+ }
+ public bool ShouldSerializeDifficultyPlayedSort() => __pbn__DifficultyPlayedSort != null;
+ public void ResetDifficultyPlayedSort() => __pbn__DifficultyPlayedSort = null;
+ private uint? __pbn__DifficultyPlayedSort;
+
+ [global::ProtoBuf.ProtoMember(22, Name = @"total_credit_cnt")]
+ public uint TotalCreditCnt
+ {
+ get => __pbn__TotalCreditCnt.GetValueOrDefault();
+ set => __pbn__TotalCreditCnt = value;
+ }
+ public bool ShouldSerializeTotalCreditCnt() => __pbn__TotalCreditCnt != null;
+ public void ResetTotalCreditCnt() => __pbn__TotalCreditCnt = null;
+ private uint? __pbn__TotalCreditCnt;
+
+ [global::ProtoBuf.ProtoMember(23, Name = @"song_recent_cnt")]
+ public uint SongRecentCnt
+ {
+ get => __pbn__SongRecentCnt.GetValueOrDefault();
+ set => __pbn__SongRecentCnt = value;
+ }
+ public bool ShouldSerializeSongRecentCnt() => __pbn__SongRecentCnt != null;
+ public void ResetSongRecentCnt() => __pbn__SongRecentCnt = null;
+ private uint? __pbn__SongRecentCnt;
+
+ [global::ProtoBuf.ProtoMember(24, Name = @"is_challengecompe")]
+ public bool IsChallengecompe
+ {
+ get => __pbn__IsChallengecompe.GetValueOrDefault();
+ set => __pbn__IsChallengecompe = value;
+ }
+ public bool ShouldSerializeIsChallengecompe() => __pbn__IsChallengecompe != null;
+ public void ResetIsChallengecompe() => __pbn__IsChallengecompe = null;
+ private bool? __pbn__IsChallengecompe;
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class PlayResultRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"baid_conf", IsRequired = true)]
+ public ulong BaidConf { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"chassis_id_conf", IsRequired = true)]
+ public string ChassisIdConf { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"shop_id_conf", IsRequired = true)]
+ public string ShopIdConf { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"play_datetime_conf", IsRequired = true)]
+ public string PlayDatetimeConf { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"playresult_data", IsRequired = true)]
+ public byte[] PlayresultData { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class PlayResultResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class PlayResultDataRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"wechat_qr_str", IsRequired = true)]
+ public string WechatQrStr { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"baid", IsRequired = true)]
+ public ulong Baid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"play_datetime", IsRequired = true)]
+ public string PlayDatetime { get; set; }
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"is_right", IsRequired = true)]
+ public bool IsRight { get; set; }
+
+ [global::ProtoBuf.ProtoMember(7, Name = @"card_type", IsRequired = true)]
+ public uint CardType { get; set; }
+
+ [global::ProtoBuf.ProtoMember(8, Name = @"is_two_players", IsRequired = true)]
+ public bool IsTwoPlayers { get; set; }
+
+ [global::ProtoBuf.ProtoMember(9, Name = @"ary_stage_info")]
+ public global::System.Collections.Generic.List AryStageInfoes { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(10, Name = @"release_song_no")]
+ public uint[] ReleaseSongNoes { get; set; }
+
+ [global::ProtoBuf.ProtoMember(11, Name = @"ura_release_song_no")]
+ public uint[] UraReleaseSongNoes { get; set; }
+
+ [global::ProtoBuf.ProtoMember(12, Name = @"get_tone_no")]
+ public uint[] GetToneNoes { get; set; }
+
+ [global::ProtoBuf.ProtoMember(13, Name = @"get_costume_no_1")]
+ public uint[] GetCostumeNo1s { get; set; }
+
+ [global::ProtoBuf.ProtoMember(14, Name = @"get_costume_no_2")]
+ public uint[] GetCostumeNo2s { get; set; }
+
+ [global::ProtoBuf.ProtoMember(15, Name = @"get_costume_no_3")]
+ public uint[] GetCostumeNo3s { get; set; }
+
+ [global::ProtoBuf.ProtoMember(16, Name = @"get_costume_no_4")]
+ public uint[] GetCostumeNo4s { get; set; }
+
+ [global::ProtoBuf.ProtoMember(17, Name = @"get_costume_no_5")]
+ public uint[] GetCostumeNo5s { get; set; }
+
+ [global::ProtoBuf.ProtoMember(18, Name = @"get_title_no")]
+ public uint[] GetTitleNoes { get; set; }
+
+ [global::ProtoBuf.ProtoMember(19, Name = @"get_generic_info_no")]
+ public uint[] GetGenericInfoNoes { get; set; }
+
+ [global::ProtoBuf.ProtoMember(20, Name = @"ary_play_costume", IsRequired = true)]
+ public CostumeData AryPlayCostume { get; set; }
+
+ [global::ProtoBuf.ProtoMember(21, Name = @"ary_current_costume", IsRequired = true)]
+ public CostumeData AryCurrentCostume { get; set; }
+
+ [global::ProtoBuf.ProtoMember(22, Name = @"title")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string Title
+ {
+ get => __pbn__Title ?? "";
+ set => __pbn__Title = value;
+ }
+ public bool ShouldSerializeTitle() => __pbn__Title != null;
+ public void ResetTitle() => __pbn__Title = null;
+ private string __pbn__Title;
+
+ [global::ProtoBuf.ProtoMember(23, Name = @"titleplate_id")]
+ public uint TitleplateId
+ {
+ get => __pbn__TitleplateId.GetValueOrDefault();
+ set => __pbn__TitleplateId = value;
+ }
+ public bool ShouldSerializeTitleplateId() => __pbn__TitleplateId != null;
+ public void ResetTitleplateId() => __pbn__TitleplateId = null;
+ private uint? __pbn__TitleplateId;
+
+ [global::ProtoBuf.ProtoMember(24, Name = @"play_mode", IsRequired = true)]
+ public uint PlayMode { get; set; }
+
+ [global::ProtoBuf.ProtoMember(25, Name = @"collaboration_id")]
+ public uint CollaborationId
+ {
+ get => __pbn__CollaborationId.GetValueOrDefault();
+ set => __pbn__CollaborationId = value;
+ }
+ public bool ShouldSerializeCollaborationId() => __pbn__CollaborationId != null;
+ public void ResetCollaborationId() => __pbn__CollaborationId = null;
+ private uint? __pbn__CollaborationId;
+
+ [global::ProtoBuf.ProtoMember(26, Name = @"dan_id")]
+ public uint DanId
+ {
+ get => __pbn__DanId.GetValueOrDefault();
+ set => __pbn__DanId = value;
+ }
+ public bool ShouldSerializeDanId() => __pbn__DanId != null;
+ public void ResetDanId() => __pbn__DanId = null;
+ private uint? __pbn__DanId;
+
+ [global::ProtoBuf.ProtoMember(27, Name = @"dan_result")]
+ public uint DanResult
+ {
+ get => __pbn__DanResult.GetValueOrDefault();
+ set => __pbn__DanResult = value;
+ }
+ public bool ShouldSerializeDanResult() => __pbn__DanResult != null;
+ public void ResetDanResult() => __pbn__DanResult = null;
+ private uint? __pbn__DanResult;
+
+ [global::ProtoBuf.ProtoMember(28, Name = @"soul_gauge_total")]
+ public uint SoulGaugeTotal
+ {
+ get => __pbn__SoulGaugeTotal.GetValueOrDefault();
+ set => __pbn__SoulGaugeTotal = value;
+ }
+ public bool ShouldSerializeSoulGaugeTotal() => __pbn__SoulGaugeTotal != null;
+ public void ResetSoulGaugeTotal() => __pbn__SoulGaugeTotal = null;
+ private uint? __pbn__SoulGaugeTotal;
+
+ [global::ProtoBuf.ProtoMember(29, Name = @"combo_cnt_total")]
+ public uint ComboCntTotal
+ {
+ get => __pbn__ComboCntTotal.GetValueOrDefault();
+ set => __pbn__ComboCntTotal = value;
+ }
+ public bool ShouldSerializeComboCntTotal() => __pbn__ComboCntTotal != null;
+ public void ResetComboCntTotal() => __pbn__ComboCntTotal = null;
+ private uint? __pbn__ComboCntTotal;
+
+ [global::ProtoBuf.ProtoMember(30, Name = @"is_not_recorded_dan")]
+ public bool IsNotRecordedDan
+ {
+ get => __pbn__IsNotRecordedDan.GetValueOrDefault();
+ set => __pbn__IsNotRecordedDan = value;
+ }
+ public bool ShouldSerializeIsNotRecordedDan() => __pbn__IsNotRecordedDan != null;
+ public void ResetIsNotRecordedDan() => __pbn__IsNotRecordedDan = null;
+ private bool? __pbn__IsNotRecordedDan;
+
+ [global::ProtoBuf.ProtoMember(31, Name = @"area_code", IsRequired = true)]
+ public uint AreaCode { get; set; }
+
+ [global::ProtoBuf.ProtoMember(32, Name = @"reserved", IsRequired = true)]
+ public byte[] Reserved { get; set; }
+
+ [global::ProtoBuf.ProtoMember(33, Name = @"tournament_mode")]
+ public uint TournamentMode
+ {
+ get => __pbn__TournamentMode.GetValueOrDefault();
+ set => __pbn__TournamentMode = value;
+ }
+ public bool ShouldSerializeTournamentMode() => __pbn__TournamentMode != null;
+ public void ResetTournamentMode() => __pbn__TournamentMode = null;
+ private uint? __pbn__TournamentMode;
+
+ [global::ProtoBuf.ProtoMember(34, Name = @"difficulty_played_course")]
+ public uint DifficultyPlayedCourse
+ {
+ get => __pbn__DifficultyPlayedCourse.GetValueOrDefault();
+ set => __pbn__DifficultyPlayedCourse = value;
+ }
+ public bool ShouldSerializeDifficultyPlayedCourse() => __pbn__DifficultyPlayedCourse != null;
+ public void ResetDifficultyPlayedCourse() => __pbn__DifficultyPlayedCourse = null;
+ private uint? __pbn__DifficultyPlayedCourse;
+
+ [global::ProtoBuf.ProtoMember(35, Name = @"difficulty_played_star")]
+ public uint DifficultyPlayedStar
+ {
+ get => __pbn__DifficultyPlayedStar.GetValueOrDefault();
+ set => __pbn__DifficultyPlayedStar = value;
+ }
+ public bool ShouldSerializeDifficultyPlayedStar() => __pbn__DifficultyPlayedStar != null;
+ public void ResetDifficultyPlayedStar() => __pbn__DifficultyPlayedStar = null;
+ private uint? __pbn__DifficultyPlayedStar;
+
+ [global::ProtoBuf.ProtoMember(36, Name = @"difficulty_played_sort")]
+ public uint DifficultyPlayedSort
+ {
+ get => __pbn__DifficultyPlayedSort.GetValueOrDefault();
+ set => __pbn__DifficultyPlayedSort = value;
+ }
+ public bool ShouldSerializeDifficultyPlayedSort() => __pbn__DifficultyPlayedSort != null;
+ public void ResetDifficultyPlayedSort() => __pbn__DifficultyPlayedSort = null;
+ private uint? __pbn__DifficultyPlayedSort;
+
+ [global::ProtoBuf.ProtoMember(37, Name = @"is_random_use_play")]
+ public uint IsRandomUsePlay
+ {
+ get => __pbn__IsRandomUsePlay.GetValueOrDefault();
+ set => __pbn__IsRandomUsePlay = value;
+ }
+ public bool ShouldSerializeIsRandomUsePlay() => __pbn__IsRandomUsePlay != null;
+ public void ResetIsRandomUsePlay() => __pbn__IsRandomUsePlay = null;
+ private uint? __pbn__IsRandomUsePlay;
+
+ [global::ProtoBuf.ProtoMember(38, Name = @"input_median")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string InputMedian
+ {
+ get => __pbn__InputMedian ?? "";
+ set => __pbn__InputMedian = value;
+ }
+ public bool ShouldSerializeInputMedian() => __pbn__InputMedian != null;
+ public void ResetInputMedian() => __pbn__InputMedian = null;
+ private string __pbn__InputMedian;
+
+ [global::ProtoBuf.ProtoMember(39, Name = @"input_variance")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string InputVariance
+ {
+ get => __pbn__InputVariance ?? "";
+ set => __pbn__InputVariance = value;
+ }
+ public bool ShouldSerializeInputVariance() => __pbn__InputVariance != null;
+ public void ResetInputVariance() => __pbn__InputVariance = null;
+ private string __pbn__InputVariance;
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class StageData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"song_no", IsRequired = true)]
+ public uint SongNo { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"level", IsRequired = true)]
+ public uint Level { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"stage_mode", IsRequired = true)]
+ public uint StageMode { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"play_result", IsRequired = true)]
+ public uint PlayResult { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"play_score", IsRequired = true)]
+ public uint PlayScore { get; set; }
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"score_rate", IsRequired = true)]
+ public uint ScoreRate { get; set; }
+
+ [global::ProtoBuf.ProtoMember(7, Name = @"score_rank", IsRequired = true)]
+ public uint ScoreRank { get; set; }
+
+ [global::ProtoBuf.ProtoMember(8, Name = @"good_cnt", IsRequired = true)]
+ public uint GoodCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(9, Name = @"ok_cnt", IsRequired = true)]
+ public uint OkCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(10, Name = @"ng_cnt", IsRequired = true)]
+ public uint NgCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(11, Name = @"pound_cnt", IsRequired = true)]
+ public uint PoundCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(12, Name = @"combo_cnt", IsRequired = true)]
+ public uint ComboCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(13, Name = @"hit_cnt")]
+ public uint HitCnt
+ {
+ get => __pbn__HitCnt.GetValueOrDefault();
+ set => __pbn__HitCnt = value;
+ }
+ public bool ShouldSerializeHitCnt() => __pbn__HitCnt != null;
+ public void ResetHitCnt() => __pbn__HitCnt = null;
+ private uint? __pbn__HitCnt;
+
+ [global::ProtoBuf.ProtoMember(14, Name = @"option_flg", IsRequired = true)]
+ public byte[] OptionFlg { get; set; }
+
+ [global::ProtoBuf.ProtoMember(15, Name = @"tone_flg", IsRequired = true)]
+ public byte[] ToneFlg { get; set; }
+
+ [global::ProtoBuf.ProtoMember(16, Name = @"notes_position", DataFormat = global::ProtoBuf.DataFormat.ZigZag, IsRequired = true)]
+ public int NotesPosition { get; set; }
+
+ [global::ProtoBuf.ProtoMember(17, Name = @"is_voice_on", IsRequired = true)]
+ public bool IsVoiceOn { get; set; }
+
+ [global::ProtoBuf.ProtoMember(18, Name = @"is_skip_on", IsRequired = true)]
+ public bool IsSkipOn { get; set; }
+
+ [global::ProtoBuf.ProtoMember(19, Name = @"is_skip_use", IsRequired = true)]
+ public bool IsSkipUse { get; set; }
+
+ [global::ProtoBuf.ProtoMember(20, Name = @"ary_challenge_id")]
+ public global::System.Collections.Generic.List AryChallengeIds { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(21, Name = @"ary_user_compe_id")]
+ public global::System.Collections.Generic.List AryUserCompeIds { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(22, Name = @"ary_bng_compe_id")]
+ public global::System.Collections.Generic.List AryBngCompeIds { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(23, Name = @"music_categ", IsRequired = true)]
+ public uint MusicCateg { get; set; }
+
+ [global::ProtoBuf.ProtoMember(24, Name = @"is_favorite", IsRequired = true)]
+ public bool IsFavorite { get; set; }
+
+ [global::ProtoBuf.ProtoMember(25, Name = @"is_recent", IsRequired = true)]
+ public bool IsRecent { get; set; }
+
+ [global::ProtoBuf.ProtoMember(26, Name = @"selected_folder_id", IsRequired = true)]
+ public uint SelectedFolderId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(27, Name = @"is_random_use_stage")]
+ public uint IsRandomUseStage
+ {
+ get => __pbn__IsRandomUseStage.GetValueOrDefault();
+ set => __pbn__IsRandomUseStage = value;
+ }
+ public bool ShouldSerializeIsRandomUseStage() => __pbn__IsRandomUseStage != null;
+ public void ResetIsRandomUseStage() => __pbn__IsRandomUseStage = null;
+ private uint? __pbn__IsRandomUseStage;
+
+ [global::ProtoBuf.ProtoMember(28, Name = @"is_papamama", IsRequired = true)]
+ public bool IsPapamama { get; set; }
+
+ [global::ProtoBuf.ProtoMember(29, Name = @"star_level", IsRequired = true)]
+ public uint StarLevel { get; set; }
+
+ [global::ProtoBuf.ProtoMember(30, Name = @"is_win")]
+ public bool IsWin
+ {
+ get => __pbn__IsWin.GetValueOrDefault();
+ set => __pbn__IsWin = value;
+ }
+ public bool ShouldSerializeIsWin() => __pbn__IsWin != null;
+ public void ResetIsWin() => __pbn__IsWin = null;
+ private bool? __pbn__IsWin;
+
+ [global::ProtoBuf.ProtoMember(31, Name = @"ary_section_data")]
+ public global::System.Collections.Generic.List ArySectionDatas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class ResultcompeData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"compe_id", IsRequired = true)]
+ public uint CompeId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"track_no", IsRequired = true)]
+ public uint TrackNo { get; set; }
+
+ }
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class AiStageSectionData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"is_win", IsRequired = true)]
+ public bool IsWin { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"crown", IsRequired = true)]
+ public uint Crown { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"score", IsRequired = true)]
+ public uint Score { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"good_cnt", IsRequired = true)]
+ public uint GoodCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"ok_cnt", IsRequired = true)]
+ public uint OkCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"ng_cnt", IsRequired = true)]
+ public uint NgCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(7, Name = @"pound_cnt", IsRequired = true)]
+ public uint PoundCnt { get; set; }
+
+ }
+
+ }
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class CostumeData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"costume_1")]
+ public uint Costume1
+ {
+ get => __pbn__Costume1.GetValueOrDefault();
+ set => __pbn__Costume1 = value;
+ }
+ public bool ShouldSerializeCostume1() => __pbn__Costume1 != null;
+ public void ResetCostume1() => __pbn__Costume1 = null;
+ private uint? __pbn__Costume1;
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"costume_2")]
+ public uint Costume2
+ {
+ get => __pbn__Costume2.GetValueOrDefault();
+ set => __pbn__Costume2 = value;
+ }
+ public bool ShouldSerializeCostume2() => __pbn__Costume2 != null;
+ public void ResetCostume2() => __pbn__Costume2 = null;
+ private uint? __pbn__Costume2;
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"costume_3")]
+ public uint Costume3
+ {
+ get => __pbn__Costume3.GetValueOrDefault();
+ set => __pbn__Costume3 = value;
+ }
+ public bool ShouldSerializeCostume3() => __pbn__Costume3 != null;
+ public void ResetCostume3() => __pbn__Costume3 = null;
+ private uint? __pbn__Costume3;
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"costume_4")]
+ public uint Costume4
+ {
+ get => __pbn__Costume4.GetValueOrDefault();
+ set => __pbn__Costume4 = value;
+ }
+ public bool ShouldSerializeCostume4() => __pbn__Costume4 != null;
+ public void ResetCostume4() => __pbn__Costume4 = null;
+ private uint? __pbn__Costume4;
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"costume_5")]
+ public uint Costume5
+ {
+ get => __pbn__Costume5.GetValueOrDefault();
+ set => __pbn__Costume5 = value;
+ }
+ public bool ShouldSerializeCostume5() => __pbn__Costume5 != null;
+ public void ResetCostume5() => __pbn__Costume5 = null;
+ private uint? __pbn__Costume5;
+
+ }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class SelfBestRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"wechat_qr_str", IsRequired = true)]
+ public string WechatQrStr { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"baid", IsRequired = true)]
+ public ulong Baid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"level")]
+ public uint Level
+ {
+ get => __pbn__Level.GetValueOrDefault();
+ set => __pbn__Level = value;
+ }
+ public bool ShouldSerializeLevel() => __pbn__Level != null;
+ public void ResetLevel() => __pbn__Level = null;
+ private uint? __pbn__Level;
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"ary_song_no")]
+ public uint[] ArySongNoes { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class SelfBestResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"level")]
+ public uint Level
+ {
+ get => __pbn__Level.GetValueOrDefault();
+ set => __pbn__Level = value;
+ }
+ public bool ShouldSerializeLevel() => __pbn__Level != null;
+ public void ResetLevel() => __pbn__Level = null;
+ private uint? __pbn__Level;
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"ary_selfbest_score")]
+ public global::System.Collections.Generic.List ArySelfbestScores { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class SelfBestData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"song_no", IsRequired = true)]
+ public uint SongNo { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"self_best_score", IsRequired = true)]
+ public uint SelfBestScore { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"self_best_score_rate", IsRequired = true)]
+ public uint SelfBestScoreRate { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"ura_best_score", IsRequired = true)]
+ public uint UraBestScore { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"ura_best_score_rate", IsRequired = true)]
+ public uint UraBestScoreRate { get; set; }
+
+ }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class CrownsDataRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"wechat_qr_str", IsRequired = true)]
+ public string WechatQrStr { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"baid", IsRequired = true)]
+ public ulong Baid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class CrownsDataResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"crown_flg")]
+ public byte[] CrownFlg
+ {
+ get => __pbn__CrownFlg;
+ set => __pbn__CrownFlg = value;
+ }
+ public bool ShouldSerializeCrownFlg() => __pbn__CrownFlg != null;
+ public void ResetCrownFlg() => __pbn__CrownFlg = null;
+ private byte[] __pbn__CrownFlg;
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"dondaful_crown_flg")]
+ public byte[] DondafulCrownFlg
+ {
+ get => __pbn__DondafulCrownFlg;
+ set => __pbn__DondafulCrownFlg = value;
+ }
+ public bool ShouldSerializeDondafulCrownFlg() => __pbn__DondafulCrownFlg != null;
+ public void ResetDondafulCrownFlg() => __pbn__DondafulCrownFlg = null;
+ private byte[] __pbn__DondafulCrownFlg;
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class ChallengeCompeRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"wechat_qr_str", IsRequired = true)]
+ public string WechatQrStr { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"baid", IsRequired = true)]
+ public ulong Baid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class ChallengeCompeResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"ary_challenge_stat")]
+ public global::System.Collections.Generic.List AryChallengeStats { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"ary_user_compe_stat")]
+ public global::System.Collections.Generic.List AryUserCompeStats { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"ary_bng_compe_stat")]
+ public global::System.Collections.Generic.List AryBngCompeStats { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class CompeData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"compe_id", IsRequired = true)]
+ public uint CompeId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"ary_track_stat")]
+ public global::System.Collections.Generic.List AryTrackStats { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class TracksData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"song_no", IsRequired = true)]
+ public uint SongNo { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"level", IsRequired = true)]
+ public uint Level { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"option_flg", IsRequired = true)]
+ public byte[] OptionFlg { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"high_score", IsRequired = true)]
+ public uint HighScore { get; set; }
+
+ }
+
+ }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetAiDataRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"wechat_qr_str", IsRequired = true)]
+ public string WechatQrStr { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"baid", IsRequired = true)]
+ public ulong Baid { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetAiDataResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"total_winnings")]
+ public uint TotalWinnings
+ {
+ get => __pbn__TotalWinnings.GetValueOrDefault();
+ set => __pbn__TotalWinnings = value;
+ }
+ public bool ShouldSerializeTotalWinnings() => __pbn__TotalWinnings != null;
+ public void ResetTotalWinnings() => __pbn__TotalWinnings = null;
+ private uint? __pbn__TotalWinnings;
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"input_median")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string InputMedian
+ {
+ get => __pbn__InputMedian ?? "";
+ set => __pbn__InputMedian = value;
+ }
+ public bool ShouldSerializeInputMedian() => __pbn__InputMedian != null;
+ public void ResetInputMedian() => __pbn__InputMedian = null;
+ private string __pbn__InputMedian;
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"input_variance")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string InputVariance
+ {
+ get => __pbn__InputVariance ?? "";
+ set => __pbn__InputVariance = value;
+ }
+ public bool ShouldSerializeInputVariance() => __pbn__InputVariance != null;
+ public void ResetInputVariance() => __pbn__InputVariance = null;
+ private string __pbn__InputVariance;
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetAiScoreRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"wechat_qr_str", IsRequired = true)]
+ public string WechatQrStr { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"baid", IsRequired = true)]
+ public ulong Baid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"song_no", IsRequired = true)]
+ public uint SongNo { get; set; }
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"level", IsRequired = true)]
+ public uint Level { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetAiScoreResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"ary_best_section_data")]
+ public global::System.Collections.Generic.List AryBestSectionDatas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class AiBestSectionData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"section_no", IsRequired = true)]
+ public uint SectionIndex { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"crown")]
+ public uint Crown
+ {
+ get => __pbn__Crown.GetValueOrDefault();
+ set => __pbn__Crown = value;
+ }
+ public bool ShouldSerializeCrown() => __pbn__Crown != null;
+ public void ResetCrown() => __pbn__Crown = null;
+ private uint? __pbn__Crown;
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"score")]
+ public uint Score
+ {
+ get => __pbn__Score.GetValueOrDefault();
+ set => __pbn__Score = value;
+ }
+ public bool ShouldSerializeScore() => __pbn__Score != null;
+ public void ResetScore() => __pbn__Score = null;
+ private uint? __pbn__Score;
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"good_cnt", IsRequired = true)]
+ public uint GoodCount { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"ok_cnt", IsRequired = true)]
+ public uint OkCount { get; set; }
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"ng_cnt", IsRequired = true)]
+ public uint MissCount { get; set; }
+
+ [global::ProtoBuf.ProtoMember(7, Name = @"pound_cnt", IsRequired = true)]
+ public uint DrumrollCount { get; set; }
+
+ }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetTokenCountRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"wechat_qr_str", IsRequired = true)]
+ public string WechatQrStr { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"baid", IsRequired = true)]
+ public ulong Baid { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetTokenCountResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"ary_token_count_data")]
+ public global::System.Collections.Generic.List AryTokenCountDatas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class TokenCountData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"token_id", IsRequired = true)]
+ public uint TokenId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"token_count", DataFormat = global::ProtoBuf.DataFormat.ZigZag, IsRequired = true)]
+ public int TokenCount { get; set; }
+
+ }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class AddTokenCountRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"wechat_qr_str", IsRequired = true)]
+ public string WechatQrStr { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"baid", IsRequired = true)]
+ public ulong Baid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"ary_add_token_count_data")]
+ public global::System.Collections.Generic.List AryAddTokenCountDatas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class AddTokenCountData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"token_id", IsRequired = true)]
+ public uint TokenId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"add_token_count", DataFormat = global::ProtoBuf.DataFormat.ZigZag, IsRequired = true)]
+ public int AddTokenCount { get; set; }
+
+ }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class AddTokenCountResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class SongPurchaseRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"wechat_qr_str", IsRequired = true)]
+ public string WechatQrStr { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"baid", IsRequired = true)]
+ public ulong Baid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"song_no", IsRequired = true)]
+ public uint SongNo { get; set; }
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"token_id", IsRequired = true)]
+ public uint TokenId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(7, Name = @"price", IsRequired = true)]
+ public uint Price { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class SongPurchaseResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"token_count", DataFormat = global::ProtoBuf.DataFormat.ZigZag)]
+ public int TokenCount
+ {
+ get => __pbn__TokenCount.GetValueOrDefault();
+ set => __pbn__TokenCount = value;
+ }
+ public bool ShouldSerializeTokenCount() => __pbn__TokenCount != null;
+ public void ResetTokenCount() => __pbn__TokenCount = null;
+ private int? __pbn__TokenCount;
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class HeadClerk2Request : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"ary_play_info")]
+ public global::System.Collections.Generic.List AryPlayInfoes { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class PlayData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"baid", IsRequired = true)]
+ public ulong Baid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"played_at", IsRequired = true)]
+ public string PlayedAt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"is_right", IsRequired = true)]
+ public bool IsRight { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"type")]
+ public uint Type
+ {
+ get => __pbn__Type.GetValueOrDefault();
+ set => __pbn__Type = value;
+ }
+ public bool ShouldSerializeType() => __pbn__Type != null;
+ public void ResetType() => __pbn__Type = null;
+ private uint? __pbn__Type;
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"amount")]
+ public uint Amount
+ {
+ get => __pbn__Amount.GetValueOrDefault();
+ set => __pbn__Amount = value;
+ }
+ public bool ShouldSerializeAmount() => __pbn__Amount != null;
+ public void ResetAmount() => __pbn__Amount = null;
+ private uint? __pbn__Amount;
+
+ }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class HeadClerk2Response : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class RewardcardcheckRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"wechat_qr_str", IsRequired = true)]
+ public string WechatQrStr { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"country_id", IsRequired = true)]
+ public string CountryId { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class RewardcardcheckResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"baid")]
+ public ulong Baid
+ {
+ get => __pbn__Baid.GetValueOrDefault();
+ set => __pbn__Baid = value;
+ }
+ public bool ShouldSerializeBaid() => __pbn__Baid != null;
+ public void ResetBaid() => __pbn__Baid = null;
+ private ulong? __pbn__Baid;
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class RewardexecutionRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"wechat_qr_str", IsRequired = true)]
+ public string WechatQrStr { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"baid", IsRequired = true)]
+ public ulong Baid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"release_song_no")]
+ public uint[] ReleaseSongNoes { get; set; }
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"get_tone_no")]
+ public uint[] GetToneNoes { get; set; }
+
+ [global::ProtoBuf.ProtoMember(7, Name = @"get_costume_no_1")]
+ public uint[] GetCostumeNo1s { get; set; }
+
+ [global::ProtoBuf.ProtoMember(8, Name = @"get_costume_no_2")]
+ public uint[] GetCostumeNo2s { get; set; }
+
+ [global::ProtoBuf.ProtoMember(9, Name = @"get_costume_no_3")]
+ public uint[] GetCostumeNo3s { get; set; }
+
+ [global::ProtoBuf.ProtoMember(10, Name = @"get_costume_no_4")]
+ public uint[] GetCostumeNo4s { get; set; }
+
+ [global::ProtoBuf.ProtoMember(11, Name = @"get_costume_no_5")]
+ public uint[] GetCostumeNo5s { get; set; }
+
+ [global::ProtoBuf.ProtoMember(12, Name = @"get_title_no")]
+ public uint[] GetTitleNoes { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class RewardexecutionResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetDanScoreRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"wechat_qr_str", IsRequired = true)]
+ public string WechatQrStr { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"baid", IsRequired = true)]
+ public ulong Baid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"type", IsRequired = true)]
+ public uint Type { get; set; }
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"dan_id")]
+ public uint[] DanIds { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetDanScoreResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"ary_dan_score_data")]
+ public global::System.Collections.Generic.List AryDanScoreDatas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class DanScoreData : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"dan_id", IsRequired = true)]
+ public uint DanId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"arrival_song_cnt", IsRequired = true)]
+ public uint ArrivalSongCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"soul_gauge_total", IsRequired = true)]
+ public uint SoulGaugeTotal { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"combo_cnt_total", IsRequired = true)]
+ public uint ComboCntTotal { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"ary_dan_score_data_stage")]
+ public global::System.Collections.Generic.List AryDanScoreDataStages { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class DanScoreDataStage : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"play_score", IsRequired = true)]
+ public uint PlayScore { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"good_cnt", IsRequired = true)]
+ public uint GoodCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"ok_cnt", IsRequired = true)]
+ public uint OkCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"ng_cnt", IsRequired = true)]
+ public uint NgCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"pound_cnt", IsRequired = true)]
+ public uint PoundCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"hit_cnt", IsRequired = true)]
+ public uint HitCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(7, Name = @"combo_cnt", IsRequired = true)]
+ public uint ComboCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(8, Name = @"high_score")]
+ public uint HighScore
+ {
+ get => __pbn__HighScore.GetValueOrDefault();
+ set => __pbn__HighScore = value;
+ }
+ public bool ShouldSerializeHighScore() => __pbn__HighScore != null;
+ public void ResetHighScore() => __pbn__HighScore = null;
+ private uint? __pbn__HighScore;
+
+ }
+
+ }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class RewardItemRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"wechat_qr_str", IsRequired = true)]
+ public string WechatQrStr { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"baid", IsRequired = true)]
+ public ulong Baid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"release_song_no")]
+ public uint[] ReleaseSongNoes { get; set; }
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"ura_release_song_no")]
+ public uint[] UraReleaseSongNoes { get; set; }
+
+ [global::ProtoBuf.ProtoMember(7, Name = @"get_tone_no")]
+ public uint[] GetToneNoes { get; set; }
+
+ [global::ProtoBuf.ProtoMember(8, Name = @"get_costume_no_1")]
+ public uint[] GetCostumeNo1s { get; set; }
+
+ [global::ProtoBuf.ProtoMember(9, Name = @"get_costume_no_2")]
+ public uint[] GetCostumeNo2s { get; set; }
+
+ [global::ProtoBuf.ProtoMember(10, Name = @"get_costume_no_3")]
+ public uint[] GetCostumeNo3s { get; set; }
+
+ [global::ProtoBuf.ProtoMember(11, Name = @"get_costume_no_4")]
+ public uint[] GetCostumeNo4s { get; set; }
+
+ [global::ProtoBuf.ProtoMember(12, Name = @"get_costume_no_5")]
+ public uint[] GetCostumeNo5s { get; set; }
+
+ [global::ProtoBuf.ProtoMember(13, Name = @"get_title_no")]
+ public uint[] GetTitleNoes { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class RewardItemResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetScoreRankRequest : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"wechat_qr_str", IsRequired = true)]
+ public string WechatQrStr { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"baid", IsRequired = true)]
+ public ulong Baid { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+}
+
+[global::ProtoBuf.ProtoContract()]
+public partial class GetScoreRankResponse : global::ProtoBuf.IExtensible
+{
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"iki_score_rank_flg")]
+ public byte[] IkiScoreRankFlg
+ {
+ get => __pbn__IkiScoreRankFlg;
+ set => __pbn__IkiScoreRankFlg = value;
+ }
+ public bool ShouldSerializeIkiScoreRankFlg() => __pbn__IkiScoreRankFlg != null;
+ public void ResetIkiScoreRankFlg() => __pbn__IkiScoreRankFlg = null;
+ private byte[] __pbn__IkiScoreRankFlg;
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"miyabi_score_rank_flg")]
+ public byte[] MiyabiScoreRankFlg
+ {
+ get => __pbn__MiyabiScoreRankFlg;
+ set => __pbn__MiyabiScoreRankFlg = value;
+ }
+ public bool ShouldSerializeMiyabiScoreRankFlg() => __pbn__MiyabiScoreRankFlg != null;
+ public void ResetMiyabiScoreRankFlg() => __pbn__MiyabiScoreRankFlg = null;
+ private byte[] __pbn__MiyabiScoreRankFlg;
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"kiwami_score_rank_flg")]
+ public byte[] KiwamiScoreRankFlg
+ {
+ get => __pbn__KiwamiScoreRankFlg;
+ set => __pbn__KiwamiScoreRankFlg = value;
+ }
+ public bool ShouldSerializeKiwamiScoreRankFlg() => __pbn__KiwamiScoreRankFlg != null;
+ public void ResetKiwamiScoreRankFlg() => __pbn__KiwamiScoreRankFlg = null;
+ private byte[] __pbn__KiwamiScoreRankFlg;
+
+}
+
+#pragma warning restore CS0612, CS0618, CS1591, CS3021, IDE0079, IDE1006, RCS1036, RCS1057, RCS1085, RCS1192
+#endregion
diff --git a/Server/Models/3906/Game.cs b/Server/Models/3906/Game.cs
new file mode 100644
index 0000000..0a6e213
--- /dev/null
+++ b/Server/Models/3906/Game.cs
@@ -0,0 +1,3381 @@
+//
+// This file was generated by a tool; you should avoid making direct changes.
+// Consider using 'partial classes' to extend these types
+// Input: my.proto
+//
+
+#region Designer generated code
+#pragma warning disable CS0612, CS0618, CS1591, CS3021, IDE0079, IDE1006, RCS1036, RCS1057, RCS1085, RCS1192
+namespace Server.Models.v3906
+{
+ [global::ProtoBuf.ProtoContract()]
+ public partial class HeartBeatRequest : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ }
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class HeartBeatResponse : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"com_svr_stat", IsRequired = true)]
+ public uint ComSvrStat { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"game_svr_stat", IsRequired = true)]
+ public uint GameSvrStat { get; set; }
+
+ }
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class BookKeepingRequest : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"update_date", IsRequired = true)]
+ public string UpdateDate { get; set; }
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"credit_cost_1", IsRequired = true)]
+ public uint CreditCost1 { get; set; }
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"credit_cost_2", IsRequired = true)]
+ public uint CreditCost2 { get; set; }
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"credit_songs_1", IsRequired = true)]
+ public uint CreditSongs1 { get; set; }
+
+ [global::ProtoBuf.ProtoMember(7, Name = @"credit_songs_2", IsRequired = true)]
+ public uint CreditSongs2 { get; set; }
+
+ [global::ProtoBuf.ProtoMember(8, Name = @"all_play_cnt", IsRequired = true)]
+ public uint AllPlayCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(9, Name = @"service_sw_cnt", IsRequired = true)]
+ public uint ServiceSwCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(10, Name = @"free_play_cnt", IsRequired = true)]
+ public uint FreePlayCnt { get; set; }
+
+ [global::ProtoBuf.ProtoMember(11, Name = @"error_log")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string ErrorLog
+ {
+ get => __pbn__ErrorLog ?? "";
+ set => __pbn__ErrorLog = value;
+ }
+ public bool ShouldSerializeErrorLog() => __pbn__ErrorLog != null;
+ public void ResetErrorLog() => __pbn__ErrorLog = null;
+ private string __pbn__ErrorLog;
+
+ }
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class BookKeepingResponse : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ }
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class InitialdatacheckRequest : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"chassis_id", IsRequired = true)]
+ public string ChassisId { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"shop_id", IsRequired = true)]
+ public string ShopId { get; set; }
+
+ }
+
+ [global::ProtoBuf.ProtoContract()]
+ public partial class InitialdatacheckResponse : global::ProtoBuf.IExtensible
+ {
+ private global::ProtoBuf.IExtension __pbn__extensionData;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ => global::ProtoBuf.Extensible.GetExtensionObject(ref __pbn__extensionData, createIfMissing);
+
+ [global::ProtoBuf.ProtoMember(1, Name = @"result", IsRequired = true)]
+ public uint Result { get; set; }
+
+ [global::ProtoBuf.ProtoMember(2, Name = @"default_song_flg")]
+ public byte[] DefaultSongFlg
+ {
+ get => __pbn__DefaultSongFlg;
+ set => __pbn__DefaultSongFlg = value;
+ }
+ public bool ShouldSerializeDefaultSongFlg() => __pbn__DefaultSongFlg != null;
+ public void ResetDefaultSongFlg() => __pbn__DefaultSongFlg = null;
+ private byte[] __pbn__DefaultSongFlg;
+
+ [global::ProtoBuf.ProtoMember(3, Name = @"achievement_song_bit")]
+ public byte[] AchievementSongBit
+ {
+ get => __pbn__AchievementSongBit;
+ set => __pbn__AchievementSongBit = value;
+ }
+ public bool ShouldSerializeAchievementSongBit() => __pbn__AchievementSongBit != null;
+ public void ResetAchievementSongBit() => __pbn__AchievementSongBit = null;
+ private byte[] __pbn__AchievementSongBit;
+
+ [global::ProtoBuf.ProtoMember(4, Name = @"ura_release_bit")]
+ public byte[] UraReleaseBit
+ {
+ get => __pbn__UraReleaseBit;
+ set => __pbn__UraReleaseBit = value;
+ }
+ public bool ShouldSerializeUraReleaseBit() => __pbn__UraReleaseBit != null;
+ public void ResetUraReleaseBit() => __pbn__UraReleaseBit = null;
+ private byte[] __pbn__UraReleaseBit;
+
+ [global::ProtoBuf.ProtoMember(5, Name = @"song_introduction_end_datetime")]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string SongIntroductionEndDatetime
+ {
+ get => __pbn__SongIntroductionEndDatetime ?? "";
+ set => __pbn__SongIntroductionEndDatetime = value;
+ }
+ public bool ShouldSerializeSongIntroductionEndDatetime() => __pbn__SongIntroductionEndDatetime != null;
+ public void ResetSongIntroductionEndDatetime() => __pbn__SongIntroductionEndDatetime = null;
+ private string __pbn__SongIntroductionEndDatetime;
+
+ [global::ProtoBuf.ProtoMember(6, Name = @"ary_movie_info")]
+ public global::System.Collections.Generic.List AryMovieInfoes { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(7, Name = @"ary_ai_event_data")]
+ public global::System.Collections.Generic.List AryAiEventDatas { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(8, Name = @"ary_chassis_function_id")]
+ public uint[] AryChassisFunctionIds { get; set; }
+
+ [global::ProtoBuf.ProtoMember(9, Name = @"ary_verup_no_data_1")]
+ public global::System.Collections.Generic.List AryVerupNoData1s { get; } = new global::System.Collections.Generic.List();
+
+ [global::ProtoBuf.ProtoMember(10, Name = @"ary_verup_no_data_2")]
+ public global::System.Collections.Generic.List AryVerupNoData2s { get; } = new global::System.Collections.Generic.List