Messagepack (#43)

* add messagepack to client

* add resolvers

* fixes on client

---------

Co-authored-by: Stanley Dimant <stanley.dimant@varian.com>
Co-authored-by: rootdarkarchon <root.darkarchon@outlook.com>
This commit is contained in:
rootdarkarchon
2023-02-10 12:31:08 +01:00
committed by GitHub
parent ff6d655f57
commit 3a4401038a
3 changed files with 33 additions and 4 deletions

View File

@@ -13,6 +13,9 @@ using MareSynchronos.Managers;
using Dalamud.Utility;
using MareSynchronos.MareConfiguration;
using MareSynchronos.Mediator;
using MessagePack;
using Microsoft.Extensions.DependencyInjection;
using MessagePack.Resolvers;
namespace MareSynchronos.WebAPI;
public partial class ApiController : MediatorSubscriberBase, IDisposable, IMareHubClient
@@ -183,12 +186,12 @@ public partial class ApiController : MediatorSubscriberBase, IDisposable, IMareH
await _mareHub.StartAsync(token).ConfigureAwait(false);
await InitializeData().ConfigureAwait(false);
_connectionDto = await GetConnectionDto().ConfigureAwait(false);
ServerState = ServerState.Connected;
await InitializeData().ConfigureAwait(false);
if (_connectionDto.ServerVersion != IMareHub.ApiVersion)
{
await StopConnection(token, ServerState.VersionMisMatch).ConfigureAwait(false);
@@ -315,6 +318,25 @@ public partial class ApiController : MediatorSubscriberBase, IDisposable, IMareH
options.Headers.Add("Authorization", "Bearer " + _serverManager.GetToken());
options.Transports = HttpTransportType.WebSockets | HttpTransportType.ServerSentEvents | HttpTransportType.LongPolling;
})
.AddMessagePackProtocol(opt =>
{
var resolver = CompositeResolver.Create(StandardResolverAllowPrivate.Instance,
BuiltinResolver.Instance,
AttributeFormatterResolver.Instance,
// replace enum resolver
DynamicEnumAsStringResolver.Instance,
DynamicGenericResolver.Instance,
DynamicUnionResolver.Instance,
DynamicObjectResolver.Instance,
PrimitiveObjectResolver.Instance,
// final fallback(last priority)
StandardResolver.Instance);
opt.SerializerOptions =
MessagePackSerializerOptions.Standard
.WithCompression(MessagePackCompression.Lz4Block)
.WithResolver(resolver);
})
.WithAutomaticReconnect(new ForeverRetryPolicy(Mediator))
.ConfigureLogging(a =>
{
@@ -352,6 +374,12 @@ public partial class ApiController : MediatorSubscriberBase, IDisposable, IMareH
ServerState = ServerState.Connecting;
await InitializeData().ConfigureAwait(false);
_connectionDto = await GetConnectionDto().ConfigureAwait(false);
if (_connectionDto.ServerVersion != IMareHub.ApiVersion)
{
CancellationTokenSource cts = new();
await StopConnection(cts.Token, ServerState.VersionMisMatch).ConfigureAwait(false);
return;
}
ServerState = ServerState.Connected;
}