diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/GameCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/GameCallbacks.cs index 331a91a3..6f62070a 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/GameCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/GameCallbacks.cs @@ -62,7 +62,7 @@ public class GameCallbacks( /// Handle client/game/config /// /// - public ValueTask GetGameConfig(string url, GameEmptyCrcRequestData info, MongoId sessionID) + public ValueTask GetGameConfig(string url, EmptyRequestData info, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(gameController.GetGameConfig(sessionID))); } diff --git a/Libraries/SPTarkov.Server.Core/DI/Router.cs b/Libraries/SPTarkov.Server.Core/DI/Router.cs index 5fb83f01..cbdd02f1 100644 --- a/Libraries/SPTarkov.Server.Core/DI/Router.cs +++ b/Libraries/SPTarkov.Server.Core/DI/Router.cs @@ -52,7 +52,7 @@ public abstract class StaticRouter(JsonUtil jsonUtil, IEnumerable r info = (IRequestData?)jsonUtil.Deserialize(body, type); } - return await action.action(url, info, sessionId, output); + return await action.action(url, info ?? new EmptyRequestData(), sessionId, output); } protected override IEnumerable GetHandledRoutes() @@ -73,7 +73,7 @@ public abstract class DynamicRouter(JsonUtil jsonUtil, IEnumerable info = (IRequestData?)jsonUtil.Deserialize(body, type); } - return await action.action(url, info, sessionID, output); + return await action.action(url, info ?? new EmptyRequestData(), sessionID, output); } protected override IEnumerable GetHandledRoutes() @@ -102,5 +102,8 @@ public abstract class SaveLoadRouter : Router public record HandledRoute(string route, bool dynamic); -public record RouteAction(string url, Func> action, Type? bodyType = null); -//public action: (url: string, info: any, sessionID: string, output: string) => Promise, +public record RouteAction(string url, Func> action, Type? bodyType = null); + +public record RouteAction(string url, Func> typedAction) + : RouteAction(url, async (url, info, sessionId, output) => await typedAction(url, (TRequest)info, sessionId, output), typeof(TRequest)) + where TRequest : class; diff --git a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/BotDynamicRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/BotDynamicRouter.cs index b4ccd755..afa4d500 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/BotDynamicRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/BotDynamicRouter.cs @@ -7,33 +7,29 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Dynamic; [Injectable] -public class BotDynamicRouter : DynamicRouter -{ - public BotDynamicRouter(JsonUtil jsonUtil, BotCallbacks botCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/singleplayer/settings/bot/limit/", - async (url, info, sessionID, output) => await botCallbacks.GetBotLimit(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/singleplayer/settings/bot/difficulty/", - async (url, info, sessionID, output) => await botCallbacks.GetBotDifficulty(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/singleplayer/settings/bot/difficulties", - async (url, info, sessionID, output) => - await botCallbacks.GetAllBotDifficulties(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/singleplayer/settings/bot/maxCap", - async (url, info, sessionID, output) => await botCallbacks.GetBotCap(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/singleplayer/settings/bot/getBotBehaviours/", - async (url, info, sessionID, output) => await botCallbacks.GetBotBehaviours() - ), - ] - ) { } -} +public class BotDynamicRouter(JsonUtil jsonUtil, BotCallbacks botCallbacks) + : DynamicRouter( + jsonUtil, + [ + new RouteAction( + "/singleplayer/settings/bot/limit/", + async (url, info, sessionID, output) => await botCallbacks.GetBotLimit(url, info, sessionID) + ), + new RouteAction( + "/singleplayer/settings/bot/difficulty/", + async (url, info, sessionID, output) => await botCallbacks.GetBotDifficulty(url, info, sessionID) + ), + new RouteAction( + "/singleplayer/settings/bot/difficulties", + async (url, info, sessionID, output) => await botCallbacks.GetAllBotDifficulties(url, info, sessionID) + ), + new RouteAction( + "/singleplayer/settings/bot/maxCap", + async (url, info, sessionID, output) => await botCallbacks.GetBotCap(url, info, sessionID) + ), + new RouteAction( + "/singleplayer/settings/bot/getBotBehaviours/", + async (url, info, sessionID, output) => await botCallbacks.GetBotBehaviours() + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/BundleDynamicRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/BundleDynamicRouter.cs index 8c3e6f99..1e0f4ea0 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/BundleDynamicRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/BundleDynamicRouter.cs @@ -7,16 +7,13 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Dynamic; [Injectable] -public class BundleDynamicRouter : DynamicRouter -{ - public BundleDynamicRouter(JsonUtil jsonUtil, BundleCallbacks bundleCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/files/bundle", - async (url, info, sessionID, output) => await bundleCallbacks.GetBundle(url, info as EmptyRequestData, sessionID) - ), - ] - ) { } -} +public class BundleDynamicRouter(JsonUtil jsonUtil, BundleCallbacks bundleCallbacks) + : DynamicRouter( + jsonUtil, + [ + new RouteAction( + "/files/bundle", + async (url, info, sessionID, output) => await bundleCallbacks.GetBundle(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/CustomizationDynamicRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/CustomizationDynamicRouter.cs index 8508014d..fd5da934 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/CustomizationDynamicRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/CustomizationDynamicRouter.cs @@ -7,17 +7,13 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Dynamic; [Injectable] -public class CustomizationDynamicRouter : DynamicRouter -{ - public CustomizationDynamicRouter(JsonUtil jsonUtil, CustomizationCallbacks customizationCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/trading/customization/", - async (url, info, sessionID, output) => - await customizationCallbacks.GetTraderSuits(url, info as EmptyRequestData, sessionID) - ), - ] - ) { } -} +public class CustomizationDynamicRouter(JsonUtil jsonUtil, CustomizationCallbacks customizationCallbacks) + : DynamicRouter( + jsonUtil, + [ + new RouteAction( + "/client/trading/customization/", + async (url, info, sessionID, output) => await customizationCallbacks.GetTraderSuits(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/DataDynamicRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/DataDynamicRouter.cs index de3692fe..775daf4a 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/DataDynamicRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/DataDynamicRouter.cs @@ -7,24 +7,21 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Dynamic; [Injectable] -public class DataDynamicRouter : DynamicRouter -{ - public DataDynamicRouter(JsonUtil jsonUtil, DataCallbacks dataCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/menu/locale/", - async (url, info, sessionID, output) => await dataCallbacks.GetLocalesMenu(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/locale/", - async (url, info, sessionID, output) => await dataCallbacks.GetLocalesGlobal(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/items/prices/", - async (url, info, sessionID, output) => await dataCallbacks.GetItemPrices(url, info as EmptyRequestData, sessionID) - ), - ] - ) { } -} +public class DataDynamicRouter(JsonUtil jsonUtil, DataCallbacks dataCallbacks) + : DynamicRouter( + jsonUtil, + [ + new RouteAction( + "/client/menu/locale/", + async (url, info, sessionID, output) => await dataCallbacks.GetLocalesMenu(url, info, sessionID) + ), + new RouteAction( + "/client/locale/", + async (url, info, sessionID, output) => await dataCallbacks.GetLocalesGlobal(url, info, sessionID) + ), + new RouteAction( + "/client/items/prices/", + async (url, info, sessionID, output) => await dataCallbacks.GetItemPrices(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/HttpDynamicRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/HttpDynamicRouter.cs index a3b97361..13ec2e9f 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/HttpDynamicRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/HttpDynamicRouter.cs @@ -1,19 +1,17 @@ using SPTarkov.DI.Annotations; using SPTarkov.Server.Core.DI; +using SPTarkov.Server.Core.Models.Eft.Common; using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Dynamic; [Injectable] -public class HttpDynamicRouter : DynamicRouter -{ - public HttpDynamicRouter(ImageRouter imageRouter, JsonUtil jsonUtil) - : base( - jsonUtil, - [ - new RouteAction(".jpg", async (_, _, _, _) => await imageRouter.GetImage()), - new RouteAction(".png", async (_, _, _, _) => await imageRouter.GetImage()), - new RouteAction(".ico", async (_, _, _, _) => await imageRouter.GetImage()), - ] - ) { } -} +public class HttpDynamicRouter(ImageRouter imageRouter, JsonUtil jsonUtil) + : DynamicRouter( + jsonUtil, + [ + new RouteAction(".jpg", async (_, _, _, _) => await imageRouter.GetImage()), + new RouteAction(".png", async (_, _, _, _) => await imageRouter.GetImage()), + new RouteAction(".ico", async (_, _, _, _) => await imageRouter.GetImage()), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/InraidDynamicRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/InraidDynamicRouter.cs index 5af30458..2f2a4b64 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/InraidDynamicRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/InraidDynamicRouter.cs @@ -7,21 +7,17 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Dynamic; [Injectable] -public class InraidDynamicRouter : DynamicRouter +public class InraidDynamicRouter(JsonUtil jsonUtil, InraidCallbacks inraidCallbacks) + : DynamicRouter( + jsonUtil, + [ + new RouteAction( + "/client/location/getLocalloot", + async (url, info, sessionID, output) => await inraidCallbacks.RegisterPlayer(url, info, sessionID) + ), + ] + ) { - public InraidDynamicRouter(JsonUtil jsonUtil, InraidCallbacks inraidCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/location/getLocalloot", - async (url, info, sessionID, output) => - await inraidCallbacks.RegisterPlayer(url, info as RegisterPlayerRequestData, sessionID), - typeof(RegisterPlayerRequestData) - ), - ] - ) { } - public override string GetTopLevelRoute() { return "spt-name"; diff --git a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/LocationDynamicRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/LocationDynamicRouter.cs index eefc7560..b813506c 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/LocationDynamicRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/LocationDynamicRouter.cs @@ -5,11 +5,8 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Dynamic; [Injectable] -public class LocationDynamicRouter : DynamicRouter +public class LocationDynamicRouter(JsonUtil jsonUtil) : DynamicRouter(jsonUtil, []) { - public LocationDynamicRouter(JsonUtil jsonUtil) - : base(jsonUtil, []) { } - public override string GetTopLevelRoute() { return "spt-loot"; diff --git a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/NotifierDynamicRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/NotifierDynamicRouter.cs index aa3187e8..af280962 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/NotifierDynamicRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/NotifierDynamicRouter.cs @@ -1,27 +1,31 @@ using SPTarkov.DI.Annotations; using SPTarkov.Server.Core.Callbacks; using SPTarkov.Server.Core.DI; +using SPTarkov.Server.Core.Models.Eft.Common; using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Dynamic; [Injectable] -public class NotifierDynamicRouter : DynamicRouter -{ - public NotifierDynamicRouter(JsonUtil jsonUtil, NotifierCallbacks notifierCallbacks) - : base( - jsonUtil, - [ - new RouteAction("/?last_id", async (url, info, sessionID, _) => await notifierCallbacks.Notify(url, info, sessionID)), - new RouteAction("/notifierServer", async (url, info, sessionID, _) => await notifierCallbacks.Notify(url, info, sessionID)), - new RouteAction( - "/push/notifier/get/", - async (url, info, sessionID, _) => await notifierCallbacks.GetNotifier(url, info, sessionID) - ), - new RouteAction( - "/push/notifier/get/", - async (url, info, sessionID, _) => await notifierCallbacks.GetNotifier(url, info, sessionID) - ), - ] - ) { } -} +public class NotifierDynamicRouter(JsonUtil jsonUtil, NotifierCallbacks notifierCallbacks) + : DynamicRouter( + jsonUtil, + [ + new RouteAction( + "/?last_id", + async (url, info, sessionID, _) => await notifierCallbacks.Notify(url, info, sessionID) + ), + new RouteAction( + "/notifierServer", + async (url, info, sessionID, _) => await notifierCallbacks.Notify(url, info, sessionID) + ), + new RouteAction( + "/push/notifier/get/", + async (url, info, sessionID, _) => await notifierCallbacks.GetNotifier(url, info, sessionID) + ), + new RouteAction( + "/push/notifier/get/", + async (url, info, sessionID, _) => await notifierCallbacks.GetNotifier(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/TraderDynamicRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/TraderDynamicRouter.cs index 075c424e..34e0a75c 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/TraderDynamicRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/TraderDynamicRouter.cs @@ -7,20 +7,17 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Dynamic; [Injectable] -public class TraderDynamicRouter : DynamicRouter -{ - public TraderDynamicRouter(JsonUtil jsonUtil, TraderCallbacks traderCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/trading/api/getTrader/", - async (url, info, sessionID, output) => await traderCallbacks.GetTrader(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/trading/api/getTraderAssort/", - async (url, info, sessionID, output) => await traderCallbacks.GetAssort(url, info as EmptyRequestData, sessionID) - ), - ] - ) { } -} +public class TraderDynamicRouter(JsonUtil jsonUtil, TraderCallbacks traderCallbacks) + : DynamicRouter( + jsonUtil, + [ + new RouteAction( + "/client/trading/api/getTrader/", + async (url, info, sessionID, output) => await traderCallbacks.GetTrader(url, info, sessionID) + ), + new RouteAction( + "/client/trading/api/getTraderAssort/", + async (url, info, sessionID, output) => await traderCallbacks.GetAssort(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/HttpRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/HttpRouter.cs index 24cb25cd..a1c29ea3 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/HttpRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/HttpRouter.cs @@ -6,41 +6,16 @@ using SPTarkov.Server.Core.Models.Common; namespace SPTarkov.Server.Core.Routers; [Injectable] -public class HttpRouter +public class HttpRouter(IEnumerable staticRouters, IEnumerable dynamicRoutes) { - protected readonly IEnumerable _dynamicRoutes; - protected readonly IEnumerable _staticRouters; - - public HttpRouter(IEnumerable staticRouters, IEnumerable dynamicRoutes) - { - _staticRouters = staticRouters; - _dynamicRoutes = dynamicRoutes; - } - - /* - protected groupBy(list: T[], keyGetter: (t: T) => string): Map { - const map: Map = new Map(); - for (const item of list) { - const key = keyGetter(item); - const collection = map.get(key); - if (!collection) { - map.set(key, [item]); - } else { - collection.push(item); - } - } - return map; - } - */ - public async ValueTask GetResponse(HttpRequest req, MongoId sessionID, string? body) { var wrapper = new ResponseWrapper(""); - var handled = await HandleRoute(req, sessionID, wrapper, _staticRouters, false, body); + var handled = await HandleRoute(req, sessionID, wrapper, staticRouters, false, body); if (!handled) { - await HandleRoute(req, sessionID, wrapper, _dynamicRoutes, true, body); + await HandleRoute(req, sessionID, wrapper, dynamicRoutes, true, body); } return wrapper.Output; diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/AchievementStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/AchievementStaticRouter.cs index e10fdd95..db671afc 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/AchievementStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/AchievementStaticRouter.cs @@ -7,21 +7,17 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class AchievementStaticRouter : StaticRouter -{ - public AchievementStaticRouter(JsonUtil jsonUtil, AchievementCallbacks achievementCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/achievement/list", - async (url, info, sessionID, output) => - await achievementCallbacks.GetAchievements(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/achievement/statistic", - async (url, info, sessionID, output) => await achievementCallbacks.Statistic(url, info as EmptyRequestData, sessionID) - ), - ] - ) { } -} +public class AchievementStaticRouter(JsonUtil jsonUtil, AchievementCallbacks achievementCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/client/achievement/list", + async (url, info, sessionID, output) => await achievementCallbacks.GetAchievements(url, info, sessionID) + ), + new RouteAction( + "/client/achievement/statistic", + async (url, info, sessionID, output) => await achievementCallbacks.Statistic(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/BotStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/BotStaticRouter.cs index 79ec50dc..c7bbd109 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/BotStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/BotStaticRouter.cs @@ -7,18 +7,13 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class BotStaticRouter : StaticRouter -{ - public BotStaticRouter(JsonUtil jsonUtil, BotCallbacks botCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/game/bot/generate", - async (url, info, sessionID, outout) => - await botCallbacks.GenerateBots(url, info as GenerateBotsRequestData, sessionID), - typeof(GenerateBotsRequestData) - ), - ] - ) { } -} +public class BotStaticRouter(JsonUtil jsonUtil, BotCallbacks botCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/client/game/bot/generate", + async (url, info, sessionID, outout) => await botCallbacks.GenerateBots(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/BuildStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/BuildStaticRouter.cs index f5624f84..d1cbcc34 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/BuildStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/BuildStaticRouter.cs @@ -9,40 +9,29 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class BuildStaticRouter : StaticRouter -{ - public BuildStaticRouter(JsonUtil jsonUtil, BuildsCallbacks buildsCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/builds/list", - async (url, info, sessionID, output) => await buildsCallbacks.GetBuilds(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/builds/magazine/save", - async (url, info, sessionID, output) => - await buildsCallbacks.CreateMagazineTemplate(url, info as SetMagazineRequest, sessionID), - typeof(SetMagazineRequest) - ), - new RouteAction( - "/client/builds/weapon/save", - async (url, info, sessionID, output) => - await buildsCallbacks.SetWeapon(url, info as PresetBuildActionRequestData, sessionID), - typeof(PresetBuildActionRequestData) - ), - new RouteAction( - "/client/builds/equipment/save", - async (url, info, sessionID, output) => - await buildsCallbacks.SetEquipment(url, info as PresetBuildActionRequestData, sessionID), - typeof(PresetBuildActionRequestData) - ), - new RouteAction( - "/client/builds/delete", - async (url, info, sessionID, output) => - await buildsCallbacks.DeleteBuild(url, info as RemoveBuildRequestData, sessionID), - typeof(RemoveBuildRequestData) - ), - ] - ) { } -} +public class BuildStaticRouter(JsonUtil jsonUtil, BuildsCallbacks buildsCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/client/builds/list", + async (url, info, sessionID, output) => await buildsCallbacks.GetBuilds(url, info, sessionID) + ), + new RouteAction( + "/client/builds/magazine/save", + async (url, info, sessionID, output) => await buildsCallbacks.CreateMagazineTemplate(url, info, sessionID) + ), + new RouteAction( + "/client/builds/weapon/save", + async (url, info, sessionID, output) => await buildsCallbacks.SetWeapon(url, info, sessionID) + ), + new RouteAction( + "/client/builds/equipment/save", + async (url, info, sessionID, output) => await buildsCallbacks.SetEquipment(url, info, sessionID) + ), + new RouteAction( + "/client/builds/delete", + async (url, info, sessionID, output) => await buildsCallbacks.DeleteBuild(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/BundleStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/BundleStaticRouter.cs index 92a7f69a..cea2ed8e 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/BundleStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/BundleStaticRouter.cs @@ -7,16 +7,13 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class BundleStaticRouter : StaticRouter -{ - public BundleStaticRouter(JsonUtil jsonUtil, BundleCallbacks bundleCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/singleplayer/bundles", - async (url, info, sessionID, output) => await bundleCallbacks.GetBundles(url, info as EmptyRequestData, sessionID) - ), - ] - ) { } -} +public class BundleStaticRouter(JsonUtil jsonUtil, BundleCallbacks bundleCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/singleplayer/bundles", + async (url, info, sessionID, output) => await bundleCallbacks.GetBundles(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/ClientLogStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/ClientLogStaticRouter.cs index 7593af4d..2791e786 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/ClientLogStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/ClientLogStaticRouter.cs @@ -1,28 +1,28 @@ using SPTarkov.DI.Annotations; using SPTarkov.Server.Core.Callbacks; using SPTarkov.Server.Core.DI; +using SPTarkov.Server.Core.Models.Eft.Common; using SPTarkov.Server.Core.Models.Spt.Logging; using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class ClientLogStaticRouter : StaticRouter -{ - public ClientLogStaticRouter(JsonUtil jsonUtil, ClientLogCallbacks clientLogCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/singleplayer/log", - async (url, info, sessionID, output) => await clientLogCallbacks.ClientLog(url, info as ClientLogRequest, sessionID), - typeof(ClientLogRequest) - ), - new RouteAction("/singleplayer/release", async (url, info, sessionID, output) => await clientLogCallbacks.ReleaseNotes()), - new RouteAction( - "/singleplayer/enableBSGlogging", - async (url, info, sessionID, output) => await clientLogCallbacks.BsgLogging() - ), - ] - ) { } -} +public class ClientLogStaticRouter(JsonUtil jsonUtil, ClientLogCallbacks clientLogCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/singleplayer/log", + async (url, info, sessionID, output) => await clientLogCallbacks.ClientLog(url, info, sessionID) + ), + new RouteAction( + "/singleplayer/release", + async (url, info, sessionID, output) => await clientLogCallbacks.ReleaseNotes() + ), + new RouteAction( + "/singleplayer/enableBSGlogging", + async (url, info, sessionID, output) => await clientLogCallbacks.BsgLogging() + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/CustomizationStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/CustomizationStaticRouter.cs index fc67423f..0d3821a9 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/CustomizationStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/CustomizationStaticRouter.cs @@ -7,27 +7,21 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class CustomizationStaticRouter : StaticRouter -{ - public CustomizationStaticRouter(JsonUtil jsonUtil, CustomizationCallbacks customizationCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/trading/customization/storage", - async (url, info, sessionID, output) => - await customizationCallbacks.GetCustomisationUnlocks(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/hideout/customization/offer/list", - async (url, info, sessionID, output) => - await customizationCallbacks.GetHideoutCustomisation(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/customization/storage", - async (url, info, sessionID, output) => - await customizationCallbacks.GetStorage(url, info as EmptyRequestData, sessionID) - ), - ] - ) { } -} +public class CustomizationStaticRouter(JsonUtil jsonUtil, CustomizationCallbacks customizationCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/client/trading/customization/storage", + async (url, info, sessionID, output) => await customizationCallbacks.GetCustomisationUnlocks(url, info, sessionID) + ), + new RouteAction( + "/client/hideout/customization/offer/list", + async (url, info, sessionID, output) => await customizationCallbacks.GetHideoutCustomisation(url, info, sessionID) + ), + new RouteAction( + "/client/customization/storage", + async (url, info, sessionID, output) => await customizationCallbacks.GetStorage(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/DataStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/DataStaticRouter.cs index e4a6bd21..d98c2b49 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/DataStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/DataStaticRouter.cs @@ -7,60 +7,53 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class DataStaticRouter : StaticRouter -{ - public DataStaticRouter(JsonUtil jsonUtil, DataCallbacks dataCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/settings", - async (url, info, sessionID, output) => await dataCallbacks.GetSettings(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/globals", - async (url, info, sessionID, output) => await dataCallbacks.GetGlobals(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/items", - async (url, info, sessionID, output) => await dataCallbacks.GetTemplateItems(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/handbook/templates", - async (url, info, sessionID, output) => - await dataCallbacks.GetTemplateHandbook(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/customization", - async (url, info, sessionID, output) => await dataCallbacks.GetTemplateSuits(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/account/customization", - async (url, info, sessionID, output) => - await dataCallbacks.GetTemplateCharacter(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/hideout/production/recipes", - async (url, info, sessionID, output) => - await dataCallbacks.GetHideoutProduction(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/hideout/settings", - async (url, info, sessionID, output) => await dataCallbacks.GetHideoutSettings(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/hideout/areas", - async (url, info, sessionID, output) => await dataCallbacks.GetHideoutAreas(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/languages", - async (url, info, sessionID, output) => - await dataCallbacks.GetLocalesLanguages(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/hideout/qte/list", - async (url, info, sessionID, output) => await dataCallbacks.GetQteList(url, info as EmptyRequestData, sessionID) - ), - ] - ) { } -} +public class DataStaticRouter(JsonUtil jsonUtil, DataCallbacks dataCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/client/settings", + async (url, info, sessionID, output) => await dataCallbacks.GetSettings(url, info, sessionID) + ), + new RouteAction( + "/client/globals", + async (url, info, sessionID, output) => await dataCallbacks.GetGlobals(url, info, sessionID) + ), + new RouteAction( + "/client/items", + async (url, info, sessionID, output) => await dataCallbacks.GetTemplateItems(url, info, sessionID) + ), + new RouteAction( + "/client/handbook/templates", + async (url, info, sessionID, output) => await dataCallbacks.GetTemplateHandbook(url, info, sessionID) + ), + new RouteAction( + "/client/customization", + async (url, info, sessionID, output) => await dataCallbacks.GetTemplateSuits(url, info, sessionID) + ), + new RouteAction( + "/client/account/customization", + async (url, info, sessionID, output) => await dataCallbacks.GetTemplateCharacter(url, info, sessionID) + ), + new RouteAction( + "/client/hideout/production/recipes", + async (url, info, sessionID, output) => await dataCallbacks.GetHideoutProduction(url, info, sessionID) + ), + new RouteAction( + "/client/hideout/settings", + async (url, info, sessionID, output) => await dataCallbacks.GetHideoutSettings(url, info, sessionID) + ), + new RouteAction( + "/client/hideout/areas", + async (url, info, sessionID, output) => await dataCallbacks.GetHideoutAreas(url, info, sessionID) + ), + new RouteAction( + "/client/languages", + async (url, info, sessionID, output) => await dataCallbacks.GetLocalesLanguages(url, info, sessionID) + ), + new RouteAction( + "/client/hideout/qte/list", + async (url, info, sessionID, output) => await dataCallbacks.GetQteList(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/DialogStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/DialogStaticRouter.cs index 537bc6bb..79d7f600 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/DialogStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/DialogStaticRouter.cs @@ -9,157 +9,113 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class DialogStaticRouter : StaticRouter -{ - public DialogStaticRouter(JsonUtil jsonUtil, DialogueCallbacks dialogueCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/chatServer/list", - async (url, info, sessionID, output) => - await dialogueCallbacks.GetChatServerList(url, info as GetChatServerListRequestData, sessionID), - typeof(GetChatServerListRequestData) - ), - new RouteAction( - "/client/mail/dialog/list", - async (url, info, sessionID, output) => - await dialogueCallbacks.GetMailDialogList(url, info as GetMailDialogListRequestData, sessionID), - typeof(GetMailDialogListRequestData) - ), - new RouteAction( - "/client/mail/dialog/view", - async (url, info, sessionID, output) => - await dialogueCallbacks.GetMailDialogView(url, info as GetMailDialogViewRequestData, sessionID), - typeof(GetMailDialogViewRequestData) - ), - new RouteAction( - "/client/mail/dialog/info", - async (url, info, sessionID, output) => - await dialogueCallbacks.GetMailDialogInfo(url, info as GetMailDialogInfoRequestData, sessionID), - typeof(GetMailDialogInfoRequestData) - ), - new RouteAction( - "/client/mail/dialog/remove", - async (url, info, sessionID, output) => - await dialogueCallbacks.RemoveDialog(url, info as RemoveDialogRequestData, sessionID), - typeof(RemoveDialogRequestData) - ), - new RouteAction( - "/client/mail/dialog/pin", - async (url, info, sessionID, output) => await dialogueCallbacks.PinDialog(url, info as PinDialogRequestData, sessionID), - typeof(PinDialogRequestData) - ), - new RouteAction( - "/client/mail/dialog/unpin", - async (url, info, sessionID, output) => - await dialogueCallbacks.UnpinDialog(url, info as PinDialogRequestData, sessionID), - typeof(PinDialogRequestData) - ), - new RouteAction( - "/client/mail/dialog/read", - async (url, info, sessionID, output) => - await dialogueCallbacks.SetRead(url, info as SetDialogReadRequestData, sessionID), - typeof(SetDialogReadRequestData) - ), - new RouteAction( - "/client/mail/dialog/getAllAttachments", - async (url, info, sessionID, output) => - await dialogueCallbacks.GetAllAttachments(url, info as GetAllAttachmentsRequestData, sessionID), - typeof(GetAllAttachmentsRequestData) - ), - new RouteAction( - "/client/mail/msg/send", - async (url, info, sessionID, output) => await dialogueCallbacks.SendMessage(url, info as SendMessageRequest, sessionID), - typeof(SendMessageRequest) - ), - new RouteAction( - "/client/mail/dialog/clear", - async (url, info, sessionID, output) => - await dialogueCallbacks.ClearMail(url, info as ClearMailMessageRequest, sessionID), - typeof(ClearMailMessageRequest) - ), - new RouteAction( - "/client/mail/dialog/group/create", - async (url, info, sessionID, output) => - await dialogueCallbacks.CreateGroupMail(url, info as CreateGroupMailRequest, sessionID), - typeof(CreateGroupMailRequest) - ), - new RouteAction( - "/client/mail/dialog/group/owner/change", - async (url, info, sessionID, output) => - await dialogueCallbacks.ChangeMailGroupOwner(url, info as ChangeGroupMailOwnerRequest, sessionID), - typeof(ChangeGroupMailOwnerRequest) - ), - new RouteAction( - "/client/mail/dialog/group/users/add", - async (url, info, sessionID, output) => - await dialogueCallbacks.AddUserToMail(url, info as AddUserGroupMailRequest, sessionID), - typeof(AddUserGroupMailRequest) - ), - new RouteAction( - "/client/mail/dialog/group/users/remove", - async (url, info, sessionID, output) => - await dialogueCallbacks.RemoveUserFromMail(url, info as RemoveUserGroupMailRequest, sessionID), - typeof(RemoveUserGroupMailRequest) - ), - new RouteAction( - "/client/friend/list", - async (url, info, sessionID, output) => await dialogueCallbacks.GetFriendList(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/friend/request/list/outbox", - async (url, info, sessionID, output) => await dialogueCallbacks.ListOutbox(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/friend/request/list/inbox", - async (url, info, sessionID, output) => await dialogueCallbacks.ListInbox(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/friend/request/send", - async (url, info, sessionID, output) => - await dialogueCallbacks.SendFriendRequest(url, info as FriendRequestData, sessionID), - typeof(FriendRequestData) - ), - new RouteAction( - "/client/friend/request/accept-all", - async (url, info, sessionID, output) => - await dialogueCallbacks.AcceptAllFriendRequests(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/friend/request/accept", - async (url, info, sessionID, output) => - await dialogueCallbacks.AcceptFriendRequest(url, info as AcceptFriendRequestData, sessionID), - typeof(AcceptFriendRequestData) - ), - new RouteAction( - "/client/friend/request/decline", - async (url, info, sessionID, output) => - await dialogueCallbacks.DeclineFriendRequest(url, info as DeclineFriendRequestData, sessionID), - typeof(DeclineFriendRequestData) - ), - new RouteAction( - "/client/friend/request/cancel", - async (url, info, sessionID, output) => - await dialogueCallbacks.CancelFriendRequest(url, info as CancelFriendRequestData, sessionID), - typeof(CancelFriendRequestData) - ), - new RouteAction( - "/client/friend/delete", - async (url, info, sessionID, output) => - await dialogueCallbacks.DeleteFriend(url, info as DeleteFriendRequest, sessionID), - typeof(DeleteFriendRequest) - ), - new RouteAction( - "/client/friend/ignore/set", - async (url, info, sessionID, output) => await dialogueCallbacks.IgnoreFriend(url, info as UIDRequestData, sessionID), - typeof(UIDRequestData) - ), - new RouteAction( - "/client/friend/ignore/remove", - async (url, info, sessionID, output) => await dialogueCallbacks.UnIgnoreFriend(url, info as UIDRequestData, sessionID), - typeof(UIDRequestData) - ), - ] - ) { } -} +public class DialogStaticRouter(JsonUtil jsonUtil, DialogueCallbacks dialogueCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/client/chatServer/list", + async (url, info, sessionID, output) => await dialogueCallbacks.GetChatServerList(url, info, sessionID) + ), + new RouteAction( + "/client/mail/dialog/list", + async (url, info, sessionID, output) => await dialogueCallbacks.GetMailDialogList(url, info, sessionID) + ), + new RouteAction( + "/client/mail/dialog/view", + async (url, info, sessionID, output) => await dialogueCallbacks.GetMailDialogView(url, info, sessionID) + ), + new RouteAction( + "/client/mail/dialog/info", + async (url, info, sessionID, output) => await dialogueCallbacks.GetMailDialogInfo(url, info, sessionID) + ), + new RouteAction( + "/client/mail/dialog/remove", + async (url, info, sessionID, output) => await dialogueCallbacks.RemoveDialog(url, info, sessionID) + ), + new RouteAction( + "/client/mail/dialog/pin", + async (url, info, sessionID, output) => await dialogueCallbacks.PinDialog(url, info, sessionID) + ), + new RouteAction( + "/client/mail/dialog/unpin", + async (url, info, sessionID, output) => await dialogueCallbacks.UnpinDialog(url, info, sessionID) + ), + new RouteAction( + "/client/mail/dialog/read", + async (url, info, sessionID, output) => await dialogueCallbacks.SetRead(url, info, sessionID) + ), + new RouteAction( + "/client/mail/dialog/getAllAttachments", + async (url, info, sessionID, output) => await dialogueCallbacks.GetAllAttachments(url, info, sessionID) + ), + new RouteAction( + "/client/mail/msg/send", + async (url, info, sessionID, output) => await dialogueCallbacks.SendMessage(url, info, sessionID) + ), + new RouteAction( + "/client/mail/dialog/clear", + async (url, info, sessionID, output) => await dialogueCallbacks.ClearMail(url, info, sessionID) + ), + new RouteAction( + "/client/mail/dialog/group/create", + async (url, info, sessionID, output) => await dialogueCallbacks.CreateGroupMail(url, info, sessionID) + ), + new RouteAction( + "/client/mail/dialog/group/owner/change", + async (url, info, sessionID, output) => await dialogueCallbacks.ChangeMailGroupOwner(url, info, sessionID) + ), + new RouteAction( + "/client/mail/dialog/group/users/add", + async (url, info, sessionID, output) => await dialogueCallbacks.AddUserToMail(url, info, sessionID) + ), + new RouteAction( + "/client/mail/dialog/group/users/remove", + async (url, info, sessionID, output) => await dialogueCallbacks.RemoveUserFromMail(url, info, sessionID) + ), + new RouteAction( + "/client/friend/list", + async (url, info, sessionID, output) => await dialogueCallbacks.GetFriendList(url, info, sessionID) + ), + new RouteAction( + "/client/friend/request/list/outbox", + async (url, info, sessionID, output) => await dialogueCallbacks.ListOutbox(url, info, sessionID) + ), + new RouteAction( + "/client/friend/request/list/inbox", + async (url, info, sessionID, output) => await dialogueCallbacks.ListInbox(url, info, sessionID) + ), + new RouteAction( + "/client/friend/request/send", + async (url, info, sessionID, output) => await dialogueCallbacks.SendFriendRequest(url, info, sessionID) + ), + new RouteAction( + "/client/friend/request/accept-all", + async (url, info, sessionID, output) => await dialogueCallbacks.AcceptAllFriendRequests(url, info, sessionID) + ), + new RouteAction( + "/client/friend/request/accept", + async (url, info, sessionID, output) => await dialogueCallbacks.AcceptFriendRequest(url, info, sessionID) + ), + new RouteAction( + "/client/friend/request/decline", + async (url, info, sessionID, output) => await dialogueCallbacks.DeclineFriendRequest(url, info, sessionID) + ), + new RouteAction( + "/client/friend/request/cancel", + async (url, info, sessionID, output) => await dialogueCallbacks.CancelFriendRequest(url, info, sessionID) + ), + new RouteAction( + "/client/friend/delete", + async (url, info, sessionID, output) => await dialogueCallbacks.DeleteFriend(url, info, sessionID) + ), + new RouteAction( + "/client/friend/ignore/set", + async (url, info, sessionID, output) => await dialogueCallbacks.IgnoreFriend(url, info, sessionID) + ), + new RouteAction( + "/client/friend/ignore/remove", + async (url, info, sessionID, output) => await dialogueCallbacks.UnIgnoreFriend(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/GameStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/GameStaticRouter.cs index ecc9af09..24c11458 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/GameStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/GameStaticRouter.cs @@ -9,100 +9,81 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class GameStaticRouter : StaticRouter -{ - public GameStaticRouter(JsonUtil jsonUtil, GameCallbacks gameCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/game/config", - async (url, info, sessionID, output) => - await gameCallbacks.GetGameConfig(url, info as GameEmptyCrcRequestData, sessionID), - typeof(GameEmptyCrcRequestData) - ), - new RouteAction( - "/client/putHWMetrics", - async (url, info, sessionID, output) => await gameCallbacks.PutHwMetrics(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/game/mode", - async (url, info, sessionID, output) => await gameCallbacks.GetGameMode(url, info as GameModeRequestData, sessionID), - typeof(GameModeRequestData) - ), - new RouteAction( - "/client/server/list", - async (url, info, sessionID, output) => await gameCallbacks.GetServer(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/match/group/current", - async (url, info, sessionID, output) => await gameCallbacks.GetCurrentGroup(url, info as EmptyRequestData, sessionID), - typeof(GameModeRequestData) - ), - new RouteAction( - "/client/game/version/validate", - async (url, info, sessionID, output) => - await gameCallbacks.VersionValidate(url, info as VersionValidateRequestData, sessionID), - typeof(VersionValidateRequestData) - ), - new RouteAction( - "/client/game/start", - async (url, info, sessionID, output) => await gameCallbacks.GameStart(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/game/logout", - async (url, info, sessionID, output) => await gameCallbacks.GameLogout(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/checkVersion", - async (url, info, sessionID, output) => - await gameCallbacks.ValidateGameVersion(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/game/keepalive", - async (url, info, sessionID, output) => await gameCallbacks.GameKeepalive(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/singleplayer/settings/version", - async (url, info, sessionID, output) => await gameCallbacks.GetVersion(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/reports/lobby/send", - async (url, info, sessionID, output) => await gameCallbacks.ReportNickname(url, info as UIDRequestData, sessionID), - typeof(UIDRequestData) - ), - new RouteAction( - "/client/report/send", - async (url, info, sessionID, output) => await gameCallbacks.ReportNickname(url, info as UIDRequestData, sessionID), - typeof(GameModeRequestData) - ), - new RouteAction( - "/singleplayer/settings/getRaidTime", - async (url, info, sessionID, output) => await gameCallbacks.GetRaidTime(url, info as GetRaidTimeRequest, sessionID), - typeof(GetRaidTimeRequest) - ), - new RouteAction( - "/client/survey", - async (url, info, sessionID, output) => await gameCallbacks.GetSurvey(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/survey/view", - async (url, info, sessionID, output) => - await gameCallbacks.GetSurveyView(url, info as SendSurveyOpinionRequest, sessionID), - typeof(SendSurveyOpinionRequest) - ), - new RouteAction( - "/client/survey/opinion", - async (url, info, sessionID, output) => - await gameCallbacks.SendSurveyOpinion(url, info as SendSurveyOpinionRequest, sessionID), - typeof(SendSurveyOpinionRequest) - ), - new RouteAction( - "/singleplayer/clientmods", - async (url, info, sessionID, output) => - await gameCallbacks.ReceiveClientMods(url, info as SendClientModsRequest, sessionID), - typeof(SendClientModsRequest) - ), - ] - ) { } -} +public class GameStaticRouter(JsonUtil jsonUtil, GameCallbacks gameCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/client/game/config", + async (url, info, sessionID, output) => await gameCallbacks.GetGameConfig(url, info, sessionID) + ), + new RouteAction( + "/client/putHWMetrics", + async (url, info, sessionID, output) => await gameCallbacks.PutHwMetrics(url, info, sessionID) + ), + new RouteAction( + "/client/game/mode", + async (url, info, sessionID, output) => await gameCallbacks.GetGameMode(url, info, sessionID) + ), + new RouteAction( + "/client/server/list", + async (url, info, sessionID, output) => await gameCallbacks.GetServer(url, info, sessionID) + ), + new RouteAction( + "/client/match/group/current", + async (url, info, sessionID, output) => await gameCallbacks.GetCurrentGroup(url, info, sessionID) + ), + new RouteAction( + "/client/game/version/validate", + async (url, info, sessionID, output) => await gameCallbacks.VersionValidate(url, info, sessionID) + ), + new RouteAction( + "/client/game/start", + async (url, info, sessionID, output) => await gameCallbacks.GameStart(url, info, sessionID) + ), + new RouteAction( + "/client/game/logout", + async (url, info, sessionID, output) => await gameCallbacks.GameLogout(url, info, sessionID) + ), + new RouteAction( + "/client/checkVersion", + async (url, info, sessionID, output) => await gameCallbacks.ValidateGameVersion(url, info, sessionID) + ), + new RouteAction( + "/client/game/keepalive", + async (url, info, sessionID, output) => await gameCallbacks.GameKeepalive(url, info, sessionID) + ), + new RouteAction( + "/singleplayer/settings/version", + async (url, info, sessionID, output) => await gameCallbacks.GetVersion(url, info, sessionID) + ), + new RouteAction( + "/client/reports/lobby/send", + async (url, info, sessionID, output) => await gameCallbacks.ReportNickname(url, info, sessionID) + ), + new RouteAction( + "/client/report/send", + async (url, info, sessionID, output) => await gameCallbacks.ReportNickname(url, info, sessionID) + ), + new RouteAction( + "/singleplayer/settings/getRaidTime", + async (url, info, sessionID, output) => await gameCallbacks.GetRaidTime(url, info, sessionID) + ), + new RouteAction( + "/client/survey", + async (url, info, sessionID, output) => await gameCallbacks.GetSurvey(url, info, sessionID) + ), + new RouteAction( + "/client/survey/view", + async (url, info, sessionID, output) => await gameCallbacks.GetSurveyView(url, info, sessionID) + ), + new RouteAction( + "/client/survey/opinion", + async (url, info, sessionID, output) => await gameCallbacks.SendSurveyOpinion(url, info, sessionID) + ), + new RouteAction( + "/singleplayer/clientmods", + async (url, info, sessionID, output) => await gameCallbacks.ReceiveClientMods(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/HealthStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/HealthStaticRouter.cs index ca63dd05..dc23cf77 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/HealthStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/HealthStaticRouter.cs @@ -7,17 +7,13 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class HealthStaticRouter : StaticRouter -{ - public HealthStaticRouter(JsonUtil jsonUtil, HealthCallbacks healthCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/hideout/workout", - async (url, info, sessionID, output) => await healthCallbacks.HandleWorkoutEffects(url, info as WorkoutData, sessionID), - typeof(WorkoutData) - ), - ] - ) { } -} +public class HealthStaticRouter(JsonUtil jsonUtil, HealthCallbacks healthCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/client/hideout/workout", + async (url, info, sessionID, output) => await healthCallbacks.HandleWorkoutEffects(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/InraidStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/InraidStaticRouter.cs index 394e9f6a..8abf2e6b 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/InraidStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/InraidStaticRouter.cs @@ -8,30 +8,25 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class InraidStaticRouter : StaticRouter -{ - public InraidStaticRouter(InraidCallbacks inRaidCallbacks, JsonUtil jsonUtil) - : base( - jsonUtil, - [ - new RouteAction( - "/raid/profile/scavsave", - async (url, info, sessionID, output) => await inRaidCallbacks.SaveProgress(url, info as ScavSaveRequestData, sessionID), - typeof(ScavSaveRequestData) - ), - new RouteAction( - "/singleplayer/settings/raid/menu", - async (url, info, sessionID, output) => await inRaidCallbacks.GetRaidMenuSettings() - ), - new RouteAction( - "/singleplayer/scav/traitorscavhostile", - async (url, info, sessionID, output) => - await inRaidCallbacks.GetTraitorScavHostileChance(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/singleplayer/bosstypes", - async (url, info, sessionID, output) => await inRaidCallbacks.GetBossTypes(url, info as EmptyRequestData, sessionID) - ), - ] - ) { } -} +public class InraidStaticRouter(InraidCallbacks inRaidCallbacks, JsonUtil jsonUtil) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/raid/profile/scavsave", + async (url, info, sessionID, output) => await inRaidCallbacks.SaveProgress(url, info, sessionID) + ), + new RouteAction( + "/singleplayer/settings/raid/menu", + async (url, info, sessionID, output) => await inRaidCallbacks.GetRaidMenuSettings() + ), + new RouteAction( + "/singleplayer/scav/traitorscavhostile", + async (url, info, sessionID, output) => await inRaidCallbacks.GetTraitorScavHostileChance(url, info, sessionID) + ), + new RouteAction( + "/singleplayer/bosstypes", + async (url, info, sessionID, output) => await inRaidCallbacks.GetBossTypes(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/InsuranceStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/InsuranceStaticRouter.cs index 547ad21d..7b88d3ba 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/InsuranceStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/InsuranceStaticRouter.cs @@ -7,18 +7,13 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class InsuranceStaticRouter : StaticRouter -{ - public InsuranceStaticRouter(JsonUtil jsonUtil, InsuranceCallbacks insuranceCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/insurance/items/list/cost", - async (url, info, sessionID, output) => - await insuranceCallbacks.GetInsuranceCost(url, info as GetInsuranceCostRequestData, sessionID), - typeof(GetInsuranceCostRequestData) - ), - ] - ) { } -} +public class InsuranceStaticRouter(JsonUtil jsonUtil, InsuranceCallbacks insuranceCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/client/insurance/items/list/cost", + async (url, info, sessionID, output) => await insuranceCallbacks.GetInsuranceCost(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/ItemEventStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/ItemEventStaticRouter.cs index 500c0d8f..7eac46c8 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/ItemEventStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/ItemEventStaticRouter.cs @@ -7,18 +7,13 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class ItemEventStaticRouter : StaticRouter -{ - public ItemEventStaticRouter(JsonUtil jsonUtil, ItemEventCallbacks itemEventCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/game/profile/items/moving", - async (url, info, sessionID, output) => - await itemEventCallbacks.HandleEvents(url, info as ItemEventRouterRequest, sessionID), - typeof(ItemEventRouterRequest) - ), - ] - ) { } -} +public class ItemEventStaticRouter(JsonUtil jsonUtil, ItemEventCallbacks itemEventCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/client/game/profile/items/moving", + async (url, info, sessionID, output) => await itemEventCallbacks.HandleEvents(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/LauncherStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/LauncherStaticRouter.cs index fc2e5722..6af44faf 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/LauncherStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/LauncherStaticRouter.cs @@ -8,61 +8,55 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class LauncherStaticRouter : StaticRouter -{ - public LauncherStaticRouter(LauncherCallbacks launcherCallbacks, JsonUtil jsonUtil) - : base( - jsonUtil, - [ - new RouteAction("/launcher/ping", async (url, _, sessionID, _) => await launcherCallbacks.Ping(url, null, sessionID)), - new RouteAction("/launcher/server/connect", async (_, _, _, _) => await launcherCallbacks.Connect()), - new RouteAction( - "/launcher/profile/login", - async (url, info, sessionID, _) => await launcherCallbacks.Login(url, info as LoginRequestData, sessionID), - typeof(LoginRequestData) - ), - new RouteAction( - "/launcher/profile/register", - async (url, info, sessionID, _) => await launcherCallbacks.Register(url, info as RegisterData, sessionID), - typeof(RegisterData) - ), - new RouteAction( - "/launcher/profile/get", - async (url, info, sessionID, _) => await launcherCallbacks.Get(url, info as LoginRequestData, sessionID), - typeof(LoginRequestData) - ), - new RouteAction( - "/launcher/profile/change/username", - async (url, info, sessionID, _) => await launcherCallbacks.ChangeUsername(url, info as ChangeRequestData, sessionID), - typeof(ChangeRequestData) - ), - new RouteAction( - "/launcher/profile/change/password", - async (url, info, sessionID, _) => await launcherCallbacks.ChangePassword(url, info as ChangeRequestData, sessionID), - typeof(ChangeRequestData) - ), - new RouteAction( - "/launcher/profile/change/wipe", - async (url, info, sessionID, _) => await launcherCallbacks.Wipe(url, info as RegisterData, sessionID), - typeof(RegisterData) - ), - new RouteAction( - "/launcher/profile/remove", - async (url, info, sessionID, _) => await launcherCallbacks.RemoveProfile(url, info as RemoveProfileData, sessionID), - typeof(RemoveProfileData) - ), - new RouteAction( - "/launcher/profile/compatibleTarkovVersion", - async (_, _, _, _) => await launcherCallbacks.GetCompatibleTarkovVersion() - ), - new RouteAction("/launcher/server/version", async (_, _, _, _) => await launcherCallbacks.GetServerVersion()), - new RouteAction("/launcher/server/loadedServerMods", async (_, _, _, _) => await launcherCallbacks.GetLoadedServerMods()), - new RouteAction( - "/launcher/server/serverModsUsedByProfile", - async (url, info, sessionID, _) => - await launcherCallbacks.GetServerModsProfileUsed(url, info as EmptyRequestData, sessionID), - typeof(EmptyRequestData) - ), - ] - ) { } -} +public class LauncherStaticRouter(LauncherCallbacks launcherCallbacks, JsonUtil jsonUtil) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/launcher/ping", + async (url, info, sessionID, _) => await launcherCallbacks.Ping(url, info, sessionID) + ), + new RouteAction("/launcher/server/connect", async (_, _, _, _) => await launcherCallbacks.Connect()), + new RouteAction( + "/launcher/profile/login", + async (url, info, sessionID, _) => await launcherCallbacks.Login(url, info, sessionID) + ), + new RouteAction( + "/launcher/profile/register", + async (url, info, sessionID, _) => await launcherCallbacks.Register(url, info, sessionID) + ), + new RouteAction( + "/launcher/profile/get", + async (url, info, sessionID, _) => await launcherCallbacks.Get(url, info, sessionID) + ), + new RouteAction( + "/launcher/profile/change/username", + async (url, info, sessionID, _) => await launcherCallbacks.ChangeUsername(url, info, sessionID) + ), + new RouteAction( + "/launcher/profile/change/password", + async (url, info, sessionID, _) => await launcherCallbacks.ChangePassword(url, info, sessionID) + ), + new RouteAction( + "/launcher/profile/change/wipe", + async (url, info, sessionID, _) => await launcherCallbacks.Wipe(url, info, sessionID) + ), + new RouteAction( + "/launcher/profile/remove", + async (url, info, sessionID, _) => await launcherCallbacks.RemoveProfile(url, info, sessionID) + ), + new RouteAction( + "/launcher/profile/compatibleTarkovVersion", + async (_, _, _, _) => await launcherCallbacks.GetCompatibleTarkovVersion() + ), + new RouteAction("/launcher/server/version", async (_, _, _, _) => await launcherCallbacks.GetServerVersion()), + new RouteAction( + "/launcher/server/loadedServerMods", + async (_, _, _, _) => await launcherCallbacks.GetLoadedServerMods() + ), + new RouteAction( + "/launcher/server/serverModsUsedByProfile", + async (url, info, sessionID, _) => await launcherCallbacks.GetServerModsProfileUsed(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/LauncherV2StaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/LauncherV2StaticRouter.cs index 2c1e28a8..c329f79c 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/LauncherV2StaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/LauncherV2StaticRouter.cs @@ -1,44 +1,47 @@ using SPTarkov.DI.Annotations; using SPTarkov.Server.Core.Callbacks; using SPTarkov.Server.Core.DI; +using SPTarkov.Server.Core.Models.Eft.Common; using SPTarkov.Server.Core.Models.Eft.Launcher; using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class LauncherV2StaticRouter : StaticRouter -{ - public LauncherV2StaticRouter(LauncherV2Callbacks launcherV2Callbacks, JsonUtil jsonUtil) - : base( - jsonUtil, - [ - new RouteAction("/launcher/v2/ping", async (url, _, sessionID, _) => await launcherV2Callbacks.Ping()), - new RouteAction("/launcher/v2/types", async (url, _, sessionID, _) => await launcherV2Callbacks.Types()), - new RouteAction( - "/launcher/v2/login", - async (url, info, sessionID, _) => await launcherV2Callbacks.Login(info as LoginRequestData), - typeof(LoginRequestData) - ), - new RouteAction( - "/launcher/v2/register", - async (url, info, sessionID, _) => await launcherV2Callbacks.Register(info as RegisterData), - typeof(RegisterData) - ), - new RouteAction( - "/launcher/v2/passwordChange", - async (url, info, sessionID, _) => await launcherV2Callbacks.PasswordChange(info as ChangeRequestData), - typeof(ChangeRequestData) - ), - new RouteAction( - "/launcher/v2/remove", - async (url, info, sessionID, _) => await launcherV2Callbacks.Remove(info as LoginRequestData), - typeof(LoginRequestData) - ), - new RouteAction("/launcher/v2/version", async (url, _, sessionID, _) => await launcherV2Callbacks.CompatibleVersion()), - new RouteAction("/launcher/v2/mods", async (url, _, sessionID, _) => await launcherV2Callbacks.Mods()), - new RouteAction("/launcher/v2/profiles", async (url, _, sessionID, _) => await launcherV2Callbacks.Profiles()), - new RouteAction("/launcher/v2/profile", async (url, _, sessionID, _) => await launcherV2Callbacks.Profile(sessionID)), - ] - ) { } -} +public class LauncherV2StaticRouter(LauncherV2Callbacks launcherV2Callbacks, JsonUtil jsonUtil) + : StaticRouter( + jsonUtil, + [ + new RouteAction("/launcher/v2/ping", async (url, _, sessionID, _) => await launcherV2Callbacks.Ping()), + new RouteAction("/launcher/v2/types", async (url, _, sessionID, _) => await launcherV2Callbacks.Types()), + new RouteAction( + "/launcher/v2/login", + async (url, info, sessionID, _) => await launcherV2Callbacks.Login(info) + ), + new RouteAction( + "/launcher/v2/register", + async (url, info, sessionID, _) => await launcherV2Callbacks.Register(info) + ), + new RouteAction( + "/launcher/v2/passwordChange", + async (url, info, sessionID, _) => await launcherV2Callbacks.PasswordChange(info) + ), + new RouteAction( + "/launcher/v2/remove", + async (url, info, sessionID, _) => await launcherV2Callbacks.Remove(info) + ), + new RouteAction( + "/launcher/v2/version", + async (url, _, sessionID, _) => await launcherV2Callbacks.CompatibleVersion() + ), + new RouteAction("/launcher/v2/mods", async (url, _, sessionID, _) => await launcherV2Callbacks.Mods()), + new RouteAction( + "/launcher/v2/profiles", + async (url, _, sessionID, _) => await launcherV2Callbacks.Profiles() + ), + new RouteAction( + "/launcher/v2/profile", + async (url, _, sessionID, _) => await launcherV2Callbacks.Profile(sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/LocationStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/LocationStaticRouter.cs index 8d06574c..d4028087 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/LocationStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/LocationStaticRouter.cs @@ -8,23 +8,17 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class LocationStaticRouter : StaticRouter -{ - public LocationStaticRouter(JsonUtil jsonUtil, LocationCallbacks locationCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/locations", - async (url, info, sessionID, output) => - await locationCallbacks.GetLocationData(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/airdrop/loot", - async (url, info, sessionID, output) => - await locationCallbacks.GetAirdropLoot(url, info as GetAirdropLootRequest, sessionID), - typeof(GetAirdropLootRequest) - ), - ] - ) { } -} +public class LocationStaticRouter(JsonUtil jsonUtil, LocationCallbacks locationCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/client/locations", + async (url, info, sessionID, output) => await locationCallbacks.GetLocationData(url, info, sessionID) + ), + new RouteAction( + "/client/airdrop/loot", + async (url, info, sessionID, output) => await locationCallbacks.GetAirdropLoot(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/MatchStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/MatchStaticRouter.cs index d7edc8ed..7e76deab 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/MatchStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/MatchStaticRouter.cs @@ -9,154 +9,121 @@ using static SPTarkov.Server.Core.Services.MatchLocationService; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class MatchStaticRouter : StaticRouter -{ - public MatchStaticRouter(JsonUtil jsonUtil, MatchCallbacks matchCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/match/available", - async (url, info, sessionID, output) => await matchCallbacks.ServerAvailable(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/match/updatePing", - async (url, info, sessionID, output) => await matchCallbacks.UpdatePing(url, info as UpdatePingRequestData, sessionID), - typeof(UpdatePingRequestData) - ), - new RouteAction( - "/client/match/join", - async (url, info, sessionID, output) => await matchCallbacks.JoinMatch(url, info as MatchGroupJoinRequest, sessionID), - typeof(MatchGroupJoinRequest) - ), - new RouteAction( - "/client/match/exit", - async (url, info, sessionID, output) => await matchCallbacks.ExitMatch(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/match/group/delete", - async (url, info, sessionID, output) => await matchCallbacks.DeleteGroup(url, info as DeleteGroupRequest, sessionID) - ), - new RouteAction( - "/client/match/group/leave", - async (url, info, sessionID, output) => await matchCallbacks.LeaveGroup(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/match/group/status", - async (url, info, sessionID, output) => - await matchCallbacks.GetGroupStatus(url, info as MatchGroupStatusRequest, sessionID), - typeof(MatchGroupStatusRequest) - ), - new RouteAction( - "/client/match/group/start_game", - async (url, info, sessionID, output) => - await matchCallbacks.StartGameAsGroupLeader(url, info as MatchGroupStartGameRequest, sessionID), - typeof(MatchGroupStartGameRequest) - ), - new RouteAction( - "/client/match/group/exit_from_menu", - async (url, info, sessionID, output) => await matchCallbacks.ExitFromMenu(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/match/group/current", - async (url, info, sessionID, output) => await matchCallbacks.GroupCurrent(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/match/group/looking/start", - async (url, info, sessionID, output) => await matchCallbacks.StartGroupSearch(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/match/group/looking/stop", - async (url, info, sessionID, output) => await matchCallbacks.StopGroupSearch(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/match/group/invite/send", - async (url, info, sessionID, output) => - await matchCallbacks.SendGroupInvite(url, info as MatchGroupInviteSendRequest, sessionID), - typeof(MatchGroupInviteSendRequest) - ), - new RouteAction( - "/client/match/group/invite/accept", - async (url, info, sessionID, output) => - await matchCallbacks.AcceptGroupInvite(url, info as RequestIdRequest, sessionID), - typeof(RequestIdRequest) - ), - new RouteAction( - "/client/match/group/invite/decline", - async (url, info, sessionID, output) => - await matchCallbacks.DeclineGroupInvite(url, info as RequestIdRequest, sessionID), - typeof(RequestIdRequest) - ), - new RouteAction( - "/client/match/group/invite/cancel", - async (url, info, sessionID, output) => - await matchCallbacks.CancelGroupInvite(url, info as RequestIdRequest, sessionID), - typeof(RequestIdRequest) - ), - new RouteAction( - "/client/match/group/invite/cancel-all", - async (url, info, sessionID, output) => - await matchCallbacks.CancelAllGroupInvite(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/match/group/transfer", - async (url, info, sessionID, output) => - await matchCallbacks.TransferGroup(url, info as MatchGroupTransferRequest, sessionID), - typeof(MatchGroupTransferRequest) - ), - new RouteAction( - "/client/match/group/raid/ready", - async (url, info, sessionID, output) => await matchCallbacks.RaidReady(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/match/group/raid/not-ready", - async (url, info, sessionID, output) => await matchCallbacks.NotRaidReady(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/putMetrics", - async (url, info, sessionID, output) => await matchCallbacks.PutMetrics(url, info as PutMetricsRequestData, sessionID), - typeof(PutMetricsRequestData) - ), - new RouteAction( - "/client/analytics/event-disconnect", - async (url, info, sessionID, output) => - await matchCallbacks.EventDisconnect(url, info as PutMetricsRequestData, sessionID), - typeof(PutMetricsRequestData) - ), - new RouteAction( - "/client/getMetricsConfig", - async (url, info, sessionID, output) => await matchCallbacks.GetMetrics(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/raid/configuration", - async (url, info, sessionID, output) => - await matchCallbacks.GetRaidConfiguration(url, info as GetRaidConfigurationRequestData, sessionID), - typeof(GetRaidConfigurationRequestData) - ), - new RouteAction( - "/client/raid/configuration-by-profile", - async (url, info, sessionID, output) => - await matchCallbacks.GetConfigurationByProfile(url, info as GetRaidConfigurationRequestData, sessionID), - typeof(GetRaidConfigurationRequestData) - ), - new RouteAction( - "/client/match/group/player/remove", - async (url, info, sessionID, output) => - await matchCallbacks.RemovePlayerFromGroup(url, info as MatchGroupPlayerRemoveRequest, sessionID), - typeof(MatchGroupPlayerRemoveRequest) - ), - new RouteAction( - "/client/match/local/start", - async (url, info, sessionID, output) => - await matchCallbacks.StartLocalRaid(url, info as StartLocalRaidRequestData, sessionID), - typeof(StartLocalRaidRequestData) - ), - new RouteAction( - "/client/match/local/end", - async (url, info, sessionID, output) => - await matchCallbacks.EndLocalRaid(url, info as EndLocalRaidRequestData, sessionID), - typeof(EndLocalRaidRequestData) - ), - ] - ) { } -} +public class MatchStaticRouter(JsonUtil jsonUtil, MatchCallbacks matchCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/client/match/available", + async (url, info, sessionID, output) => await matchCallbacks.ServerAvailable(url, info, sessionID) + ), + new RouteAction( + "/client/match/updatePing", + async (url, info, sessionID, output) => await matchCallbacks.UpdatePing(url, info, sessionID) + ), + new RouteAction( + "/client/match/join", + async (url, info, sessionID, output) => await matchCallbacks.JoinMatch(url, info, sessionID) + ), + new RouteAction( + "/client/match/exit", + async (url, info, sessionID, output) => await matchCallbacks.ExitMatch(url, info, sessionID) + ), + new RouteAction( + "/client/match/group/delete", + async (url, info, sessionID, output) => await matchCallbacks.DeleteGroup(url, info, sessionID) + ), + new RouteAction( + "/client/match/group/leave", + async (url, info, sessionID, output) => await matchCallbacks.LeaveGroup(url, info, sessionID) + ), + new RouteAction( + "/client/match/group/status", + async (url, info, sessionID, output) => await matchCallbacks.GetGroupStatus(url, info, sessionID) + ), + new RouteAction( + "/client/match/group/start_game", + async (url, info, sessionID, output) => await matchCallbacks.StartGameAsGroupLeader(url, info, sessionID) + ), + new RouteAction( + "/client/match/group/exit_from_menu", + async (url, info, sessionID, output) => await matchCallbacks.ExitFromMenu(url, info, sessionID) + ), + new RouteAction( + "/client/match/group/current", + async (url, info, sessionID, output) => await matchCallbacks.GroupCurrent(url, info, sessionID) + ), + new RouteAction( + "/client/match/group/looking/start", + async (url, info, sessionID, output) => await matchCallbacks.StartGroupSearch(url, info, sessionID) + ), + new RouteAction( + "/client/match/group/looking/stop", + async (url, info, sessionID, output) => await matchCallbacks.StopGroupSearch(url, info, sessionID) + ), + new RouteAction( + "/client/match/group/invite/send", + async (url, info, sessionID, output) => await matchCallbacks.SendGroupInvite(url, info, sessionID) + ), + new RouteAction( + "/client/match/group/invite/accept", + async (url, info, sessionID, output) => await matchCallbacks.AcceptGroupInvite(url, info, sessionID) + ), + new RouteAction( + "/client/match/group/invite/decline", + async (url, info, sessionID, output) => await matchCallbacks.DeclineGroupInvite(url, info, sessionID) + ), + new RouteAction( + "/client/match/group/invite/cancel", + async (url, info, sessionID, output) => await matchCallbacks.CancelGroupInvite(url, info, sessionID) + ), + new RouteAction( + "/client/match/group/invite/cancel-all", + async (url, info, sessionID, output) => await matchCallbacks.CancelAllGroupInvite(url, info, sessionID) + ), + new RouteAction( + "/client/match/group/transfer", + async (url, info, sessionID, output) => await matchCallbacks.TransferGroup(url, info, sessionID) + ), + new RouteAction( + "/client/match/group/raid/ready", + async (url, info, sessionID, output) => await matchCallbacks.RaidReady(url, info, sessionID) + ), + new RouteAction( + "/client/match/group/raid/not-ready", + async (url, info, sessionID, output) => await matchCallbacks.NotRaidReady(url, info, sessionID) + ), + new RouteAction( + "/client/putMetrics", + async (url, info, sessionID, output) => await matchCallbacks.PutMetrics(url, info, sessionID) + ), + new RouteAction( + "/client/analytics/event-disconnect", + async (url, info, sessionID, output) => await matchCallbacks.EventDisconnect(url, info, sessionID) + ), + new RouteAction( + "/client/getMetricsConfig", + async (url, info, sessionID, output) => await matchCallbacks.GetMetrics(url, info, sessionID) + ), + new RouteAction( + "/client/raid/configuration", + async (url, info, sessionID, output) => await matchCallbacks.GetRaidConfiguration(url, info, sessionID) + ), + new RouteAction( + "/client/raid/configuration-by-profile", + async (url, info, sessionID, output) => await matchCallbacks.GetConfigurationByProfile(url, info, sessionID) + ), + new RouteAction( + "/client/match/group/player/remove", + async (url, info, sessionID, output) => await matchCallbacks.RemovePlayerFromGroup(url, info, sessionID) + ), + new RouteAction( + "/client/match/local/start", + async (url, info, sessionID, output) => await matchCallbacks.StartLocalRaid(url, info, sessionID) + ), + new RouteAction( + "/client/match/local/end", + async (url, info, sessionID, output) => await matchCallbacks.EndLocalRaid(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/NotifierStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/NotifierStaticRouter.cs index f19b0d54..fd628427 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/NotifierStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/NotifierStaticRouter.cs @@ -8,22 +8,17 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class NotifierStaticRouter : StaticRouter -{ - public NotifierStaticRouter(JsonUtil jsonUtil, NotifierCallbacks notifierCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/notifier/channel/create", - async (url, info, sessionID, output) => - await notifierCallbacks.CreateNotifierChannel(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/game/profile/select", - async (url, info, sessionID, output) => await notifierCallbacks.SelectProfile(url, info as UIDRequestData, sessionID), - typeof(UIDRequestData) - ), - ] - ) { } -} +public class NotifierStaticRouter(JsonUtil jsonUtil, NotifierCallbacks notifierCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/client/notifier/channel/create", + async (url, info, sessionID, output) => await notifierCallbacks.CreateNotifierChannel(url, info, sessionID) + ), + new RouteAction( + "/client/game/profile/select", + async (url, info, sessionID, output) => await notifierCallbacks.SelectProfile(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/PrestigeStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/PrestigeStaticRouter.cs index b30c9f15..56bbd5e3 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/PrestigeStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/PrestigeStaticRouter.cs @@ -8,22 +8,17 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class PrestigeStaticRouter : StaticRouter -{ - public PrestigeStaticRouter(JsonUtil jsonUtil, PrestigeCallbacks prestigeCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/prestige/list", - async (url, info, sessionID, output) => await prestigeCallbacks.GetPrestige(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/prestige/obtain", - async (url, info, sessionID, output) => - await prestigeCallbacks.ObtainPrestige(url, info as ObtainPrestigeRequestList, sessionID), - typeof(ObtainPrestigeRequestList) - ), - ] - ) { } -} +public class PrestigeStaticRouter(JsonUtil jsonUtil, PrestigeCallbacks prestigeCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/client/prestige/list", + async (url, info, sessionID, output) => await prestigeCallbacks.GetPrestige(url, info, sessionID) + ), + new RouteAction( + "/client/prestige/obtain", + async (url, info, sessionID, output) => await prestigeCallbacks.ObtainPrestige(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/ProfileStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/ProfileStaticRouter.cs index df1f7d36..532f50c8 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/ProfileStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/ProfileStaticRouter.cs @@ -9,83 +9,61 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class ProfileStaticRouter : StaticRouter -{ - public ProfileStaticRouter(ProfileCallbacks profileCallbacks, JsonUtil jsonUtil) - : base( - jsonUtil, - [ - new RouteAction( - "/client/game/profile/create", - async (url, info, sessionID, output) => - await profileCallbacks.CreateProfile(url, info as ProfileCreateRequestData, sessionID), - typeof(ProfileCreateRequestData) - ), - new RouteAction( - "/client/game/profile/list", - async (url, info, sessionID, output) => await profileCallbacks.GetProfileData(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/game/profile/savage/regenerate", - async (url, info, sessionID, output) => await profileCallbacks.RegenerateScav(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/game/profile/voice/change", - async (url, info, sessionID, output) => - await profileCallbacks.ChangeVoice(url, info as ProfileChangeVoiceRequestData, sessionID), - typeof(ProfileChangeVoiceRequestData) - ), - new RouteAction( - "/client/game/profile/nickname/change", - async (url, info, sessionID, output) => - await profileCallbacks.ChangeNickname(url, info as ProfileChangeNicknameRequestData, sessionID), - typeof(ProfileChangeNicknameRequestData) - ), - new RouteAction( - "/client/game/profile/nickname/validate", - async (url, info, sessionID, output) => - await profileCallbacks.ValidateNickname(url, info as ValidateNicknameRequestData, sessionID), - typeof(ValidateNicknameRequestData) - ), - new RouteAction( - "/client/game/profile/nickname/reserved", - async (url, info, sessionID, output) => - await profileCallbacks.GetReservedNickname(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/profile/status", - async (url, info, sessionID, output) => - await profileCallbacks.GetProfileStatus(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/profile/view", - async (url, info, sessionID, output) => - await profileCallbacks.GetOtherProfile(url, info as GetOtherProfileRequest, sessionID), - typeof(GetOtherProfileRequest) - ), - new RouteAction( - "/client/profile/settings", - async (url, info, sessionID, output) => - await profileCallbacks.GetProfileSettings(url, info as GetProfileSettingsRequest, sessionID), - typeof(GetProfileSettingsRequest) - ), - new RouteAction( - "/client/game/profile/search", - async (url, info, sessionID, output) => - await profileCallbacks.SearchProfiles(url, info as SearchProfilesRequestData, sessionID), - typeof(SearchProfilesRequestData) - ), - new RouteAction( - "/launcher/profile/info", - async (url, info, sessionID, output) => - await profileCallbacks.GetMiniProfile(url, info as GetMiniProfileRequestData, sessionID), - typeof(GetMiniProfileRequestData) - ), - new RouteAction( - "/launcher/profiles", - async (url, info, sessionID, output) => - await profileCallbacks.GetAllMiniProfiles(url, info as EmptyRequestData, sessionID) - ), - ] - ) { } -} +public class ProfileStaticRouter(ProfileCallbacks profileCallbacks, JsonUtil jsonUtil) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/client/game/profile/create", + async (url, info, sessionID, output) => await profileCallbacks.CreateProfile(url, info, sessionID) + ), + new RouteAction( + "/client/game/profile/list", + async (url, info, sessionID, output) => await profileCallbacks.GetProfileData(url, info, sessionID) + ), + new RouteAction( + "/client/game/profile/savage/regenerate", + async (url, info, sessionID, output) => await profileCallbacks.RegenerateScav(url, info, sessionID) + ), + new RouteAction( + "/client/game/profile/voice/change", + async (url, info, sessionID, output) => await profileCallbacks.ChangeVoice(url, info, sessionID) + ), + new RouteAction( + "/client/game/profile/nickname/change", + async (url, info, sessionID, output) => await profileCallbacks.ChangeNickname(url, info, sessionID) + ), + new RouteAction( + "/client/game/profile/nickname/validate", + async (url, info, sessionID, output) => await profileCallbacks.ValidateNickname(url, info, sessionID) + ), + new RouteAction( + "/client/game/profile/nickname/reserved", + async (url, info, sessionID, output) => await profileCallbacks.GetReservedNickname(url, info, sessionID) + ), + new RouteAction( + "/client/profile/status", + async (url, info, sessionID, output) => await profileCallbacks.GetProfileStatus(url, info, sessionID) + ), + new RouteAction( + "/client/profile/view", + async (url, info, sessionID, output) => await profileCallbacks.GetOtherProfile(url, info, sessionID) + ), + new RouteAction( + "/client/profile/settings", + async (url, info, sessionID, output) => await profileCallbacks.GetProfileSettings(url, info, sessionID) + ), + new RouteAction( + "/client/game/profile/search", + async (url, info, sessionID, output) => await profileCallbacks.SearchProfiles(url, info, sessionID) + ), + new RouteAction( + "/launcher/profile/info", + async (url, info, sessionID, output) => await profileCallbacks.GetMiniProfile(url, info, sessionID) + ), + new RouteAction( + "/launcher/profiles", + async (url, info, sessionID, output) => await profileCallbacks.GetAllMiniProfiles(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/QuestStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/QuestStaticRouter.cs index 95b115d3..297a71e8 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/QuestStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/QuestStaticRouter.cs @@ -8,21 +8,17 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class QuestStaticRouter : StaticRouter -{ - public QuestStaticRouter(JsonUtil jsonUtil, QuestCallbacks questCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/quest/list", - async (url, info, sessionID, output) => await questCallbacks.ListQuests(url, info as ListQuestsRequestData, sessionID), - typeof(ListQuestsRequestData) - ), - new RouteAction( - "/client/repeatalbeQuests/activityPeriods", - async (url, info, sessionID, output) => await questCallbacks.ActivityPeriods(url, info as EmptyRequestData, sessionID) - ), - ] - ) { } -} +public class QuestStaticRouter(JsonUtil jsonUtil, QuestCallbacks questCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/client/quest/list", + async (url, info, sessionID, output) => await questCallbacks.ListQuests(url, info, sessionID) + ), + new RouteAction( + "/client/repeatalbeQuests/activityPeriods", + async (url, info, sessionID, output) => await questCallbacks.ActivityPeriods(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/RagfairStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/RagfairStaticRouter.cs index 54171a7e..86dfeffd 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/RagfairStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/RagfairStaticRouter.cs @@ -8,50 +8,37 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class RagfairStaticRouter : StaticRouter -{ - public RagfairStaticRouter(JsonUtil jsonUtil, RagfairCallbacks ragfairCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/ragfair/search", - async (url, info, sessionID, output) => await ragfairCallbacks.Search(url, info as SearchRequestData, sessionID), - typeof(SearchRequestData) - ), - new RouteAction( - "/client/ragfair/find", - async (url, info, sessionID, output) => await ragfairCallbacks.Search(url, info as SearchRequestData, sessionID), - typeof(SearchRequestData) - ), - new RouteAction( - "/client/ragfair/itemMarketPrice", - async (url, info, sessionID, output) => - await ragfairCallbacks.GetMarketPrice(url, info as GetMarketPriceRequestData, sessionID), - typeof(GetMarketPriceRequestData) - ), - new RouteAction( - "/client/ragfair/offerfees", - async (url, info, sessionID, output) => - await ragfairCallbacks.StorePlayerOfferTaxAmount(url, info as StorePlayerOfferTaxAmountRequestData, sessionID), - typeof(StorePlayerOfferTaxAmountRequestData) - ), - new RouteAction( - "/client/reports/ragfair/send", - async (url, info, sessionID, output) => - await ragfairCallbacks.SendReport(url, info as SendRagfairReportRequestData, sessionID), - typeof(SendRagfairReportRequestData) - ), - new RouteAction( - "/client/items/prices", - async (url, info, sessionID, output) => await ragfairCallbacks.GetFleaPrices(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/ragfair/offer/findbyid", - async (url, info, sessionID, output) => - await ragfairCallbacks.GetFleaOfferById(url, info as GetRagfairOfferByIdRequest, sessionID), - typeof(GetRagfairOfferByIdRequest) - ), - ] - ) { } -} +public class RagfairStaticRouter(JsonUtil jsonUtil, RagfairCallbacks ragfairCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/client/ragfair/search", + async (url, info, sessionID, output) => await ragfairCallbacks.Search(url, info, sessionID) + ), + new RouteAction( + "/client/ragfair/find", + async (url, info, sessionID, output) => await ragfairCallbacks.Search(url, info, sessionID) + ), + new RouteAction( + "/client/ragfair/itemMarketPrice", + async (url, info, sessionID, output) => await ragfairCallbacks.GetMarketPrice(url, info, sessionID) + ), + new RouteAction( + "/client/ragfair/offerfees", + async (url, info, sessionID, output) => await ragfairCallbacks.StorePlayerOfferTaxAmount(url, info, sessionID) + ), + new RouteAction( + "/client/reports/ragfair/send", + async (url, info, sessionID, output) => await ragfairCallbacks.SendReport(url, info, sessionID) + ), + new RouteAction( + "/client/items/prices", + async (url, info, sessionID, output) => await ragfairCallbacks.GetFleaPrices(url, info, sessionID) + ), + new RouteAction( + "/client/ragfair/offer/findbyid", + async (url, info, sessionID, output) => await ragfairCallbacks.GetFleaOfferById(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/TraderStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/TraderStaticRouter.cs index a475feef..ae5c6ec3 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/TraderStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/TraderStaticRouter.cs @@ -7,22 +7,17 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class TraderStaticRouter : StaticRouter -{ - public TraderStaticRouter(JsonUtil jsonUtil, TraderCallbacks traderCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/trading/api/traderSettings", - async (url, info, sessionID, output) => - await traderCallbacks.GetTraderSettings(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/singleplayer/moddedTraders", - async (url, info, sessionID, output) => - await traderCallbacks.GetModdedTraderData(url, info as EmptyRequestData, sessionID) - ), - ] - ) { } -} +public class TraderStaticRouter(JsonUtil jsonUtil, TraderCallbacks traderCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/client/trading/api/traderSettings", + async (url, info, sessionID, output) => await traderCallbacks.GetTraderSettings(url, info, sessionID) + ), + new RouteAction( + "/singleplayer/moddedTraders", + async (url, info, sessionID, output) => await traderCallbacks.GetModdedTraderData(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/WeatherStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/WeatherStaticRouter.cs index 967a3c93..c4be2954 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/WeatherStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/WeatherStaticRouter.cs @@ -7,20 +7,17 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Static; [Injectable] -public class WeatherStaticRouter : StaticRouter -{ - public WeatherStaticRouter(JsonUtil jsonUtil, WeatherCallbacks weatherCallbacks) - : base( - jsonUtil, - [ - new RouteAction( - "/client/weather", - async (url, info, sessionID, output) => await weatherCallbacks.GetWeather(url, info as EmptyRequestData, sessionID) - ), - new RouteAction( - "/client/localGame/weather", - async (url, info, sessionID, output) => await weatherCallbacks.GetLocalWeather(url, info as EmptyRequestData, sessionID) - ), - ] - ) { } -} +public class WeatherStaticRouter(JsonUtil jsonUtil, WeatherCallbacks weatherCallbacks) + : StaticRouter( + jsonUtil, + [ + new RouteAction( + "/client/weather", + async (url, info, sessionID, output) => await weatherCallbacks.GetWeather(url, info, sessionID) + ), + new RouteAction( + "/client/localGame/weather", + async (url, info, sessionID, output) => await weatherCallbacks.GetLocalWeather(url, info, sessionID) + ), + ] + ) { } diff --git a/Libraries/SPTarkov.Server.Core/Servers/Http/SptHttpListener.cs b/Libraries/SPTarkov.Server.Core/Servers/Http/SptHttpListener.cs index f92d66d0..db4de8fc 100644 --- a/Libraries/SPTarkov.Server.Core/Servers/Http/SptHttpListener.cs +++ b/Libraries/SPTarkov.Server.Core/Servers/Http/SptHttpListener.cs @@ -25,14 +25,8 @@ public class SptHttpListener( ServerLocalisationService serverLocalisationService ) : IHttpListener { - // We want to read 1KB at a time, for most request this is already big enough - private const int BodyReadBufferSize = 1024 * 1; - private static readonly ImmutableHashSet SupportedMethods = ["GET", "PUT", "POST"]; - protected readonly HttpRouter _router = httpRouter; - protected readonly IEnumerable _serializers = serializers; - public bool CanHandle(MongoId _, HttpRequest req) { return SupportedMethods.Contains(req.Method); @@ -60,33 +54,16 @@ public class SptHttpListener( var requestCompressed = req.Method == "PUT" || requestIsCompressed; string body; - using MemoryStream bufferStream = new(); - - var buffer = new byte[BodyReadBufferSize]; - int bytesRead; - - while ((bytesRead = await req.Body.ReadAsync(buffer)) > 0) - { - await bufferStream.WriteAsync(buffer.AsMemory(0, bytesRead)); - } - - bufferStream.Position = 0; if (requestCompressed) { - await using var deflateStream = new ZLibStream(bufferStream, CompressionMode.Decompress); - await using var decompressedStream = new MemoryStream(); - await deflateStream.CopyToAsync(decompressedStream); - decompressedStream.Position = 0; - - using var reader = new StreamReader(decompressedStream, Encoding.UTF8); + await using var deflateStream = new ZLibStream(req.Body, CompressionMode.Decompress); + using var reader = new StreamReader(deflateStream, Encoding.UTF8); body = await reader.ReadToEndAsync(); } else { - // No decompression needed, decode directly from the bufferStream's buffer - bufferStream.Position = 0; - using var reader = new StreamReader(bufferStream, Encoding.UTF8); + using var reader = new StreamReader(req.Body, Encoding.UTF8); body = await reader.ReadToEndAsync(); } @@ -139,7 +116,7 @@ public class SptHttpListener( } // Not debug, minority of requests need a serializer to do the job (IMAGE/BUNDLE/NOTIFY) - var serialiser = _serializers.FirstOrDefault(x => x.CanHandle(output)); + var serialiser = serializers.FirstOrDefault(x => x.CanHandle(output)); if (serialiser != null) { await serialiser.Serialize(sessionID, req, resp, bodyInfo); @@ -179,7 +156,7 @@ public class SptHttpListener( public async ValueTask GetResponse(MongoId sessionId, HttpRequest req, string? body) { - var output = await _router.GetResponse(req, sessionId, body); + var output = await httpRouter.GetResponse(req, sessionId, body); // Route doesn't exist or response is not properly set up if (string.IsNullOrEmpty(output)) @@ -203,30 +180,23 @@ public class SptHttpListener( resp.StatusCode = 200; resp.ContentType = "application/json"; resp.Headers.Append("Set-Cookie", $"PHPSESSID={sessionID.ToString()}"); + if (!string.IsNullOrEmpty(output)) { await resp.WriteAsync(output); } - - await resp.StartAsync(); - await resp.CompleteAsync(); } - public async Task SendZlibJson(HttpResponse resp, string? output, MongoId sessionID) + public async Task SendZlibJson(HttpResponse resp, string output, MongoId sessionID) { - using (var ms = new MemoryStream()) + resp.StatusCode = 200; + resp.ContentType = "application/json"; + resp.Headers.Append("Set-Cookie", $"PHPSESSID={sessionID.ToString()}"); + + await using (var deflateStream = new ZLibStream(resp.Body, CompressionLevel.SmallestSize)) { - await using (var deflateStream = new ZLibStream(ms, CompressionLevel.SmallestSize)) - { - await deflateStream.WriteAsync(Encoding.UTF8.GetBytes(output)); - } - - var bytes = ms.ToArray(); - await resp.Body.WriteAsync(bytes); + await deflateStream.WriteAsync(Encoding.UTF8.GetBytes(output)); } - - await resp.StartAsync(); - await resp.CompleteAsync(); } private record Response(string Method, string jsonData); diff --git a/Libraries/SPTarkov.Server.Core/Servers/HttpServer.cs b/Libraries/SPTarkov.Server.Core/Servers/HttpServer.cs index e90e60a6..dd441cd1 100644 --- a/Libraries/SPTarkov.Server.Core/Servers/HttpServer.cs +++ b/Libraries/SPTarkov.Server.Core/Servers/HttpServer.cs @@ -1,6 +1,6 @@ -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.Primitives; -using SPTarkov.Common.Extensions; +using System.Net; +using System.Net.Sockets; +using Microsoft.AspNetCore.Http; using SPTarkov.DI.Annotations; using SPTarkov.Server.Core.Models.Common; using SPTarkov.Server.Core.Models.Spt.Config; @@ -20,7 +20,7 @@ public class HttpServer( IEnumerable httpListeners ) { - private readonly HttpConfig _httpConfig = configServer.GetConfig(); + protected readonly HttpConfig HttpConfig = configServer.GetConfig(); public async Task HandleRequest(HttpContext context) { @@ -39,18 +39,16 @@ public class HttpServer( profileActivityService.SetActivityTimestamp(sessionId); } - // Extract header for original IP detection - var realIp = context.GetHeaderIfExists("x-real-ip"); - var clientIp = GetClientIp(context, realIp); + var realIp = context.Connection.RemoteIpAddress ?? IPAddress.Parse("127.0.0.1"); - if (_httpConfig.LogRequests) + if (HttpConfig.LogRequests) { - LogRequest(context, clientIp, IsLocalRequest(clientIp)); + LogRequest(context, realIp, IsPrivateOrLocalAddress(realIp)); } try { - var listener = httpListeners.FirstOrDefault(l => l.CanHandle(sessionId, context.Request)); + var listener = httpListeners.FirstOrDefault(listener => listener.CanHandle(sessionId, context.Request)); if (listener != null) { @@ -76,7 +74,7 @@ public class HttpServer( /// HttpContext of request /// Ip of requester /// Is this local request - protected void LogRequest(HttpContext context, string clientIp, bool isLocalRequest) + protected void LogRequest(HttpContext context, IPAddress clientIp, bool isLocalRequest) { if (isLocalRequest) { @@ -88,32 +86,50 @@ public class HttpServer( } } - protected static string GetClientIp(HttpContext context, StringValues? realIp) - { - if (realIp.HasValue) - { - return realIp.Value.First(); - } - - var forwardedFor = context.GetHeaderIfExists("x-forwarded-for"); - return forwardedFor.HasValue - ? forwardedFor.Value.First()!.Split(",")[0].Trim() - : context.Connection.RemoteIpAddress!.ToString().Split(":").Last(); - } - /// /// Check against hardcoded values that determine it's from a local address /// /// Address to check /// True if its local - protected bool IsLocalRequest(string? remoteAddress) + protected bool IsPrivateOrLocalAddress(IPAddress remoteAddress) { - if (remoteAddress == null) + if (IPAddress.IsLoopback(remoteAddress)) { - return false; + return true; } - return remoteAddress.StartsWith("127.0.0") || remoteAddress.StartsWith("192.168.") || remoteAddress.StartsWith("localhost"); + if (remoteAddress.AddressFamily == AddressFamily.InterNetwork) + { + var bytes = remoteAddress.GetAddressBytes(); + + switch (bytes[0]) + { + case 10: + return true; // 10.0.0.0/8 (private) + + case 169: + return bytes[1] == 254; // 169.254.0.0/16 (APIPA/link-local) + + case 172: + return bytes[1] >= 16 && bytes[1] <= 31; // 172.16.0.0/12 (private) + + case 192: + return bytes[1] == 168; // 192.168.0.0/16 (private) + + default: + return false; + } + } + + if (remoteAddress.AddressFamily == AddressFamily.InterNetworkV6) + { + if (remoteAddress.IsIPv6LinkLocal) + { + return true; + } + } + + return false; } protected Dictionary GetCookies(HttpRequest req) @@ -130,6 +146,6 @@ public class HttpServer( public string ListeningUrl() { - return $"https://{_httpConfig.Ip}:{_httpConfig.Port}"; + return $"https://{HttpConfig.Ip}:{HttpConfig.Port}"; } } diff --git a/SPTarkov.Server/Program.cs b/SPTarkov.Server/Program.cs index ba0ab215..fba3dc97 100644 --- a/SPTarkov.Server/Program.cs +++ b/SPTarkov.Server/Program.cs @@ -3,6 +3,7 @@ using System.Net.Sockets; using System.Runtime.InteropServices; using System.Security.Authentication; using System.Text; +using Microsoft.AspNetCore.HttpOverrides; using Microsoft.AspNetCore.Server.Kestrel.Https; using SPTarkov.Common.Semver; using SPTarkov.Common.Semver.Implementations; @@ -78,6 +79,11 @@ public static class Program var loggerFinalizer = app.Services.GetService>()!; try { + // Handle edge cases where reverse proxies might pass X-Forwarded-For, use this as the actual IP address + app.UseForwardedHeaders( + new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto } + ); + SetConsoleOutputMode(); await app.RunAsync();