using SPTarkov.DI.Annotations; using SPTarkov.Server.Core.Controllers; using SPTarkov.Server.Core.DI; using SPTarkov.Server.Core.Models.Common; using SPTarkov.Server.Core.Models.Eft.Common; using SPTarkov.Server.Core.Models.Eft.Common.Request; using SPTarkov.Server.Core.Models.Eft.Dialog; using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Callbacks; [Injectable(TypePriority = OnUpdateOrder.DialogueCallbacks)] public class DialogueCallbacks(TimeUtil timeUtil, HttpResponseUtil httpResponseUtil, DialogueController dialogueController) : IOnUpdate { public Task OnUpdate(long timeSinceLastRun) { dialogueController.Update(); return Task.FromResult(true); } /// /// Handle client/friend/list /// /// public virtual ValueTask GetFriendList(string url, EmptyRequestData _, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(dialogueController.GetFriendList(sessionID))); } /// /// Handle client/chatServer/list /// /// public virtual ValueTask GetChatServerList(string url, GetChatServerListRequestData request, MongoId sessionID) { var chatServer = new List { new() { Id = new MongoId(), RegistrationId = 20, DateTime = timeUtil.GetTimeStamp(), IsDeveloper = true, Regions = ["EUR"], VersionId = request.VersionId, Ip = "", Port = 0, Chats = [new Chat { Id = "0", Members = 0 }], }, }; return new ValueTask(httpResponseUtil.GetBody(chatServer)); } /// /// Handle client/mail/dialog/list /// TODO: request properties are not handled /// /// public virtual ValueTask GetMailDialogList(string url, GetMailDialogListRequestData request, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(dialogueController.GenerateDialogueList(sessionID), 0, null, false)); } /// /// Handle client/mail/dialog/view /// /// /// /// Session/player id /// public virtual ValueTask GetMailDialogView(string url, GetMailDialogViewRequestData request, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(dialogueController.GenerateDialogueView(request, sessionID), 0, null, false)); } /// /// Handle client/mail/dialog/info /// /// public virtual ValueTask GetMailDialogInfo(string url, GetMailDialogInfoRequestData request, MongoId sessionID) { return new ValueTask( httpResponseUtil.GetBody(dialogueController.GetDialogueInfo(request.DialogId ?? MongoId.Empty(), sessionID)) ); } /// /// Handle client/mail/dialog/remove /// /// public virtual ValueTask RemoveDialog(string url, RemoveDialogRequestData request, MongoId sessionID) { dialogueController.RemoveDialogue(request.DialogId ?? MongoId.Empty(), sessionID); return new ValueTask(httpResponseUtil.EmptyArrayResponse()); } /// /// Handle client/mail/dialog/pin /// /// public virtual ValueTask PinDialog(string url, PinDialogRequestData request, MongoId sessionID) { dialogueController.SetDialoguePin(request.DialogId ?? MongoId.Empty(), true, sessionID); return new ValueTask(httpResponseUtil.EmptyArrayResponse()); } /// /// Handle client/mail/dialog/unpin /// /// public virtual ValueTask UnpinDialog(string url, PinDialogRequestData request, MongoId sessionID) { dialogueController.SetDialoguePin(request.DialogId ?? MongoId.Empty(), false, sessionID); return new ValueTask(httpResponseUtil.EmptyArrayResponse()); } /// /// Handle client/mail/dialog/read /// /// public virtual ValueTask SetRead(string url, SetDialogReadRequestData request, MongoId sessionID) { dialogueController.SetRead(request.Dialogs, sessionID); return new ValueTask(httpResponseUtil.EmptyArrayResponse()); } /// /// Handle client/mail/dialog/getAllAttachments /// /// public virtual ValueTask GetAllAttachments(string url, GetAllAttachmentsRequestData request, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(dialogueController.GetAllAttachments(request.DialogId, sessionID))); } /// /// Handle client/mail/msg/send /// /// public virtual async ValueTask SendMessage(string url, SendMessageRequest request, MongoId sessionID) { return httpResponseUtil.GetBody(await dialogueController.SendMessage(sessionID, request)); } /// /// Handle client/friend/request/list/outbox /// /// public virtual ValueTask ListOutbox(string url, EmptyRequestData _, MongoId sessionID) { return new ValueTask(httpResponseUtil.EmptyArrayResponse()); } /// /// Handle client/friend/request/list/inbox /// /// public virtual ValueTask ListInbox(string url, EmptyRequestData _, MongoId sessionID) { return new ValueTask(httpResponseUtil.EmptyArrayResponse()); } /// /// Handle client/friend/request/send /// /// public virtual ValueTask SendFriendRequest(string url, FriendRequestData request, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(dialogueController.SendFriendRequest(sessionID, request))); } /// /// Handle client/friend/request/accept-all /// /// public virtual ValueTask AcceptAllFriendRequests(string url, EmptyRequestData _, MongoId sessionID) { return new ValueTask(httpResponseUtil.NullResponse()); } /// /// Handle client/friend/request/accept /// /// public virtual ValueTask AcceptFriendRequest(string url, AcceptFriendRequestData request, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(true)); } /// /// Handle client/friend/request/decline /// /// public virtual ValueTask DeclineFriendRequest(string url, DeclineFriendRequestData request, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(true)); } /// /// Handle client/friend/request/cancel /// /// public virtual ValueTask CancelFriendRequest(string url, CancelFriendRequestData request, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(true)); } /// /// Handle client/friend/delete /// /// public virtual ValueTask DeleteFriend(string url, DeleteFriendRequest request, MongoId sessionID) { dialogueController.DeleteFriend(sessionID, request); return new ValueTask(httpResponseUtil.NullResponse()); } /// /// Handle client/friend/ignore/set /// /// public virtual ValueTask IgnoreFriend(string url, UIDRequestData request, MongoId sessionID) { return new ValueTask(httpResponseUtil.NullResponse()); } /// /// Handle client/friend/ignore/remove /// /// public virtual ValueTask UnIgnoreFriend(string url, UIDRequestData request, MongoId sessionID) { return new ValueTask(httpResponseUtil.NullResponse()); } /// /// Handle /client/mail/dialog/clear /// /// public virtual ValueTask ClearMail(string url, ClearMailMessageRequest request, MongoId sessionID) { dialogueController.ClearMessages(sessionID, request); return new ValueTask(httpResponseUtil.EmptyArrayResponse()); } /// /// Handle /client/mail/dialog/group/create /// /// public virtual ValueTask CreateGroupMail(string url, CreateGroupMailRequest request, MongoId sessionID) { return new ValueTask(httpResponseUtil.EmptyArrayResponse()); } /// /// Handle /client/mail/dialog/group/owner/change /// /// public virtual ValueTask ChangeMailGroupOwner(string url, ChangeGroupMailOwnerRequest request, MongoId sessionID) { return new ValueTask("Not Implemented!"); // Not implemented in Node } /// /// Handle /client/mail/dialog/group/users/add /// /// public virtual ValueTask AddUserToMail(string url, AddUserGroupMailRequest request, MongoId sessionID) { return new ValueTask("Not Implemented!"); // Not implemented in Node } /// /// Handle /client/mail/dialog/group/users/remove /// /// public virtual ValueTask RemoveUserFromMail(string url, RemoveUserGroupMailRequest request, MongoId sessionID) { return new ValueTask("Not Implemented!"); // Not implemented in Node } }