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( 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 = new Models.Common.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, 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 async ValueTask SendMessage( string url, SendMessageRequest request, string sessionID ) { return _httpResponseUtil.GetBody(await _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 ) { _dialogueController.ClearMessages(sessionID, request); 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 } }