maybe fix issue with char data being accidentally yeeted without reason and sent empty

This commit is contained in:
Stanley Dimant
2022-07-29 01:31:36 +02:00
parent fc18b19a4b
commit cf6b89454b
5 changed files with 66 additions and 40 deletions

View File

@@ -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)

View File

@@ -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();
} }

View File

@@ -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>

View File

@@ -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

View File

@@ -184,6 +184,31 @@ 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
{ {
await InitializeData(token);
_mareHub.Closed += MareHubOnClosed;
_mareHub.Reconnected += MareHubOnReconnected;
_mareHub.Reconnecting += MareHubOnReconnecting;
}
else if (ServerState is ServerState.VersionMisMatch or ServerState.NoAccount or ServerState.Unauthorized)
{
break;
}
}
catch (Exception ex)
{
Logger.Warn(ex.Message);
Logger.Warn(ex.StackTrace ?? string.Empty);
Logger.Info("Failed to establish connection, retrying");
await StopConnection(token);
await Task.Delay(TimeSpan.FromSeconds(new Random().Next(5, 20)), token);
}
}
}
private async Task InitializeData(CancellationToken? token)
{
if (_mareHub == null) return;
Logger.Debug("Initializing data"); Logger.Debug("Initializing data");
_mareHub.On<ClientPairDto, string>(Api.OnUserUpdateClientPairs, _mareHub.On<ClientPairDto, string>(Api.OnUserUpdateClientPairs,
UpdateLocalClientPairsCallback); UpdateLocalClientPairsCallback);
@@ -198,10 +223,6 @@ namespace MareSynchronos.WebAPI
PairedClients = PairedClients =
await _mareHub!.InvokeAsync<List<ClientPairDto>>(Api.InvokeUserGetPairedClients, token); await _mareHub!.InvokeAsync<List<ClientPairDto>>(Api.InvokeUserGetPairedClients, token);
_mareHub.Closed += MareHubOnClosed;
_mareHub.Reconnected += MareHubOnReconnected;
_mareHub.Reconnecting += MareHubOnReconnecting;
if (IsModerator) if (IsModerator)
{ {
AdminForbiddenFiles = AdminForbiddenFiles =
@@ -221,21 +242,6 @@ namespace MareSynchronos.WebAPI
Connected?.Invoke(); Connected?.Invoke();
} }
else if (ServerState is ServerState.VersionMisMatch or ServerState.NoAccount or ServerState.Unauthorized)
{
break;
}
}
catch (Exception ex)
{
Logger.Warn(ex.Message);
Logger.Warn(ex.StackTrace ?? string.Empty);
Logger.Info("Failed to establish connection, retrying");
await StopConnection(token);
await Task.Delay(TimeSpan.FromSeconds(new Random().Next(5, 20)), token);
}
}
}
public void Dispose() public void Dispose()
{ {
@@ -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;
} }