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 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, 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, sessionID) ) ); } /// /// Handle client/mail/dialog/remove /// /// public virtual ValueTask RemoveDialog( string url, RemoveDialogRequestData request, MongoId sessionID ) { dialogueController.RemoveDialogue(request.DialogId, 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, 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, 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()); } public virtual ValueTask ClearMail( string url, ClearMailMessageRequest request, MongoId sessionID ) { dialogueController.ClearMessages(sessionID, request); return new ValueTask(httpResponseUtil.EmptyArrayResponse()); } public virtual ValueTask CreateGroupMail( string url, CreateGroupMailRequest request, MongoId sessionID ) { return new ValueTask(httpResponseUtil.EmptyArrayResponse()); } public virtual ValueTask ChangeMailGroupOwner( string url, ChangeGroupMailOwnerRequest request, MongoId sessionID ) { return new ValueTask("Not Implemented!"); // Not implemented in Node } public virtual ValueTask AddUserToMail( string url, AddUserGroupMailRequest request, MongoId sessionID ) { return new ValueTask("Not Implemented!"); // Not implemented in Node } public virtual ValueTask RemoveUserFromMail( string url, RemoveUserGroupMailRequest request, MongoId sessionID ) { return new ValueTask("Not Implemented!"); // Not implemented in Node } }