using SPTarkov.Common.Annotations; using SPTarkov.Server.Core.Controllers; using SPTarkov.Server.Core.DI; using SPTarkov.Server.Core.Models.Eft.Common; using SPTarkov.Server.Core.Models.Eft.Common.Request; using SPTarkov.Server.Core.Models.Eft.Game; using SPTarkov.Server.Core.Servers; using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Callbacks; [Injectable(InjectableTypeOverride = typeof(IOnLoad), TypePriority = OnLoadOrder.GameCallbacks)] [Injectable(InjectableTypeOverride = typeof(GameCallbacks))] public class GameCallbacks( HttpResponseUtil _httpResponseUtil, Watermark _watermark, SaveServer _saveServer, GameController _gameController, TimeUtil _timeUtil ) : IOnLoad { public Task OnLoad() { _gameController.Load(); return Task.CompletedTask; } public string GetRoute() { return "spt-game"; } /// /// Handle client/game/version/validate /// /// public string VersionValidate(string url, VersionValidateRequestData info, string sessionID) { return _httpResponseUtil.NullResponse(); } /// /// Handle client/game/start /// /// public string GameStart(string url, EmptyRequestData _, string sessionID) { var startTimestampSec = _timeUtil.GetTimeStamp(); _gameController.GameStart(url, sessionID, startTimestampSec); return _httpResponseUtil.GetBody( new GameStartResponse { UtcTime = startTimestampSec } ); } /// /// Handle client/game/logout /// Save profiles on game close /// /// public string GameLogout(string url, EmptyRequestData _, string sessionID) { _saveServer.SaveProfile(sessionID); return _httpResponseUtil.GetBody( new GameLogoutResponseData { Status = "ok" } ); } /// /// Handle client/game/config /// /// public string GetGameConfig(string url, GameEmptyCrcRequestData info, string sessionID) { return _httpResponseUtil.GetBody(_gameController.GetGameConfig(sessionID)); } /// /// Handle client/game/mode /// /// public string GetGameMode(string url, GameModeRequestData info, string sessionID) { return _httpResponseUtil.GetBody(_gameController.GetGameMode(sessionID, info)); } /// /// Handle client/server/list /// /// public string GetServer(string url, EmptyRequestData _, string sessionID) { return _httpResponseUtil.GetBody(_gameController.GetServer(sessionID)); } /// /// Handle client/match/group/current /// /// public string GetCurrentGroup(string url, EmptyRequestData _, string sessionID) { return _httpResponseUtil.GetBody(_gameController.GetCurrentGroup(sessionID)); } /// /// Handle client/checkVersion /// /// public string ValidateGameVersion(string url, EmptyRequestData _, string sessionID) { return _httpResponseUtil.GetBody(_gameController.GetValidGameVersion(sessionID)); } /// /// Handle client/game/keepalive /// /// public string GameKeepalive(string url, EmptyRequestData _, string sessionID) { return _httpResponseUtil.GetBody(_gameController.GetKeepAlive(sessionID)); } /// /// Handle singleplayer/settings/version /// /// public string GetVersion(string url, EmptyRequestData _, string sessionID) { // change to be a proper type return _httpResponseUtil.NoBody( new { Version = _watermark.GetInGameVersionLabel() } ); } /// /// Handle /client/report/send & /client/reports/lobby/send /// /// public string ReportNickname(string url, UIDRequestData request, string sessionID) { return _httpResponseUtil.NullResponse(); } /// /// Handle singleplayer/settings/getRaidTime /// /// public string GetRaidTime(string url, GetRaidTimeRequest request, string sessionID) { return _httpResponseUtil.NoBody(_gameController.GetRaidTime(sessionID, request)); } /// /// Handle /client/survey /// /// public string GetSurvey(string url, EmptyRequestData _, string sessionID) { return _httpResponseUtil.GetBody(_gameController.GetSurvey(sessionID)); } /// /// Handle client/survey/view /// /// public string GetSurveyView(string url, SendSurveyOpinionRequest request, string sessionID) { return _httpResponseUtil.NullResponse(); } /// /// Handle client/survey/opinion /// /// public string SendSurveyOpinion(string url, SendSurveyOpinionRequest request, string sessionID) { return _httpResponseUtil.NullResponse(); } }