fix: address review on the notification pushes

- Force-join's RoomUpdate carries the room's role grants, so it no
  longer wipes them from the client's cached room.
- The consumable push reports IsTransferable the same as the inventory
  list does.
- A rejected private-instance join sends the owner at most one "wants
  to join" message per requester and instance every 5 minutes.
- SubscribeToPlayers ignores sets over 5,000 ids and keeps the current
  subscriptions.
- The subscriber exclusion list looks up online friends' connections in
  one pipelined Redis batch instead of one call per friend.
This commit is contained in:
Alexa
2026-10-24 20:25:51 +03:00
parent e33145307f
commit afad9bbc5a
6 changed files with 99 additions and 15 deletions
@@ -143,8 +143,11 @@ public sealed class PresenceBroadcastService(
// offline frame otherwise. Friends were served above and the
// subject must never get a frame about themselves, so their
// connections are excluded.
var exclude = connections.GetConnections(playerId)
.Concat(friendIds.SelectMany(connections.GetConnections))
// Only friends who are online have connections; one call for the
// online set, then one pipelined lookup for all of them.
var onlineIds = connections.OnlinePlayerIds().ToHashSet();
var exclude = (await connections.GetConnectionsAsync(
friendIds.Where(onlineIds.Contains).Append(playerId)))
.Distinct()
.ToList();
var publicToAll = visibility == PresenceVisibility.Public && online;