Skip to content

Commit 0544c72

Browse files
Diddyyclaude
andcommitted
Review fixes: Orleans best practices, performance, and correctness
MessengerGrain: - Add ILogger, replace 10 bare catch blocks with logged exceptions - Replace .Ignore() with LogAndForget helper (logs on failure) - Parallel online status checks on activation, search, and accept - Timer-based delivered flag batching (RegisterGrainTimer + flush on deactivate) - Batch RemoveFriendsAsync into single DB query and single composer call - Hoist mySummary before AcceptFriendRequestsAsync loop - Tracked delete for atomic request removal + friendship creation - Bound session message history per conversation - Remove hardcoded limits: searchLimit, pageSize, maxIgnoreCapacity now passed from handlers via IConfiguration Handlers: - Add missing PlayerId guard clause to GetHeightMapMessageHandler - Add IConfiguration to HabboSearchMessageHandler, GetMessengerHistoryMessageHandler, IgnoreUserMessageHandler for configurable limits - Delete duplicate no-op GetCreditsInfoMessageHandler Primitives: - Remove unused MESSENGER_STATE constant from OrleansStateNames - Add searchLimit, pageSize, maxIgnoreCapacity params to IMessengerGrain Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 82b37da commit 0544c72

8 files changed

Lines changed: 308 additions & 177 deletions

File tree

Turbo.PacketHandlers/FriendList/GetMessengerHistoryMessageHandler.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Threading;
22
using System.Threading.Tasks;
3+
using Microsoft.Extensions.Configuration;
34
using Orleans;
45
using Turbo.Messages.Registry;
56
using Turbo.Primitives.Messages.Incoming.FriendList;
@@ -8,10 +9,13 @@
89

910
namespace Turbo.PacketHandlers.FriendList;
1011

11-
public class GetMessengerHistoryMessageHandler(IGrainFactory grainFactory)
12-
: IMessageHandler<GetMessengerHistoryMessage>
12+
public class GetMessengerHistoryMessageHandler(
13+
IGrainFactory grainFactory,
14+
IConfiguration configuration
15+
) : IMessageHandler<GetMessengerHistoryMessage>
1316
{
1417
private readonly IGrainFactory _grainFactory = grainFactory;
18+
private readonly IConfiguration _configuration = configuration;
1519

1620
public async ValueTask HandleAsync(
1721
GetMessengerHistoryMessage message,
@@ -22,9 +26,11 @@ CancellationToken ct
2226
if (ctx.PlayerId <= 0)
2327
return;
2428

29+
var pageSize = _configuration.GetValue<int>("Turbo:Messenger:MessageHistoryPageSize");
30+
2531
var messengerGrain = _grainFactory.GetMessengerGrain(ctx.PlayerId);
2632
var history = await messengerGrain
27-
.GetMessageHistoryAsync(message.ChatId, message.Message, ct)
33+
.GetMessageHistoryAsync(message.ChatId, message.Message, pageSize, ct)
2834
.ConfigureAwait(false);
2935

3036
await ctx.SendComposerAsync(

Turbo.PacketHandlers/FriendList/HabboSearchMessageHandler.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Threading;
22
using System.Threading.Tasks;
3+
using Microsoft.Extensions.Configuration;
34
using Orleans;
45
using Turbo.Messages.Registry;
56
using Turbo.Primitives.Messages.Incoming.FriendList;
@@ -8,10 +9,11 @@
89

910
namespace Turbo.PacketHandlers.FriendList;
1011

11-
public class HabboSearchMessageHandler(IGrainFactory grainFactory)
12+
public class HabboSearchMessageHandler(IGrainFactory grainFactory, IConfiguration configuration)
1213
: IMessageHandler<HabboSearchMessage>
1314
{
1415
private readonly IGrainFactory _grainFactory = grainFactory;
16+
private readonly IConfiguration _configuration = configuration;
1517

1618
public async ValueTask HandleAsync(
1719
HabboSearchMessage message,
@@ -22,9 +24,11 @@ CancellationToken ct
2224
if (ctx.PlayerId <= 0)
2325
return;
2426

27+
var searchLimit = _configuration.GetValue<int>("Turbo:Messenger:SearchResultLimit");
28+
2529
var messengerGrain = _grainFactory.GetMessengerGrain(ctx.PlayerId);
2630
var (friends, others) = await messengerGrain
27-
.SearchPlayersAsync(message.SearchQuery, ct)
31+
.SearchPlayersAsync(message.SearchQuery, searchLimit, ct)
2832
.ConfigureAwait(false);
2933

3034
await ctx.SendComposerAsync(

Turbo.PacketHandlers/Users/IgnoreUserMessageHandler.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Threading;
22
using System.Threading.Tasks;
3+
using Microsoft.Extensions.Configuration;
34
using Orleans;
45
using Turbo.Messages.Registry;
56
using Turbo.Primitives.Messages.Incoming.Users;
@@ -9,10 +10,11 @@
910

1011
namespace Turbo.PacketHandlers.Users;
1112

12-
public class IgnoreUserMessageHandler(IGrainFactory grainFactory)
13+
public class IgnoreUserMessageHandler(IGrainFactory grainFactory, IConfiguration configuration)
1314
: IMessageHandler<IgnoreUserMessage>
1415
{
1516
private readonly IGrainFactory _grainFactory = grainFactory;
17+
private readonly IConfiguration _configuration = configuration;
1618

1719
public async ValueTask HandleAsync(
1820
IgnoreUserMessage message,
@@ -25,8 +27,12 @@ CancellationToken ct
2527

2628
var targetId = PlayerId.Parse(message.PlayerId);
2729

30+
var maxIgnoreCapacity = _configuration.GetValue<int>("Turbo:Messenger:IgnoreListLimit");
31+
2832
var messengerGrain = _grainFactory.GetMessengerGrain(ctx.PlayerId);
29-
var result = await messengerGrain.IgnoreUserAsync(targetId, ct).ConfigureAwait(false);
33+
var result = await messengerGrain
34+
.IgnoreUserAsync(targetId, maxIgnoreCapacity, ct)
35+
.ConfigureAwait(false);
3036

3137
await ctx.SendComposerAsync(
3238
new IgnoreResultMessageComposer { Result = result, PlayerName = string.Empty },

0 commit comments

Comments
 (0)