using SPTarkov.DI.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.Dialog; using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Callbacks; [Injectable(TypePriority = OnUpdateOrder.DialogueCallbacks)] public class DialogueCallbacks( HashUtil _hashUtil, 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 _, string sessionID) { return new ValueTask(_httpResponseUtil.GetBody(_dialogueController.GetFriendList(sessionID))); } /// /// Handle client/chatServer/list /// /// public virtual ValueTask GetChatServerList(string url, GetChatServerListRequestData request, string sessionID) { var chatServer = new List { new() { Id = _hashUtil.Generate(), RegistrationId = 20, DateTime = _timeUtil.GetTimeStamp(), IsDeveloper = true, Regions = ["EUR"], VersionId = "bgkidft87ddd", 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, string 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, string 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, string sessionID) { return new ValueTask(_httpResponseUtil.GetBody(_dialogueController.GetDialogueInfo(request.DialogId, sessionID))); } /// /// Handle client/mail/dialog/remove /// /// public virtual ValueTask RemoveDialog(string url, RemoveDialogRequestData request, string sessionID) { _dialogueController.RemoveDialogue(request.DialogId, sessionID); return new ValueTask(_httpResponseUtil.EmptyArrayResponse()); } /// /// Handle client/mail/dialog/pin /// /// public virtual ValueTask PinDialog(string url, PinDialogRequestData request, string sessionID) { _dialogueController.SetDialoguePin(request.DialogId, true, sessionID); return new ValueTask(_httpResponseUtil.EmptyArrayResponse()); } /// /// Handle client/mail/dialog/unpin /// /// public virtual ValueTask UnpinDialog(string url, PinDialogRequestData request, string sessionID) { _dialogueController.SetDialoguePin(request.DialogId, false, sessionID); return new ValueTask(_httpResponseUtil.EmptyArrayResponse()); } /// /// Handle client/mail/dialog/read /// /// public virtual ValueTask SetRead(string url, SetDialogReadRequestData request, string sessionID) { _dialogueController.SetRead(request.Dialogs, sessionID); return new ValueTask(_httpResponseUtil.EmptyArrayResponse()); } /// /// Handle client/mail/dialog/getAllAttachments /// /// public virtual ValueTask GetAllAttachments(string url, GetAllAttachmentsRequestData request, string sessionID) { return new ValueTask(_httpResponseUtil.GetBody(_dialogueController.GetAllAttachments(request.DialogId, sessionID))); } /// /// Handle client/mail/msg/send /// /// public virtual ValueTask SendMessage(string url, SendMessageRequest request, string sessionID) { return new ValueTask(_httpResponseUtil.GetBody(_dialogueController.SendMessage(sessionID, request))); } /// /// Handle client/friend/request/list/outbox /// /// public virtual ValueTask ListOutbox(string url, EmptyRequestData _, string sessionID) { return new ValueTask(_httpResponseUtil.EmptyArrayResponse()); } /// /// Handle client/friend/request/list/inbox /// /// public virtual ValueTask ListInbox(string url, EmptyRequestData _, string sessionID) { return new ValueTask(_httpResponseUtil.EmptyArrayResponse()); } /// /// Handle client/friend/request/send /// /// public virtual ValueTask SendFriendRequest(string url, FriendRequestData request, string sessionID) { return new ValueTask(_httpResponseUtil.GetBody(_dialogueController.SendFriendRequest(sessionID, request))); } /// /// Handle client/friend/request/accept-all /// /// public virtual ValueTask AcceptAllFriendRequests(string url, EmptyRequestData _, string sessionID) { return new ValueTask(_httpResponseUtil.NullResponse()); } /// /// Handle client/friend/request/accept /// /// public virtual ValueTask AcceptFriendRequest(string url, AcceptFriendRequestData request, string sessionID) { return new ValueTask(_httpResponseUtil.GetBody(true)); } /// /// Handle client/friend/request/decline /// /// public virtual ValueTask DeclineFriendRequest(string url, DeclineFriendRequestData request, string sessionID) { return new ValueTask(_httpResponseUtil.GetBody(true)); } /// /// Handle client/friend/request/cancel /// /// public virtual ValueTask CancelFriendRequest(string url, CancelFriendRequestData request, string sessionID) { return new ValueTask(_httpResponseUtil.GetBody(true)); } /// /// Handle client/friend/delete /// /// public virtual ValueTask DeleteFriend(string url, DeleteFriendRequest request, string sessionID) { _dialogueController.DeleteFriend(sessionID, request); return new ValueTask(_httpResponseUtil.NullResponse()); } /// /// Handle client/friend/ignore/set /// /// public virtual ValueTask IgnoreFriend(string url, UIDRequestData request, string sessionID) { return new ValueTask(_httpResponseUtil.NullResponse()); } /// /// Handle client/friend/ignore/remove /// /// public virtual ValueTask UnIgnoreFriend(string url, UIDRequestData request, string sessionID) { return new ValueTask(_httpResponseUtil.NullResponse()); } public virtual ValueTask ClearMail(string url, ClearMailMessageRequest request, string sessionID) { return new ValueTask(_httpResponseUtil.EmptyArrayResponse()); } public virtual ValueTask CreateGroupMail(string url, CreateGroupMailRequest request, string sessionID) { return new ValueTask(_httpResponseUtil.EmptyArrayResponse()); } public virtual ValueTask ChangeMailGroupOwner(string url, ChangeGroupMailOwnerRequest request, string sessionID) { return new ValueTask("Not Implemented!"); // Not implemented in Node } public virtual ValueTask AddUserToMail(string url, AddUserGroupMailRequest request, string sessionID) { return new ValueTask("Not Implemented!"); // Not implemented in Node } public virtual ValueTask RemoveUserFromMail(string url, RemoveUserGroupMailRequest request, string sessionID) { return new ValueTask("Not Implemented!"); // Not implemented in Node } }