using SPTarkov.DI.Annotations; using SPTarkov.Server.Core.Controllers; using SPTarkov.Server.Core.Models.Common; using SPTarkov.Server.Core.Models.Eft.Common; using SPTarkov.Server.Core.Models.Eft.Match; using SPTarkov.Server.Core.Services; using SPTarkov.Server.Core.Utils; using static SPTarkov.Server.Core.Services.MatchLocationService; namespace SPTarkov.Server.Core.Callbacks; [Injectable] public class MatchCallbacks(HttpResponseUtil httpResponseUtil, MatchController matchController, DatabaseService databaseService) { /// /// Handle client/match/updatePing /// /// /// /// Session/player id /// public ValueTask UpdatePing(string url, UpdatePingRequestData info, MongoId sessionID) { return new ValueTask(httpResponseUtil.NullResponse()); } /// /// Handle client/match/exit /// /// /// /// Session/player id /// public ValueTask ExitMatch(string url, EmptyRequestData _, MongoId sessionID) { return new ValueTask(httpResponseUtil.NullResponse()); } /// /// Handle client/match/group/exit_from_menu /// /// public ValueTask ExitFromMenu(string url, EmptyRequestData _, MongoId sessionID) { return new ValueTask(httpResponseUtil.NullResponse()); } /// /// Handle client/match/group/current /// /// public ValueTask GroupCurrent(string url, EmptyRequestData _, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(new MatchGroupCurrentResponse { Squad = [] })); } /// /// Handle client/match/group/looking/start /// /// public ValueTask StartGroupSearch(string url, EmptyRequestData _, MongoId sessionID) { return new ValueTask(httpResponseUtil.NullResponse()); } /// /// Handle client/match/group/looking/stop /// /// public ValueTask StopGroupSearch(string url, EmptyRequestData _, MongoId sessionID) { return new ValueTask(httpResponseUtil.NullResponse()); } /// /// Handle client/match/group/invite/send /// /// public ValueTask SendGroupInvite(string url, MatchGroupInviteSendRequest info, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody("2427943f23698ay9f2863735")); } /// /// Handle client/match/group/invite/accept /// /// public ValueTask AcceptGroupInvite(string url, RequestIdRequest info, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(new List { new() })); } /// /// Handle client/match/group/invite/decline /// /// /// /// Session/player id /// public ValueTask DeclineGroupInvite(string url, RequestIdRequest info, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(true)); } /// /// Handle client/match/group/invite/cancel /// /// /// /// Session/player id /// public ValueTask CancelGroupInvite(string url, RequestIdRequest info, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(true)); } /// /// Handle client/match/group/transfer /// /// /// /// Session/player id /// public ValueTask TransferGroup(string url, MatchGroupTransferRequest info, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(true)); } /// /// Handle client/match/group/invite/cancel-all /// /// public ValueTask CancelAllGroupInvite(string url, EmptyRequestData _, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(true)); } /// /// Handle client/putMetrics /// /// public ValueTask PutMetrics(string url, PutMetricsRequestData info, MongoId sessionId) { return new ValueTask(httpResponseUtil.NullResponse()); } /// /// Handle client/analytics/event-disconnect /// /// public ValueTask EventDisconnect(string url, PutMetricsRequestData request, MongoId sessionId) { return new ValueTask(httpResponseUtil.NullResponse()); } /// /// Handle client/match/available /// /// public ValueTask ServerAvailable(string url, EmptyRequestData _, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(matchController.GetEnabled())); } /// /// Handle match/group/start_game /// /// public ValueTask JoinMatch(string url, MatchGroupJoinRequest request, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(matchController.JoinMatch(request, sessionID))); } /// /// Handle client/getMetricsConfig /// /// public ValueTask GetMetrics(string url, EmptyRequestData _, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(databaseService.GetMatch().Metrics)); } /// /// Called periodically while in a group /// Handle client/match/group/status /// /// public ValueTask GetGroupStatus(string url, MatchGroupStatusRequest info, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(matchController.GetGroupStatus(info))); } /// /// Handle client/match/group/delete /// /// public ValueTask DeleteGroup(string url, DeleteGroupRequest info, MongoId sessionID) { matchController.DeleteGroup(info); return new ValueTask(httpResponseUtil.GetBody(true)); } /// /// Handle client/match/group/leave /// /// public ValueTask LeaveGroup(string url, EmptyRequestData _, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(true)); } /// /// Handle client/match/group/player/remove /// /// public ValueTask RemovePlayerFromGroup(string url, MatchGroupPlayerRemoveRequest info, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(true)); } /// /// Handle client/match/local/start /// /// public ValueTask StartLocalRaid(string url, StartLocalRaidRequestData info, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(matchController.StartLocalRaid(sessionID, info))); } /// /// Handle client/match/local/end /// /// public ValueTask EndLocalRaid(string url, EndLocalRaidRequestData info, MongoId sessionID) { matchController.EndLocalRaid(sessionID, info); return new ValueTask(httpResponseUtil.NullResponse()); } /// /// Handle client/raid/configuration /// /// public ValueTask GetRaidConfiguration(string url, GetRaidConfigurationRequestData info, MongoId sessionID) { matchController.ConfigureOfflineRaid(info, sessionID); return new ValueTask(httpResponseUtil.NullResponse()); } /// /// Handle client/raid/configuration-by-profile /// /// /// /// Session/player id /// public ValueTask GetConfigurationByProfile(string url, GetRaidConfigurationRequestData info, MongoId sessionID) { return new ValueTask(httpResponseUtil.NullResponse()); } /// /// Handle client/match/group/raid/ready /// /// public ValueTask RaidReady(string url, EmptyRequestData _, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(true)); } /// /// Handle client/match/group/raid/not-ready /// /// /// /// Session/player id /// public ValueTask NotRaidReady(string url, EmptyRequestData _, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(true)); } /// /// Handle client/match/group/start_game /// public Task StartGameAsGroupLeader(string url, MatchGroupStartGameRequest? request, MongoId? sessionId) { // returns a ProfileStatusResponse object throw new NotImplementedException(); } }