mirror of
https://github.com/DorkSquadRR/DorkNet.git
synced 2026-10-25 23:18:44 -07:00
feat: Update presence data handling and notification structure to use NameWire property
This commit is contained in:
@@ -532,6 +532,19 @@ public class RoomsController(
|
|||||||
logger.LogInformation(
|
logger.LogInformation(
|
||||||
"[rooms-save] fanout room update player={PlayerId} room={RoomId} instance={InstanceId} blob={BlobName} recipients={RecipientCount}",
|
"[rooms-save] fanout room update player={PlayerId} room={RoomId} instance={InstanceId} blob={BlobName} recipients={RecipientCount}",
|
||||||
pid, roomId, activeInstanceId, newBlob, playersInInstance.Length);
|
pid, roomId, activeInstanceId, newBlob, playersInInstance.Length);
|
||||||
|
if (activeInstanceId != 0)
|
||||||
|
{
|
||||||
|
var updatedPrivateInstances = await db.PrivateInstances
|
||||||
|
.Where(instance => instance.Id == activeInstanceId && instance.RoomId == roomId)
|
||||||
|
.ExecuteUpdateAsync(setters => setters
|
||||||
|
.SetProperty(instance => instance.DataBlob, newBlob));
|
||||||
|
if (updatedPrivateInstances > 0)
|
||||||
|
{
|
||||||
|
logger.LogInformation(
|
||||||
|
"[rooms-save] updated private instance blob room={RoomId} instance={InstanceId} blob={BlobName}",
|
||||||
|
roomId, activeInstanceId, newBlob);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var updatedRoomInstances = new Dictionary<long, RoomInstanceDto>();
|
var updatedRoomInstances = new Dictionary<long, RoomInstanceDto>();
|
||||||
foreach (var playerId in playersInInstance)
|
foreach (var playerId in playersInInstance)
|
||||||
@@ -594,7 +607,7 @@ public class RoomsController(
|
|||||||
roomCode = currentPresence.RoomCode,
|
roomCode = currentPresence.RoomCode,
|
||||||
photonRegionId = currentPresence.PhotonRegionId,
|
photonRegionId = currentPresence.PhotonRegionId,
|
||||||
photonRoomId = currentPresence.PhotonRoomId,
|
photonRoomId = currentPresence.PhotonRoomId,
|
||||||
name = currentPresence.Name,
|
name = currentPresence.NameWire,
|
||||||
maxCapacity = currentPresence.MaxCapacity,
|
maxCapacity = currentPresence.MaxCapacity,
|
||||||
isFull = currentPresence.IsFull,
|
isFull = currentPresence.IsFull,
|
||||||
isPrivate = currentPresence.IsPrivate,
|
isPrivate = currentPresence.IsPrivate,
|
||||||
|
|||||||
@@ -285,18 +285,16 @@ public class MatchPlayerController(
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(room.DataBlob))
|
var resolvedDataBlob = await ResolveDataBlobForPresenceAsync(room.RoomId, playerId, room.RoomInstanceId);
|
||||||
{
|
if (!string.IsNullOrWhiteSpace(resolvedDataBlob)
|
||||||
var resolved = await ResolveDataBlobForPresenceAsync(room.RoomId, playerId);
|
&& !string.Equals(room.DataBlob, resolvedDataBlob, StringComparison.Ordinal))
|
||||||
if (!string.IsNullOrWhiteSpace(resolved))
|
|
||||||
{
|
{
|
||||||
log.LogWarning(
|
log.LogWarning(
|
||||||
"[player-heartbeat] repairing empty presence dataBlob player={PlayerId} room={RoomId} instance={InstanceId} resolved={DataBlob}",
|
"[player-heartbeat] repairing stale presence dataBlob player={PlayerId} room={RoomId} instance={InstanceId} cached={CachedDataBlob} resolved={ResolvedDataBlob}",
|
||||||
playerId, room.RoomId, room.RoomInstanceId, resolved);
|
playerId, room.RoomId, room.RoomInstanceId, room.DataBlob, resolvedDataBlob);
|
||||||
room.DataBlob = resolved;
|
room.DataBlob = resolvedDataBlob;
|
||||||
presence.SetRoom(playerId, room);
|
presence.SetRoom(playerId, room);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
presence.MarkActive(playerId);
|
presence.MarkActive(playerId);
|
||||||
presence.TouchRoom(playerId);
|
presence.TouchRoom(playerId);
|
||||||
|
|
||||||
@@ -389,7 +387,10 @@ public class MatchPlayerController(
|
|||||||
return string.IsNullOrWhiteSpace(cleaned) ? $"Player{ownerPlayerId}_dorm" : $"{cleaned}_dorm";
|
return string.IsNullOrWhiteSpace(cleaned) ? $"Player{ownerPlayerId}_dorm" : $"{cleaned}_dorm";
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<string> ResolveDataBlobForPresenceAsync(long roomId, int playerId)
|
private async Task<string> ResolveDataBlobForPresenceAsync(
|
||||||
|
long roomId,
|
||||||
|
int playerId,
|
||||||
|
long? roomInstanceId = null)
|
||||||
{
|
{
|
||||||
var room = await db.Rooms.AsNoTracking().FirstOrDefaultAsync(r => r.Id == roomId);
|
var room = await db.Rooms.AsNoTracking().FirstOrDefaultAsync(r => r.Id == roomId);
|
||||||
if (room is null) return string.Empty;
|
if (room is null) return string.Empty;
|
||||||
@@ -403,6 +404,15 @@ public class MatchPlayerController(
|
|||||||
if (!string.IsNullOrWhiteSpace(dormBlob)) return dormBlob;
|
if (!string.IsNullOrWhiteSpace(dormBlob)) return dormBlob;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (roomInstanceId is > 0)
|
||||||
|
{
|
||||||
|
var instanceBlob = await db.PrivateInstances.AsNoTracking()
|
||||||
|
.Where(instance => instance.Id == roomInstanceId && instance.RoomId == roomId)
|
||||||
|
.Select(instance => instance.DataBlob)
|
||||||
|
.FirstOrDefaultAsync();
|
||||||
|
if (!string.IsNullOrWhiteSpace(instanceBlob)) return instanceBlob;
|
||||||
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(room.CurrentDataBlobName)) return room.CurrentDataBlobName;
|
if (!string.IsNullOrWhiteSpace(room.CurrentDataBlobName)) return room.CurrentDataBlobName;
|
||||||
|
|
||||||
var customisable = room.IsDormRoom || room.CreatorPlayerId != 1;
|
var customisable = room.IsDormRoom || room.CreatorPlayerId != 1;
|
||||||
|
|||||||
@@ -288,7 +288,7 @@ public class NotificationService(
|
|||||||
["roomCode"] = redacted.RoomCode,
|
["roomCode"] = redacted.RoomCode,
|
||||||
["photonRegionId"] = redacted.PhotonRegionId,
|
["photonRegionId"] = redacted.PhotonRegionId,
|
||||||
["photonRoomId"] = redacted.PhotonRoomId,
|
["photonRoomId"] = redacted.PhotonRoomId,
|
||||||
["name"] = redacted.Name,
|
["name"] = redacted.NameWire,
|
||||||
["maxCapacity"] = redacted.MaxCapacity,
|
["maxCapacity"] = redacted.MaxCapacity,
|
||||||
["isFull"] = redacted.IsFull,
|
["isFull"] = redacted.IsFull,
|
||||||
["isPrivate"] = redacted.IsPrivate,
|
["isPrivate"] = redacted.IsPrivate,
|
||||||
|
|||||||
Reference in New Issue
Block a user