using Core.Annotations; using Core.Controllers; using Core.DI; using Core.Models.Eft.Common; using Core.Models.Eft.Common.Request; using Core.Models.Eft.Game; using Core.Models.Eft.HttpResponse; using Core.Servers; using Core.Utils; namespace Core.Callbacks; [Injectable(TypePriority = OnLoadOrder.GameCallbacks)] public class GameCallbacks : OnLoad { protected HttpResponseUtil _httpResponseUtil; protected Watermark _watermark; protected SaveServer _saveServer; protected GameController _gameController; protected TimeUtil _timeUtil; public GameCallbacks ( HttpResponseUtil httpResponseUtil, Watermark watermark, SaveServer saveServer, GameController gameController, TimeUtil timeUtil ) { _httpResponseUtil = httpResponseUtil; _watermark = watermark; _saveServer = saveServer; _gameController = gameController; _timeUtil = timeUtil; } public async Task OnLoad() { _gameController.Load(); } 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 today = _timeUtil.GetDate(); var startTimestampMS = _timeUtil.GetTimeStamp(); _gameController.GameStart(url, info, sessionID, startTimestampMS); return _httpResponseUtil.GetBody(new GameStartResponse() { UtcTime = startTimestampMS / 1000 }); } /// /// 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, object info, string sessionID) { return _httpResponseUtil.NullResponse(); } /// /// Handle client/survey/opinion /// /// /// /// /// public string SendSurveyOpinion(string url, SendSurveyOpinionRequest info, string sessionID) { return _httpResponseUtil.NullResponse(); } }