Skip to content

Commit

Permalink
feat: MessagePack v3 upgrade (wip)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexyakunin committed Dec 10, 2024
1 parent db840b9 commit e6215f4
Show file tree
Hide file tree
Showing 9 changed files with 27 additions and 13 deletions.
2 changes: 1 addition & 1 deletion Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
<!-- Serialization -->
<NewtonsoftJsonVersion>[13.0.3,)</NewtonsoftJsonVersion>
<MemoryPackVersion>[1.21.3,)</MemoryPackVersion>
<MessagePackVersion>[2.5.192,)</MessagePackVersion>
<MessagePackVersion>[3.0.308,)</MessagePackVersion>
<!-- Other -->
<RedisVersion>[2.8.16,)</RedisVersion>
<RestEaseVersion>[1.6.4,)</RestEaseVersion>
Expand Down
3 changes: 2 additions & 1 deletion samples/HelloCart/Abstractions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ public partial record Cart(
[property: DataMember, Key(0)] string Id
) : IHasId<string>
{
[DataMember] public ImmutableDictionary<string, decimal> Items { get; init; } = ImmutableDictionary<string, decimal>.Empty;
[DataMember, Key(1)]
public ImmutableDictionary<string, decimal> Items { get; init; } = ImmutableDictionary<string, decimal>.Empty;
}

[DataContract, MemoryPackable, MessagePackObject]
Expand Down
2 changes: 1 addition & 1 deletion samples/TodoApp/UI/Pages/AuthenticationPage.razor
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@
var userAgent = UserAgentCache.GetOrAdd(sessionInfo.UserAgent, static ua => Parser.ParseUserAgent(ua));
var model = new SessionInfoModel() {
SessionHash = sessionInfo.SessionHash,
IsCurrent = sessionInfo.SessionHash == Session.Hash,
IsCurrent = Equals(sessionInfo.SessionHash, Session.Hash),
IPAddress = sessionInfo.IPAddress,
UserAgent = $"{userAgent.Family} {userAgent.Major}.{userAgent.Minor}",
Created = await FusionTime.GetMomentsAgo(sessionInfo.CreatedAt),
Expand Down
6 changes: 4 additions & 2 deletions src/ActualLab.Core/Time/Moment.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
using System.ComponentModel;
using System.Globalization;
using ActualLab.Time.Internal;
using MessagePack;

namespace ActualLab.Time;

[StructLayout(LayoutKind.Sequential, Pack = 8)] // Important!
// [StructLayout(LayoutKind.Auto)]
[DataContract]
[DataContract, MessagePackObject]
[JsonConverter(typeof(MomentJsonConverter))]
[Newtonsoft.Json.JsonConverter(typeof(MomentNewtonsoftJsonConverter))]
[TypeConverter(typeof(MomentTypeConverter))]
Expand All @@ -28,9 +29,10 @@ public static Moment CpuNow {
}

// AKA Unix Time
[DataMember(Order = 0)]
[DataMember(Order = 0), Key(0)]
public readonly long EpochOffsetTicks = epochOffsetTicks;

[IgnoreDataMember, MemoryPackIgnore, IgnoreMember]
public TimeSpan EpochOffset {
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get => new(EpochOffsetTicks);
Expand Down
2 changes: 1 addition & 1 deletion src/ActualLab.Core/Time/RetryDelaySeq.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace ActualLab.Time;

[DataContract, MemoryPackable(GenerateType.VersionTolerant), MessagePackObject]
[DataContract, MemoryPackable(GenerateType.VersionTolerant), MessagePackObject(SuppressSourceGeneration = true)]
public partial record RetryDelaySeq(
[property: DataMember, MemoryPackOrder(0), Key(0)] TimeSpan Min,
[property: DataMember, MemoryPackOrder(1), Key(1)] TimeSpan Max,
Expand Down
3 changes: 2 additions & 1 deletion src/ActualLab.Fusion.Ext.Contracts/Authentication/IAuth.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public partial record Auth_EditUser(
public partial record Auth_SignOut: ISessionCommand<Unit>
{
[DataMember, MemoryPackOrder(0), Key(0)]
public Session Session { get; init; } = null!;
public Session Session { get; init; }
[DataMember, MemoryPackOrder(1), Key(1)]
public string? KickUserSessionHash { get; init; }
[DataMember, MemoryPackOrder(2), Key(2)]
Expand All @@ -65,6 +65,7 @@ public Auth_SignOut(Session session, string kickUserSessionHash, bool force = fa
Force = force;
}

// ReSharper disable once ConvertToPrimaryConstructor
[JsonConstructor, Newtonsoft.Json.JsonConstructor, MemoryPackConstructor, SerializationConstructor]
public Auth_SignOut(
Session session,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,16 @@ public partial record SessionAuthInfo : IRequirementTarget
(SessionAuthInfo? i) => i?.IsAuthenticated() ?? false,
new("Session is not authenticated.", m => new SecurityException(m)));

[DataMember(Order = 0), MemoryPackOrder(0), Key(0)] public string SessionHash { get; init; } = "";
[DataMember(Order = 0), MemoryPackOrder(0), Key(0)] public string SessionHash { get => field ?? ""; init; }

// Authentication
[DataMember(Order = 1), MemoryPackOrder(1), Key(1)] public UserIdentity AuthenticatedIdentity { get; init; }
[DataMember(Order = 2), MemoryPackOrder(2), Key(2)] public Symbol UserId { get; init; } = Symbol.Empty;
[DataMember(Order = 2), MemoryPackOrder(2), Key(2)] public Symbol UserId { get; init; }
[DataMember(Order = 3), MemoryPackOrder(3), Key(3)] public bool IsSignOutForced { get; init; }

[JsonConstructor, Newtonsoft.Json.JsonConstructor, MemoryPackConstructor, SerializationConstructor]
public SessionAuthInfo() { }
public SessionAuthInfo()
=> SessionHash = "";
public SessionAuthInfo(Session? session)
=> SessionHash = session?.Hash ?? "";

Expand Down
14 changes: 11 additions & 3 deletions src/ActualLab.Fusion.Ext.Contracts/Authentication/SessionInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,25 @@ public partial record SessionInfo : SessionAuthInfo, IHasVersion<long>
[DataMember(Order = 10), MemoryPackOrder(10), Key(10)] public long Version { get; init; }
[DataMember(Order = 11), MemoryPackOrder(11), Key(11)] public Moment CreatedAt { get; init; }
[DataMember(Order = 12), MemoryPackOrder(12), Key(12)] public Moment LastSeenAt { get; init; }
[DataMember(Order = 13), MemoryPackOrder(13), Key(13)] public string IPAddress { get; init; } = "";
[DataMember(Order = 14), MemoryPackOrder(14), Key(14)] public string UserAgent { get; init; } = "";
[DataMember(Order = 13), MemoryPackOrder(13), Key(13)] public string IPAddress { get => field ?? ""; init; }
[DataMember(Order = 14), MemoryPackOrder(14), Key(14)] public string UserAgent { get => field ?? ""; init; }
[DataMember(Order = 15), MemoryPackOrder(15), Key(15)] public ImmutableOptionSet Options { get; init; }

[JsonConstructor, Newtonsoft.Json.JsonConstructor, MemoryPackConstructor, SerializationConstructor]
public SessionInfo() { }
public SessionInfo()
{
IPAddress = "";
UserAgent = "";
}

public SessionInfo(Moment createdAt) : this(null, createdAt) { }

public SessionInfo(Session? session, Moment createdAt = default) : base(session)
{
CreatedAt = createdAt;
LastSeenAt = createdAt;
IPAddress = "";
UserAgent = "";
}

public SessionAuthInfo ToAuthInfo()
Expand Down
1 change: 1 addition & 0 deletions src/ActualLab.Rpc/Infrastructure/RpcHeaderKey.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ namespace ActualLab.Rpc.Infrastructure;
[DataMember(Order = 0), MemoryPackOrder(0), Key(0)]
public readonly ReadOnlyMemory<byte> Utf8Name;

[IgnoreDataMember, MemoryPackIgnore, IgnoreMember]
public bool IsNone {
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get => Name.IsEmpty;
Expand Down

0 comments on commit e6215f4

Please sign in to comment.