using MareSynchronos.API.Data; using MareSynchronos.API.Data.Enum; using MareSynchronos.API.Dto; using MareSynchronos.API.Dto.Chat; using MareSynchronos.API.Dto.CharaData; using MareSynchronos.API.Dto.Group; using MareSynchronos.API.Dto.User; using MareSynchronos.MareConfiguration.Models; using MareSynchronos.Services.Mediator; using Microsoft.AspNetCore.SignalR.Client; using Microsoft.Extensions.Logging; using static FFXIVClientStructs.FFXIV.Client.Game.UI.MapMarkerData.Delegates; namespace MareSynchronos.WebAPI; public partial class ApiController { public Task Client_DownloadReady(Guid requestId) { Logger.LogDebug("Server sent {requestId} ready", requestId); Mediator.Publish(new DownloadReadyMessage(requestId)); return Task.CompletedTask; } public Task Client_GroupChangePermissions(GroupPermissionDto groupPermission) { Logger.LogTrace("Client_GroupChangePermissions: {perm}", groupPermission); ExecuteSafely(() => _pairManager.SetGroupPermissions(groupPermission)); return Task.CompletedTask; } public Task Client_GroupChatMsg(GroupChatMsgDto groupChatMsgDto) { Logger.LogDebug("Client_GroupChatMsg: {msg}", groupChatMsgDto.Message); Mediator.Publish(new GroupChatMsgMessage(groupChatMsgDto.Group, groupChatMsgDto.Message)); return Task.CompletedTask; } public Task Client_GroupPairChangePermissions(GroupPairUserPermissionDto dto) { Logger.LogTrace("Client_GroupPairChangePermissions: {dto}", dto); ExecuteSafely(() => { if (string.Equals(dto.UID, UID, StringComparison.Ordinal)) _pairManager.SetGroupUserPermissions(dto); else _pairManager.SetGroupPairUserPermissions(dto); }); return Task.CompletedTask; } public Task Client_GroupDelete(GroupDto groupDto) { Logger.LogTrace("Client_GroupDelete: {dto}", groupDto); ExecuteSafely(() => _pairManager.RemoveGroup(groupDto.Group)); return Task.CompletedTask; } public Task Client_GroupPairChangeUserInfo(GroupPairUserInfoDto userInfo) { Logger.LogTrace("Client_GroupPairChangeUserInfo: {dto}", userInfo); ExecuteSafely(() => { if (string.Equals(userInfo.UID, UID, StringComparison.Ordinal)) _pairManager.SetGroupStatusInfo(userInfo); else _pairManager.SetGroupPairStatusInfo(userInfo); }); return Task.CompletedTask; } public Task Client_GroupPairJoined(GroupPairFullInfoDto groupPairInfoDto) { Logger.LogTrace("Client_GroupPairJoined: {dto}", groupPairInfoDto); ExecuteSafely(() => _pairManager.AddGroupPair(groupPairInfoDto)); return Task.CompletedTask; } public Task Client_GroupPairLeft(GroupPairDto groupPairDto) { Logger.LogTrace("Client_GroupPairLeft: {dto}", groupPairDto); ExecuteSafely(() => _pairManager.RemoveGroupPair(groupPairDto)); return Task.CompletedTask; } public Task Client_GroupSendFullInfo(GroupFullInfoDto groupInfo) { Logger.LogTrace("Client_GroupSendFullInfo: {dto}", groupInfo); ExecuteSafely(() => _pairManager.AddGroup(groupInfo)); return Task.CompletedTask; } public Task Client_GroupSendInfo(GroupInfoDto groupInfo) { Logger.LogTrace("Client_GroupSendInfo: {dto}", groupInfo); ExecuteSafely(() => _pairManager.SetGroupInfo(groupInfo)); return Task.CompletedTask; } public Task Client_ReceiveServerMessage(MessageSeverity messageSeverity, string message) { switch (messageSeverity) { case MessageSeverity.Error: Mediator.Publish(new NotificationMessage("Warning from " + _serverManager.CurrentServer!.ServerName, message, NotificationType.Error, TimeSpan.FromSeconds(7.5))); break; case MessageSeverity.Warning: Mediator.Publish(new NotificationMessage("Warning from " + _serverManager.CurrentServer!.ServerName, message, NotificationType.Warning, TimeSpan.FromSeconds(7.5))); break; case MessageSeverity.Information: if (_doNotNotifyOnNextInfo) { _doNotNotifyOnNextInfo = false; break; } Mediator.Publish(new NotificationMessage("Info from " + _serverManager.CurrentServer!.ServerName, message, NotificationType.Info, TimeSpan.FromSeconds(5))); break; } return Task.CompletedTask; } public Task Client_UpdateSystemInfo(SystemInfoDto systemInfo) { SystemInfoDto = systemInfo; return Task.CompletedTask; } public Task Client_UserAddClientPair(UserPairDto dto) { Logger.LogDebug("Client_UserAddClientPair: {dto}", dto); ExecuteSafely(() => _pairManager.AddUserPair(dto, addToLastAddedUser: true)); return Task.CompletedTask; } public Task Client_UserChatMsg(UserChatMsgDto chatMsgDto) { Logger.LogDebug("Client_UserChatMsg: {msg}", chatMsgDto.Message); Mediator.Publish(new UserChatMsgMessage(chatMsgDto.Message)); return Task.CompletedTask; } public Task Client_UserReceiveCharacterData(OnlineUserCharaDataDto dataDto) { Logger.LogTrace("Client_UserReceiveCharacterData: {user}", dataDto.User); ExecuteSafely(() => _pairManager.ReceiveCharaData(dataDto)); return Task.CompletedTask; } public Task Client_UserReceiveUploadStatus(UserDto dto) { Logger.LogTrace("Client_UserReceiveUploadStatus: {dto}", dto); ExecuteSafely(() => _pairManager.ReceiveUploadStatus(dto)); return Task.CompletedTask; } public Task Client_UserRemoveClientPair(UserDto dto) { Logger.LogDebug("Client_UserRemoveClientPair: {dto}", dto); ExecuteSafely(() => _pairManager.RemoveUserPair(dto)); return Task.CompletedTask; } public Task Client_UserSendOffline(UserDto dto) { Logger.LogDebug("Client_UserSendOffline: {dto}", dto); ExecuteSafely(() => _pairManager.MarkPairOffline(dto.User)); return Task.CompletedTask; } public Task Client_UserSendOnline(OnlineUserIdentDto dto) { Logger.LogDebug("Client_UserSendOnline: {dto}", dto); ExecuteSafely(() => _pairManager.MarkPairOnline(dto)); return Task.CompletedTask; } public Task Client_UserUpdateOtherPairPermissions(UserPermissionsDto dto) { Logger.LogDebug("Client_UserUpdateOtherPairPermissions: {dto}", dto); ExecuteSafely(() => _pairManager.UpdatePairPermissions(dto)); return Task.CompletedTask; } public Task Client_UserUpdateProfile(UserDto dto) { Logger.LogDebug("Client_UserUpdateProfile: {dto}", dto); ExecuteSafely(() => Mediator.Publish(new ClearProfileDataMessage(dto.User))); return Task.CompletedTask; } public Task Client_UserUpdateSelfPairPermissions(UserPermissionsDto dto) { Logger.LogDebug("Client_UserUpdateSelfPairPermissions: {dto}", dto); ExecuteSafely(() => _pairManager.UpdateSelfPairPermissions(dto)); return Task.CompletedTask; } public Task Client_GposeLobbyJoin(UserData userData) { Logger.LogDebug("Client_GposeLobbyJoin: {dto}", userData); ExecuteSafely(() => Mediator.Publish(new GposeLobbyUserJoin(userData))); return Task.CompletedTask; } public Task Client_GposeLobbyLeave(UserData userData) { Logger.LogDebug("Client_GposeLobbyLeave: {dto}", userData); ExecuteSafely(() => Mediator.Publish(new GPoseLobbyUserLeave(userData))); return Task.CompletedTask; } public Task Client_GposeLobbyPushCharacterData(CharaDataDownloadDto charaDownloadDto) { Logger.LogDebug("Client_GposeLobbyPushCharacterData: {dto}", charaDownloadDto.Uploader); ExecuteSafely(() => Mediator.Publish(new GPoseLobbyReceiveCharaData(charaDownloadDto))); return Task.CompletedTask; } public Task Client_GposeLobbyPushPoseData(UserData userData, PoseData poseData) { Logger.LogDebug("Client_GposeLobbyPushPoseData: {dto}", userData); ExecuteSafely(() => Mediator.Publish(new GPoseLobbyReceivePoseData(userData, poseData))); return Task.CompletedTask; } public Task Client_GposeLobbyPushWorldData(UserData userData, WorldData worldData) { //Logger.LogDebug("Client_GposeLobbyPushWorldData: {dto}", userData); ExecuteSafely(() => Mediator.Publish(new GPoseLobbyReceiveWorldData(userData, worldData))); return Task.CompletedTask; } public void OnDownloadReady(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_DownloadReady), act); } public void OnGroupChangePermissions(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_GroupChangePermissions), act); } public void OnGroupChatMsg(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_GroupChatMsg), act); } public void OnGroupPairChangePermissions(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_GroupPairChangePermissions), act); } public void OnGroupDelete(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_GroupDelete), act); } public void OnGroupPairChangeUserInfo(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_GroupPairChangeUserInfo), act); } public void OnGroupPairJoined(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_GroupPairJoined), act); } public void OnGroupPairLeft(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_GroupPairLeft), act); } public void OnGroupSendFullInfo(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_GroupSendFullInfo), act); } public void OnGroupSendInfo(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_GroupSendInfo), act); } public void OnReceiveServerMessage(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_ReceiveServerMessage), act); } public void OnUpdateSystemInfo(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_UpdateSystemInfo), act); } public void OnUserAddClientPair(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_UserAddClientPair), act); } public void OnUserChatMsg(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_UserChatMsg), act); } public void OnUserReceiveCharacterData(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_UserReceiveCharacterData), act); } public void OnUserReceiveUploadStatus(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_UserReceiveUploadStatus), act); } public void OnUserRemoveClientPair(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_UserRemoveClientPair), act); } public void OnUserSendOffline(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_UserSendOffline), act); } public void OnUserSendOnline(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_UserSendOnline), act); } public void OnUserUpdateOtherPairPermissions(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_UserUpdateOtherPairPermissions), act); } public void OnUserUpdateProfile(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_UserUpdateProfile), act); } public void OnUserUpdateSelfPairPermissions(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_UserUpdateSelfPairPermissions), act); } public void OnGposeLobbyJoin(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_GposeLobbyJoin), act); } public void OnGposeLobbyLeave(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_GposeLobbyLeave), act); } public void OnGposeLobbyPushCharacterData(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_GposeLobbyPushCharacterData), act); } public void OnGposeLobbyPushPoseData(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_GposeLobbyPushPoseData), act); } public void OnGposeLobbyPushWorldData(Action act) { if (_initialized) return; _mareHub!.On(nameof(Client_GposeLobbyPushWorldData), act); } private void ExecuteSafely(Action act) { try { act(); } catch (Exception ex) { Logger.LogCritical(ex, "Error on executing safely"); } } }