maybe fix issue with char data being accidentally yeeted without reason and sent empty
This commit is contained in:
@@ -46,6 +46,9 @@ public class CharacterDataFactory
|
|||||||
return previousData;
|
return previousData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var previousFileReplacements = previousData.FileReplacements.ToDictionary(d => d.Key, d => d.Value);
|
||||||
|
var previousGlamourerData = previousData.GlamourerString.ToDictionary(d => d.Key, d => d.Value);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return CreateCharacterData(previousData, objectKind, playerPointer, token);
|
return CreateCharacterData(previousData, objectKind, playerPointer, token);
|
||||||
@@ -53,15 +56,17 @@ public class CharacterDataFactory
|
|||||||
catch (OperationCanceledException)
|
catch (OperationCanceledException)
|
||||||
{
|
{
|
||||||
Logger.Debug("Cancelled creating Character data");
|
Logger.Debug("Cancelled creating Character data");
|
||||||
return previousData;
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Logger.Warn("Failed to create " + objectKind + " data");
|
Logger.Warn("Failed to create " + objectKind + " data");
|
||||||
Logger.Warn(e.Message);
|
Logger.Warn(e.Message);
|
||||||
Logger.Warn(e.StackTrace ?? string.Empty);
|
Logger.Warn(e.StackTrace ?? string.Empty);
|
||||||
return previousData;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
previousData.FileReplacements = previousFileReplacements;
|
||||||
|
previousData.GlamourerString = previousGlamourerData;
|
||||||
|
return previousData;
|
||||||
}
|
}
|
||||||
|
|
||||||
private (string, string) GetIndentationForInheritanceLevel(int inheritanceLevel)
|
private (string, string) GetIndentationForInheritanceLevel(int inheritanceLevel)
|
||||||
|
|||||||
@@ -109,8 +109,11 @@ namespace MareSynchronos.Managers
|
|||||||
{
|
{
|
||||||
Logger.Verbose("Building Cache for " + unprocessedObject.ObjectKind);
|
Logger.Verbose("Building Cache for " + unprocessedObject.ObjectKind);
|
||||||
PermanentDataCache = _characterDataFactory.BuildCharacterData(PermanentDataCache, unprocessedObject.ObjectKind, unprocessedObject.Address, token);
|
PermanentDataCache = _characterDataFactory.BuildCharacterData(PermanentDataCache, unprocessedObject.ObjectKind, unprocessedObject.Address, token);
|
||||||
unprocessedObject.IsProcessing = false;
|
if (!token.IsCancellationRequested)
|
||||||
unprocessedObject.HasUnprocessedUpdate = false;
|
{
|
||||||
|
unprocessedObject.HasUnprocessedUpdate = false;
|
||||||
|
unprocessedObject.IsProcessing = false;
|
||||||
|
}
|
||||||
token.ThrowIfCancellationRequested();
|
token.ThrowIfCancellationRequested();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Authors></Authors>
|
<Authors></Authors>
|
||||||
<Company></Company>
|
<Company></Company>
|
||||||
<Version>0.2.10.0</Version>
|
<Version>0.2.11.0</Version>
|
||||||
<Description></Description>
|
<Description></Description>
|
||||||
<Copyright></Copyright>
|
<Copyright></Copyright>
|
||||||
<PackageProjectUrl>https://github.com/Penumbra-Sync/client</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/Penumbra-Sync/client</PackageProjectUrl>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ using System.IO;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using LZ4;
|
using LZ4;
|
||||||
@@ -203,7 +204,17 @@ namespace MareSynchronos.WebAPI
|
|||||||
|
|
||||||
if (!uploadToken.IsCancellationRequested)
|
if (!uploadToken.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
Logger.Info("Pushing character data for " + character.GetHashCode());
|
Logger.Info("Pushing character data for " + character.GetHashCode() + " to " + string.Join(", ", visibleCharacterIds));
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
foreach (var item in character.FileReplacements)
|
||||||
|
{
|
||||||
|
sb.AppendLine($"FileReplacements for {item.Key}: {item.Value.Count}");
|
||||||
|
}
|
||||||
|
foreach (var item in character.GlamourerData)
|
||||||
|
{
|
||||||
|
sb.AppendLine($"GlamourerData for {item.Key}: {!string.IsNullOrEmpty(item.Value)}");
|
||||||
|
}
|
||||||
|
Logger.Debug("Chara data contained: " + Environment.NewLine + sb.ToString());
|
||||||
await _mareHub!.InvokeAsync(Api.InvokeUserPushCharacterDataToVisibleClients, character, visibleCharacterIds, uploadToken);
|
await _mareHub!.InvokeAsync(Api.InvokeUserPushCharacterDataToVisibleClients, character, visibleCharacterIds, uploadToken);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -184,42 +184,11 @@ namespace MareSynchronos.WebAPI
|
|||||||
await _mareHub.InvokeAsync<ConnectionDto>(Api.InvokeHeartbeat, _dalamudUtil.PlayerNameHashed, token);
|
await _mareHub.InvokeAsync<ConnectionDto>(Api.InvokeHeartbeat, _dalamudUtil.PlayerNameHashed, token);
|
||||||
if (ServerState is ServerState.Connected) // user is authorized && server is legit
|
if (ServerState is ServerState.Connected) // user is authorized && server is legit
|
||||||
{
|
{
|
||||||
Logger.Debug("Initializing data");
|
await InitializeData(token);
|
||||||
_mareHub.On<ClientPairDto, string>(Api.OnUserUpdateClientPairs,
|
|
||||||
UpdateLocalClientPairsCallback);
|
|
||||||
_mareHub.On<CharacterCacheDto, string>(Api.OnUserReceiveCharacterData,
|
|
||||||
ReceiveCharacterDataCallback);
|
|
||||||
_mareHub.On<string>(Api.OnUserRemoveOnlinePairedPlayer,
|
|
||||||
(s) => PairedClientOffline?.Invoke(s));
|
|
||||||
_mareHub.On<string>(Api.OnUserAddOnlinePairedPlayer,
|
|
||||||
(s) => PairedClientOnline?.Invoke(s));
|
|
||||||
_mareHub.On(Api.OnAdminForcedReconnect, UserForcedReconnectCallback);
|
|
||||||
|
|
||||||
PairedClients =
|
|
||||||
await _mareHub!.InvokeAsync<List<ClientPairDto>>(Api.InvokeUserGetPairedClients, token);
|
|
||||||
|
|
||||||
_mareHub.Closed += MareHubOnClosed;
|
_mareHub.Closed += MareHubOnClosed;
|
||||||
_mareHub.Reconnected += MareHubOnReconnected;
|
_mareHub.Reconnected += MareHubOnReconnected;
|
||||||
_mareHub.Reconnecting += MareHubOnReconnecting;
|
_mareHub.Reconnecting += MareHubOnReconnecting;
|
||||||
|
|
||||||
if (IsModerator)
|
|
||||||
{
|
|
||||||
AdminForbiddenFiles =
|
|
||||||
await _mareHub.InvokeAsync<List<ForbiddenFileDto>>(Api.InvokeAdminGetForbiddenFiles,
|
|
||||||
token);
|
|
||||||
AdminBannedUsers =
|
|
||||||
await _mareHub.InvokeAsync<List<BannedUserDto>>(Api.InvokeAdminGetBannedUsers,
|
|
||||||
token);
|
|
||||||
_mareHub.On<BannedUserDto>(Api.OnAdminUpdateOrAddBannedUser,
|
|
||||||
UpdateOrAddBannedUserCallback);
|
|
||||||
_mareHub.On<BannedUserDto>(Api.OnAdminDeleteBannedUser, DeleteBannedUserCallback);
|
|
||||||
_mareHub.On<ForbiddenFileDto>(Api.OnAdminUpdateOrAddForbiddenFile,
|
|
||||||
UpdateOrAddForbiddenFileCallback);
|
|
||||||
_mareHub.On<ForbiddenFileDto>(Api.OnAdminDeleteForbiddenFile,
|
|
||||||
DeleteForbiddenFileCallback);
|
|
||||||
}
|
|
||||||
|
|
||||||
Connected?.Invoke();
|
|
||||||
}
|
}
|
||||||
else if (ServerState is ServerState.VersionMisMatch or ServerState.NoAccount or ServerState.Unauthorized)
|
else if (ServerState is ServerState.VersionMisMatch or ServerState.NoAccount or ServerState.Unauthorized)
|
||||||
{
|
{
|
||||||
@@ -237,6 +206,43 @@ namespace MareSynchronos.WebAPI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task InitializeData(CancellationToken? token)
|
||||||
|
{
|
||||||
|
if (_mareHub == null) return;
|
||||||
|
Logger.Debug("Initializing data");
|
||||||
|
_mareHub.On<ClientPairDto, string>(Api.OnUserUpdateClientPairs,
|
||||||
|
UpdateLocalClientPairsCallback);
|
||||||
|
_mareHub.On<CharacterCacheDto, string>(Api.OnUserReceiveCharacterData,
|
||||||
|
ReceiveCharacterDataCallback);
|
||||||
|
_mareHub.On<string>(Api.OnUserRemoveOnlinePairedPlayer,
|
||||||
|
(s) => PairedClientOffline?.Invoke(s));
|
||||||
|
_mareHub.On<string>(Api.OnUserAddOnlinePairedPlayer,
|
||||||
|
(s) => PairedClientOnline?.Invoke(s));
|
||||||
|
_mareHub.On(Api.OnAdminForcedReconnect, UserForcedReconnectCallback);
|
||||||
|
|
||||||
|
PairedClients =
|
||||||
|
await _mareHub!.InvokeAsync<List<ClientPairDto>>(Api.InvokeUserGetPairedClients, token);
|
||||||
|
|
||||||
|
if (IsModerator)
|
||||||
|
{
|
||||||
|
AdminForbiddenFiles =
|
||||||
|
await _mareHub.InvokeAsync<List<ForbiddenFileDto>>(Api.InvokeAdminGetForbiddenFiles,
|
||||||
|
token);
|
||||||
|
AdminBannedUsers =
|
||||||
|
await _mareHub.InvokeAsync<List<BannedUserDto>>(Api.InvokeAdminGetBannedUsers,
|
||||||
|
token);
|
||||||
|
_mareHub.On<BannedUserDto>(Api.OnAdminUpdateOrAddBannedUser,
|
||||||
|
UpdateOrAddBannedUserCallback);
|
||||||
|
_mareHub.On<BannedUserDto>(Api.OnAdminDeleteBannedUser, DeleteBannedUserCallback);
|
||||||
|
_mareHub.On<ForbiddenFileDto>(Api.OnAdminUpdateOrAddForbiddenFile,
|
||||||
|
UpdateOrAddForbiddenFileCallback);
|
||||||
|
_mareHub.On<ForbiddenFileDto>(Api.OnAdminDeleteForbiddenFile,
|
||||||
|
DeleteForbiddenFileCallback);
|
||||||
|
}
|
||||||
|
|
||||||
|
Connected?.Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
Logger.Verbose("Disposing " + nameof(ApiController));
|
Logger.Verbose("Disposing " + nameof(ApiController));
|
||||||
@@ -278,8 +284,7 @@ namespace MareSynchronos.WebAPI
|
|||||||
{
|
{
|
||||||
Logger.Info("Connection restored");
|
Logger.Info("Connection restored");
|
||||||
await Task.Delay(TimeSpan.FromSeconds(new Random().Next(5, 10)));
|
await Task.Delay(TimeSpan.FromSeconds(new Random().Next(5, 10)));
|
||||||
_connectionDto = await _mareHub!.InvokeAsync<ConnectionDto>(Api.InvokeHeartbeat, _dalamudUtil.PlayerNameHashed);
|
await InitializeData(null);
|
||||||
Connected?.Invoke();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Task MareHubOnReconnecting(Exception? arg)
|
private Task MareHubOnReconnecting(Exception? arg)
|
||||||
@@ -288,6 +293,8 @@ namespace MareSynchronos.WebAPI
|
|||||||
CurrentDownloads.Clear();
|
CurrentDownloads.Clear();
|
||||||
_uploadCancellationTokenSource?.Cancel();
|
_uploadCancellationTokenSource?.Cancel();
|
||||||
Logger.Warn("Connection closed... Reconnecting");
|
Logger.Warn("Connection closed... Reconnecting");
|
||||||
|
Logger.Warn(arg?.Message ?? string.Empty);
|
||||||
|
Logger.Warn(arg?.StackTrace ?? string.Empty);
|
||||||
Disconnected?.Invoke();
|
Disconnected?.Invoke();
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user