Add GPose Together (#82)

* add api glue

* most of gpose together impl

* more cleanup and impl

* more impl

* minor fixes and chara name abbreviations

---------

Co-authored-by: Stanley Dimant <root.darkarchon@outlook.com>
This commit is contained in:
rootdarkarchon
2025-01-19 16:19:06 +01:00
committed by Loporrit
parent c835854fb6
commit 93aff198f2
15 changed files with 1351 additions and 22 deletions

View File

@@ -1,6 +1,5 @@
using MareSynchronos.API.Data;
using MareSynchronos.API.Dto.CharaData;
using MareSynchronos.Services.CharaData.Models;
using Microsoft.AspNetCore.SignalR.Client;
using Microsoft.Extensions.Logging;
@@ -134,4 +133,96 @@ public partial class ApiController
return null;
}
}
public async Task<string> GposeLobbyCreate()
{
if (!IsConnected) return string.Empty;
try
{
Logger.LogDebug("Creating GPose Lobby");
return await _mareHub!.InvokeAsync<string>(nameof(GposeLobbyCreate)).ConfigureAwait(false);
}
catch (Exception ex)
{
Logger.LogWarning(ex, "Failed to create GPose lobby");
return string.Empty;
}
}
public async Task<bool> GposeLobbyLeave()
{
if (!IsConnected) return true;
try
{
Logger.LogDebug("Leaving current GPose Lobby");
return await _mareHub!.InvokeAsync<bool>(nameof(GposeLobbyLeave)).ConfigureAwait(false);
}
catch (Exception ex)
{
Logger.LogWarning(ex, "Failed to leave GPose lobby");
return false;
}
}
public async Task<List<UserData>> GposeLobbyJoin(string lobbyId)
{
if (!IsConnected) return [];
try
{
Logger.LogDebug("Joining GPose Lobby {id}", lobbyId);
return await _mareHub!.InvokeAsync<List<UserData>>(nameof(GposeLobbyJoin), lobbyId).ConfigureAwait(false);
}
catch (Exception ex)
{
Logger.LogWarning(ex, "Failed to join GPose lobby {id}", lobbyId);
return [];
}
}
public async Task GposeLobbyPushCharacterData(CharaDataDownloadDto charaDownloadDto)
{
if (!IsConnected) return;
try
{
Logger.LogDebug("Sending Chara Data to GPose Lobby");
await _mareHub!.InvokeAsync(nameof(GposeLobbyPushCharacterData), charaDownloadDto).ConfigureAwait(false);
}
catch (Exception ex)
{
Logger.LogWarning(ex, "Failed to send Chara Data to GPose lobby");
}
}
public async Task GposeLobbyPushPoseData(PoseData poseData)
{
if (!IsConnected) return;
try
{
Logger.LogDebug("Sending Pose Data to GPose Lobby");
await _mareHub!.InvokeAsync(nameof(GposeLobbyPushPoseData), poseData).ConfigureAwait(false);
}
catch (Exception ex)
{
Logger.LogWarning(ex, "Failed to send Pose Data to GPose lobby");
}
}
public async Task GposeLobbyPushWorldData(WorldData worldData)
{
if (!IsConnected) return;
try
{
await _mareHub!.InvokeAsync(nameof(GposeLobbyPushWorldData), worldData).ConfigureAwait(false);
}
catch (Exception ex)
{
Logger.LogWarning(ex, "Failed to send World Data to GPose lobby");
}
}
}