From 5c64bd6b002d9b0cfa3fda3ae2dd436fe6cebb49 Mon Sep 17 00:00:00 2001 From: Lapis <47952866+LapisGit@users.noreply.github.com> Date: Sat, 4 Apr 2026 11:31:21 -0400 Subject: [PATCH] h --- ...04152544_AddPendingJoinColumn2.Designer.cs | 696 ++++++++++++++++++ .../20260404152544_AddPendingJoinColumn2.cs | 29 + .../Migrations/AppDbContextModelSnapshot.cs | 3 + CannedNet/Models/RoomInstance.cs | 3 + CannedNet/Services/MatchmakingService.cs | 2 +- 5 files changed, 732 insertions(+), 1 deletion(-) create mode 100644 CannedNet/Migrations/20260404152544_AddPendingJoinColumn2.Designer.cs create mode 100644 CannedNet/Migrations/20260404152544_AddPendingJoinColumn2.cs diff --git a/CannedNet/Migrations/20260404152544_AddPendingJoinColumn2.Designer.cs b/CannedNet/Migrations/20260404152544_AddPendingJoinColumn2.Designer.cs new file mode 100644 index 0000000..bc9311d --- /dev/null +++ b/CannedNet/Migrations/20260404152544_AddPendingJoinColumn2.Designer.cs @@ -0,0 +1,696 @@ +// +using System; +using CannedNet.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace CannedNet.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20260404152544_AddPendingJoinColumn2")] + partial class AddPendingJoinColumn2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("CannedNet.Account", b => + { + b.Property("AccountId") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "accountId"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasAnnotation("Relational:JsonPropertyName", "createdAt"); + + b.Property("DisplayName") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "displayName"); + + b.Property("IdentityFlags") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "identityFlags"); + + b.Property("IsJunior") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "isJunior"); + + b.Property("PersonalPronouns") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "personalPronouns"); + + b.Property("Platforms") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "platforms"); + + b.Property("ProfileImage") + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "profileImage"); + + b.Property("Username") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "username"); + + b.HasKey("AccountId"); + + b.ToTable("accounts", (string)null); + }); + + modelBuilder.Entity("CannedNet.AvatarItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AvatarItemDesc") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "avatarItemDesc"); + + b.Property("AvatarItemType") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "avatarItemType"); + + b.Property("FriendlyName") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "friendlyName"); + + b.Property("OwnerAccountId") + .HasColumnType("integer"); + + b.Property("PlatformMask") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "platformMask"); + + b.Property("Rarity") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "rarity"); + + b.Property("Tooltip") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "tooltip"); + + b.HasKey("Id"); + + b.HasIndex("OwnerAccountId"); + + b.ToTable("avatar_items", (string)null); + }); + + modelBuilder.Entity("CannedNet.CachedLogin", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AccountId") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "accountId"); + + b.Property("LastLoginTime") + .HasColumnType("timestamp with time zone") + .HasAnnotation("Relational:JsonPropertyName", "lastLoginTime"); + + b.Property("Platform") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "platform"); + + b.Property("PlatformID") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "platformId"); + + b.Property("RequirePassword") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "requirePassword"); + + b.HasKey("Id"); + + b.HasIndex("Platform", "PlatformID") + .IsUnique(); + + b.ToTable("cached_logins", (string)null); + }); + + modelBuilder.Entity("CannedNet.LoadScreen", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ImageUrl") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "imageUrl"); + + b.Property("IsThumbnail") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "isThumbnail"); + + b.Property("RoomId") + .HasColumnType("integer"); + + b.Property("Tooltip") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "tooltip"); + + b.HasKey("Id"); + + b.HasIndex("RoomId"); + + b.ToTable("load_screens", (string)null); + }); + + modelBuilder.Entity("CannedNet.PlayerAvatar", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("FaceFeatures") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "FaceFeatures"); + + b.Property("HairColor") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "HairColor"); + + b.Property("OutfitSelections") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "OutfitSelections"); + + b.Property("OwnerAccountId") + .HasColumnType("integer"); + + b.Property("SkinColor") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "SkinColor"); + + b.HasKey("Id"); + + b.HasIndex("OwnerAccountId") + .IsUnique(); + + b.ToTable("player_avatars", (string)null); + }); + + modelBuilder.Entity("CannedNet.PlayerProgression", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Level") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "level"); + + b.Property("PlayerId") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "playerId"); + + b.Property("Xp") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "xp"); + + b.HasKey("Id"); + + b.HasIndex("PlayerId") + .IsUnique(); + + b.ToTable("player_progressions", (string)null); + }); + + modelBuilder.Entity("CannedNet.PlayerSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Key") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "key"); + + b.Property("PlayerId") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "playerId"); + + b.Property("Value") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "value"); + + b.HasKey("Id"); + + b.HasIndex("PlayerId", "Key") + .IsUnique(); + + b.ToTable("player_settings", (string)null); + }); + + modelBuilder.Entity("CannedNet.PromoExternalContent", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("RoomId") + .HasColumnType("integer"); + + b.Property("Tooltip") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "tooltip"); + + b.Property("Type") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "type"); + + b.Property("Url") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "url"); + + b.HasKey("Id"); + + b.HasIndex("RoomId"); + + b.ToTable("promo_external_contents", (string)null); + }); + + modelBuilder.Entity("CannedNet.PromoImage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ImageUrl") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "imageUrl"); + + b.Property("RoomId") + .HasColumnType("integer"); + + b.Property("SortOrder") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "sortOrder"); + + b.Property("Tooltip") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "tooltip"); + + b.HasKey("Id"); + + b.HasIndex("RoomId"); + + b.ToTable("promo_images", (string)null); + }); + + modelBuilder.Entity("CannedNet.Room", b => + { + b.Property("Id") + .HasColumnType("integer"); + + b.Property("Accessibility") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "accessibility"); + + b.Property("CloningAllowed") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "cloningAllowed"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasAnnotation("Relational:JsonPropertyName", "createdAt"); + + b.Property("CreatorAccountId") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "creatorAccountId"); + + b.Property("CustomWarning") + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "customWarning"); + + b.Property("Description") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "description"); + + b.Property("DisableMicAutoMute") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "disableMicAutoMute"); + + b.Property("DisableRoomComments") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "disableRoomComments"); + + b.Property("EncryptVoiceChat") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "encryptVoiceChat"); + + b.Property("ImageName") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "imageName"); + + b.Property("IsDorm") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "isDorm"); + + b.Property("IsRRO") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "isRRO"); + + b.Property("MinLevel") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "minLevel"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("RoomId") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "roomId"); + + b.Property("State") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "state"); + + b.Property("SupportsJuniors") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "supportsJuniors"); + + b.Property("SupportsLevelVoting") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "supportsLevelVoting"); + + b.Property("SupportsMobile") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "supportsMobile"); + + b.Property("SupportsQuest2") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "supportsQuest2"); + + b.Property("SupportsScreens") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "supportsScreens"); + + b.Property("SupportsTeleportVR") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "supportsTeleportVR"); + + b.Property("SupportsVRLow") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "supportsVRLow"); + + b.Property("SupportsWalkVR") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "supportsWalkVR"); + + b.Property("Tags") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "tags"); + + b.Property("WarningMask") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "warningMask"); + + b.HasKey("Id"); + + b.HasIndex("CreatorAccountId"); + + b.ToTable("rooms", (string)null); + }); + + modelBuilder.Entity("CannedNet.RoomInstance", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("EncryptVoiceChat") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "EncryptVoiceChat"); + + b.Property("OwnerAccountId") + .HasColumnType("integer"); + + b.Property("clubId") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "clubId"); + + b.Property("dataBlob") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "dataBlob"); + + b.Property("eventId") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "eventId"); + + b.Property("isFull") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "isFull"); + + b.Property("isInProgress") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "isInProgress"); + + b.Property("isPrivate") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "isPrivate"); + + b.Property("location") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "location"); + + b.Property("maxCapacity") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "maxCapacity"); + + b.Property("name") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("pendingJoin") + .HasColumnType("boolean"); + + b.Property("photonRegionId") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "photonRegionId"); + + b.Property("photonRoomId") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "photonRoomId"); + + b.Property("roomCode") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "roomCode"); + + b.Property("roomId") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "roomId"); + + b.Property("roomInstanceId") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "roomInstanceId"); + + b.Property("roomInstanceType") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "roomInstanceType"); + + b.Property("subRoomId") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "subRoomId"); + + b.HasKey("Id"); + + b.HasIndex("OwnerAccountId", "roomId"); + + b.ToTable("room_instances", (string)null); + }); + + modelBuilder.Entity("CannedNet.RoomRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AccountId") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "accountId"); + + b.Property("InvitedRole") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "invitedRole"); + + b.Property("Role") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "role"); + + b.Property("RoomId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("RoomId"); + + b.ToTable("room_roles", (string)null); + }); + + modelBuilder.Entity("CannedNet.SavedOutfit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("FaceFeatures") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "FaceFeatures"); + + b.Property("HairColor") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "HairColor"); + + b.Property("OutfitSelections") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "OutfitSelections"); + + b.Property("OwnerAccountId") + .HasColumnType("integer"); + + b.Property("PreviewImageName") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "PreviewImageName"); + + b.Property("SkinColor") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "SkinColor"); + + b.Property("Slot") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "Slot"); + + b.HasKey("Id"); + + b.HasIndex("OwnerAccountId") + .IsUnique(); + + b.ToTable("saved_outfits", (string)null); + }); + + modelBuilder.Entity("CannedNet.SubRoom", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Accessibility") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "accessibility"); + + b.Property("DataBlob") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "dataBlob"); + + b.Property("DataSavedAt") + .HasColumnType("timestamp with time zone") + .HasAnnotation("Relational:JsonPropertyName", "dataSavedAt"); + + b.Property("IsSandbox") + .HasColumnType("boolean") + .HasAnnotation("Relational:JsonPropertyName", "isSandbox"); + + b.Property("MaxPlayers") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "maxPlayers"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "name"); + + b.Property("RoomId") + .HasColumnType("integer"); + + b.Property("SubRoomId") + .HasColumnType("integer") + .HasAnnotation("Relational:JsonPropertyName", "subRoomId"); + + b.Property("UnitySceneId") + .IsRequired() + .HasColumnType("text") + .HasAnnotation("Relational:JsonPropertyName", "unitySceneId"); + + b.HasKey("Id"); + + b.HasIndex("RoomId"); + + b.ToTable("sub_rooms", (string)null); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/CannedNet/Migrations/20260404152544_AddPendingJoinColumn2.cs b/CannedNet/Migrations/20260404152544_AddPendingJoinColumn2.cs new file mode 100644 index 0000000..352e383 --- /dev/null +++ b/CannedNet/Migrations/20260404152544_AddPendingJoinColumn2.cs @@ -0,0 +1,29 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace CannedNet.Migrations +{ + /// + public partial class AddPendingJoinColumn2 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "pendingJoin", + table: "room_instances", + type: "boolean", + nullable: false, + defaultValue: false); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "pendingJoin", + table: "room_instances"); + } + } +} diff --git a/CannedNet/Migrations/AppDbContextModelSnapshot.cs b/CannedNet/Migrations/AppDbContextModelSnapshot.cs index 63ad75e..031b2a2 100644 --- a/CannedNet/Migrations/AppDbContextModelSnapshot.cs +++ b/CannedNet/Migrations/AppDbContextModelSnapshot.cs @@ -516,6 +516,9 @@ namespace CannedNet.Migrations .HasColumnType("text") .HasAnnotation("Relational:JsonPropertyName", "name"); + b.Property("pendingJoin") + .HasColumnType("boolean"); + b.Property("photonRegionId") .IsRequired() .HasColumnType("text") diff --git a/CannedNet/Models/RoomInstance.cs b/CannedNet/Models/RoomInstance.cs index 2204a44..b8f1447 100644 --- a/CannedNet/Models/RoomInstance.cs +++ b/CannedNet/Models/RoomInstance.cs @@ -40,4 +40,7 @@ public class RoomInstance public bool isInProgress { get; set; } [JsonPropertyName("EncryptVoiceChat")] public bool EncryptVoiceChat { get; set; } + public bool pendingJoin { get; set; } + public int playerCount { get; set; } + public DateTime lastHeartbeat { get; set; } } \ No newline at end of file diff --git a/CannedNet/Services/MatchmakingService.cs b/CannedNet/Services/MatchmakingService.cs index 877fd43..f12bfcc 100644 --- a/CannedNet/Services/MatchmakingService.cs +++ b/CannedNet/Services/MatchmakingService.cs @@ -240,7 +240,7 @@ public class MatchmakingService heartbeat = new HeartbeatRequest(); var roomInstance = await db.RoomInstances - .Where(r => r.OwnerAccountId == id) + .Where(r => r.OwnerAccountId == id && !r.pendingJoin) .OrderByDescending(r => r.Id) .FirstOrDefaultAsync();