using Core.Controllers; using Core.DI; using Core.Models.Eft.Common; using Core.Models.Eft.Common.Request; using Core.Models.Eft.Game; using Core.Servers; using Core.Utils; using SptCommon.Annotations; namespace 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 info, string sessionID) { var startTimestampSec = _timeUtil.GetTimeStamp(); _gameController.GameStart(url, info, sessionID, startTimestampSec); return _httpResponseUtil.GetBody( new GameStartResponse { UtcTime = startTimestampSec } ); } /// /// Handle client/game/logout /// Save profiles on game close /// /// /// /// /// public string GameLogout(string url, EmptyRequestData info, string sessionID) { _saveServer.Save(); 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 info, string sessionID) { return _httpResponseUtil.GetBody(_gameController.GetServer(sessionID)); } /// /// Handle client/match/group/current /// /// /// /// /// public string GetCurrentGroup(string url, EmptyRequestData info, string sessionID) { return _httpResponseUtil.GetBody(_gameController.GetCurrentGroup(sessionID)); } /// /// Handle client/checkVersion /// /// /// /// /// public string ValidateGameVersion(string url, EmptyRequestData info, string sessionID) { return _httpResponseUtil.GetBody(_gameController.GetValidGameVersion(sessionID)); } /// /// Handle client/game/keepalive /// /// /// /// /// public string GameKeepalive(string url, EmptyRequestData info, string sessionID) { return _httpResponseUtil.GetBody(_gameController.GetKeepAlive(sessionID)); } /// /// Handle singleplayer/settings/version /// /// /// /// /// public string GetVersion(string url, EmptyRequestData info, 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 info, string sessionID) { return _httpResponseUtil.NullResponse(); } /// /// Handle singleplayer/settings/getRaidTime /// /// /// /// /// public string GetRaidTime(string url, GetRaidTimeRequest info, string sessionID) { return _httpResponseUtil.NoBody(_gameController.GetRaidTime(sessionID, info)); } /// /// Handle /client/survey /// /// /// /// /// public string GetSurvey(string url, EmptyRequestData info, string sessionID) { return _httpResponseUtil.GetBody(_gameController.GetSurvey(sessionID)); } /// /// Handle client/survey/view /// /// /// /// /// public string GetSurveyView(string url, SendSurveyOpinionRequest info, string sessionID) { return _httpResponseUtil.NullResponse(); } /// /// Handle client/survey/opinion /// /// /// /// /// public string SendSurveyOpinion(string url, SendSurveyOpinionRequest info, string sessionID) { return _httpResponseUtil.NullResponse(); } }