Skip to content

Commit b106e1e

Browse files
author
billsonnn
committed
Updates
1 parent bd7a2fc commit b106e1e

18 files changed

Lines changed: 339 additions & 337 deletions

Turbo.Catalog/Grains/CatalogPurchaseGrain.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,9 @@
88
using Turbo.Primitives.Catalog;
99
using Turbo.Primitives.Catalog.Enums;
1010
using Turbo.Primitives.Catalog.Grains;
11-
using Turbo.Primitives.Catalog.Providers;
1211
using Turbo.Primitives.Catalog.Snapshots;
1312
using Turbo.Primitives.Orleans;
1413
using Turbo.Primitives.Players.Enums.Wallet;
15-
using Turbo.Primitives.Players.Providers;
1614
using Turbo.Primitives.Players.Wallet;
1715

1816
namespace Turbo.Catalog.Grains;

Turbo.Networking/Session/SessionGateway.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public async Task AddSessionToPlayerAsync(SessionKey key, PlayerId playerId)
8080
_sessionToPlayer[key] = playerId;
8181
_playerToSession[playerId] = key;
8282

83-
await playerPresence.RegisterSessionAsync(key, observer).ConfigureAwait(false);
83+
await playerPresence.RegisterSessionObserverAsync(observer).ConfigureAwait(false);
8484
}
8585

8686
public async Task RemoveSessionFromPlayerAsync(PlayerId playerId, CancellationToken ct)
@@ -92,6 +92,6 @@ public async Task RemoveSessionFromPlayerAsync(PlayerId playerId, CancellationTo
9292

9393
var playerPresence = _grainFactory.GetPlayerPresenceGrain(playerId);
9494

95-
await playerPresence.UnregisterSessionAsync(sessionKey, ct).ConfigureAwait(false);
95+
await playerPresence.UnregisterSessionObserverAsync(ct).ConfigureAwait(false);
9696
}
9797
}

Turbo.PacketHandlers/Inventory/GetCreditsInfoMessageHandler.cs

Lines changed: 0 additions & 18 deletions
This file was deleted.

Turbo.PacketHandlers/Inventory/Purse/GetCreditsInfoMessageHandler.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
using Turbo.Primitives.Messages.Outgoing.Inventory.Purse;
77
using Turbo.Primitives.Messages.Outgoing.Notifications;
88
using Turbo.Primitives.Orleans;
9+
using Turbo.Primitives.Players.Enums.Wallet;
10+
using Turbo.Primitives.Players.Wallet;
911

1012
namespace Turbo.PacketHandlers.Inventory.Purse;
1113

@@ -24,18 +26,18 @@ CancellationToken ct
2426
return;
2527

2628
var wallet = _grainFactory.GetPlayerWalletGrain(ctx.PlayerId);
27-
var snapshot = await wallet.GetSnapshotAsync(ct).ConfigureAwait(false);
29+
var credits = await wallet
30+
.GetAmountForCurrencyAsync(new CurrencyKind { CurrencyType = CurrencyType.Credits }, ct)
31+
.ConfigureAwait(false);
32+
var activityPoints = await wallet.GetActivityPointsAsync(ct).ConfigureAwait(false);
2833

2934
await ctx.SendComposerAsync(
30-
new CreditBalanceEventMessageComposer { Balance = $"{snapshot.Credits}.0" },
35+
new CreditBalanceEventMessageComposer { Balance = $"{credits}.0" },
3136
ct
3237
)
3338
.ConfigureAwait(false);
3439
await ctx.SendComposerAsync(
35-
new ActivityPointsMessageComposer
36-
{
37-
PointsByCategoryId = snapshot.ActivityPointsByCategoryId,
38-
},
40+
new ActivityPointsMessageComposer { PointsByCategoryId = activityPoints },
3941
ct
4042
)
4143
.ConfigureAwait(false);
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System.Threading;
2+
using System.Threading.Tasks;
3+
using Turbo.Primitives.Messages.Outgoing.Collectibles;
4+
using Turbo.Primitives.Messages.Outgoing.Inventory.Purse;
5+
using Turbo.Primitives.Messages.Outgoing.Notifications;
6+
using Turbo.Primitives.Players.Enums.Wallet;
7+
using Turbo.Primitives.Players.Snapshots;
8+
9+
namespace Turbo.Players.Grains.Modules;
10+
11+
internal sealed class PlayerWalletModule(PlayerPresenceGrain presenceGrain)
12+
{
13+
private readonly PlayerPresenceGrain _presenceGrain = presenceGrain;
14+
15+
public async Task OnCurrencyUpdateAsync(
16+
WalletCurrencyUpdateSnapshot snapshot,
17+
CancellationToken ct
18+
)
19+
{
20+
if (snapshot is null)
21+
return;
22+
23+
switch (snapshot.CurrencyKind.CurrencyType)
24+
{
25+
case CurrencyType.Credits:
26+
await _presenceGrain.SendComposerAsync(
27+
new CreditBalanceEventMessageComposer { Balance = snapshot.Amount.ToString() }
28+
);
29+
break;
30+
case CurrencyType.Emeralds:
31+
await _presenceGrain.SendComposerAsync(
32+
new EmeraldBalanceMessageComposer { EmeraldBalance = snapshot.Amount }
33+
);
34+
break;
35+
case CurrencyType.Silver:
36+
await _presenceGrain.SendComposerAsync(
37+
new SilverBalanceMessageComposer { SilverBalance = snapshot.Amount }
38+
);
39+
break;
40+
case CurrencyType.ActivityPoints:
41+
await _presenceGrain.SendComposerAsync(
42+
new HabboActivityPointNotificationMessageComposer
43+
{
44+
Amount = snapshot.Amount,
45+
Change = snapshot.ChangedBy,
46+
ActivityPointType = snapshot.CurrencyKind.ActivityPointType ?? -1,
47+
}
48+
);
49+
break;
50+
}
51+
}
52+
}
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
using System;
2+
using System.Threading;
3+
using System.Threading.Tasks;
4+
using Orleans;
5+
using Orleans.Runtime;
6+
using Turbo.Primitives.Action;
7+
using Turbo.Primitives.Networking;
8+
using Turbo.Primitives.Orleans;
9+
using Turbo.Primitives.Orleans.Snapshots.Room;
10+
using Turbo.Primitives.Players;
11+
using Turbo.Primitives.Rooms;
12+
using Turbo.Primitives.Rooms.Snapshots;
13+
14+
namespace Turbo.Players.Grains;
15+
16+
internal sealed partial class PlayerPresenceGrain
17+
{
18+
public Task<RoomPointerSnapshot> GetActiveRoomAsync() =>
19+
Task.FromResult(
20+
new RoomPointerSnapshot
21+
{
22+
RoomId = _state.ActiveRoomId,
23+
ActiveSinceUtc = _state.ActiveRoomSinceUtc,
24+
}
25+
);
26+
27+
public Task<RoomPendingSnapshot> GetPendingRoomAsync() =>
28+
Task.FromResult(
29+
new RoomPendingSnapshot
30+
{
31+
RoomId = _state.PendingRoomId,
32+
Approved = _state.PendingRoomApproved,
33+
}
34+
);
35+
36+
public async Task SetActiveRoomAsync(RoomId roomId, CancellationToken ct)
37+
{
38+
if (roomId <= 0)
39+
return;
40+
41+
await ClearActiveRoomAsync(ct);
42+
43+
var next = roomId;
44+
45+
_state.ActiveRoomId = next;
46+
_state.PendingRoomId = -1;
47+
_state.PendingRoomApproved = false;
48+
_state.ActiveRoomSinceUtc = DateTime.UtcNow;
49+
50+
await _grainFactory
51+
.GetRoomDirectoryGrain()
52+
.AddPlayerToRoomAsync((int)this.GetPrimaryKeyLong(), next, ct);
53+
54+
var provider = this.GetStreamProvider(OrleansStreamProviders.ROOM_STREAM_PROVIDER);
55+
var streamId = StreamId.Create(OrleansStreamNames.ROOM_STREAM, roomId.Value);
56+
var stream = provider.GetStream<RoomOutbound>(streamId);
57+
58+
_roomOutboundSub = await stream.SubscribeAsync(this);
59+
60+
var room = _grainFactory.GetRoomGrain(roomId);
61+
62+
var playerSnapshot = await _grainFactory
63+
.GetPlayerGrain((PlayerId)this.GetPrimaryKeyLong())
64+
.GetSummaryAsync(ct);
65+
66+
var ctx = new ActionContext
67+
{
68+
Origin = ActionOrigin.Player,
69+
SessionKey = SessionKey.Invalid,
70+
PlayerId = (PlayerId)this.GetPrimaryKeyLong(),
71+
RoomId = roomId,
72+
};
73+
74+
await room.CreateAvatarFromPlayerAsync(ctx, playerSnapshot, ct);
75+
}
76+
77+
public async Task ClearActiveRoomAsync(CancellationToken ct)
78+
{
79+
if (_state.ActiveRoomId <= 0)
80+
return;
81+
82+
var prev = _state.ActiveRoomId;
83+
84+
_state.ActiveRoomId = -1;
85+
_state.ActiveRoomSinceUtc = DateTime.UtcNow;
86+
87+
var ctx = new ActionContext
88+
{
89+
Origin = ActionOrigin.Player,
90+
SessionKey = SessionKey.Invalid,
91+
PlayerId = PlayerId.Parse((int)this.GetPrimaryKeyLong()),
92+
RoomId = prev,
93+
};
94+
95+
var roomGrain = _grainFactory.GetRoomGrain(prev);
96+
97+
await roomGrain.RemoveAvatarFromPlayerAsync(ctx, ctx.PlayerId, ct);
98+
99+
await _grainFactory
100+
.GetRoomDirectoryGrain()
101+
.RemovePlayerFromRoomAsync((PlayerId)this.GetPrimaryKeyLong(), prev, ct);
102+
103+
if (_roomOutboundSub is not null)
104+
{
105+
await _roomOutboundSub.UnsubscribeAsync();
106+
107+
_roomOutboundSub = null;
108+
}
109+
}
110+
111+
public async Task SetPendingRoomAsync(RoomId roomId, bool approved)
112+
{
113+
_state.PendingRoomId = roomId;
114+
_state.PendingRoomApproved = approved;
115+
}
116+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System.Threading;
2+
using System.Threading.Tasks;
3+
using Turbo.Primitives.Players.Snapshots;
4+
5+
namespace Turbo.Players.Grains;
6+
7+
internal sealed partial class PlayerPresenceGrain
8+
{
9+
public Task OnCurrencyUpdateAsync(
10+
WalletCurrencyUpdateSnapshot snapshot,
11+
CancellationToken ct
12+
) => _walletModule.OnCurrencyUpdateAsync(snapshot, ct);
13+
}

0 commit comments

Comments
 (0)