Add platform matching to rooms

This commit is contained in:
jvyden 2022-02-17 16:23:09 -05:00
parent 3f29934628
commit 41dde8eed2
No known key found for this signature in database
GPG key ID: 18BCF2BE0262B278
6 changed files with 18 additions and 12 deletions

View file

@ -141,7 +141,7 @@ public class LoginController : ControllerBase
await this.database.SaveChangesAsync(); await this.database.SaveChangesAsync();
// Create a new room on LBP2/3/Vita // Create a new room on LBP2/3/Vita
if (token.GameVersion != GameVersion.LittleBigPlanet1) RoomHelper.CreateRoom(user, token.GameVersion); if (token.GameVersion != GameVersion.LittleBigPlanet1) RoomHelper.CreateRoom(user, token.GameVersion, token.Platform);
return this.Ok return this.Ok
( (

View file

@ -81,7 +81,7 @@ public class MatchController : ControllerBase
if (matchData is UpdateMyPlayerData playerData) if (matchData is UpdateMyPlayerData playerData)
{ {
MatchHelper.SetUserLocation(user.UserId, gameToken.UserLocation); MatchHelper.SetUserLocation(user.UserId, gameToken.UserLocation);
Room? room = RoomHelper.FindRoomByUser(user, gameToken.GameVersion, true); Room? room = RoomHelper.FindRoomByUser(user, gameToken.GameVersion, gameToken.Platform, true);
if (playerData.RoomState != null) if (playerData.RoomState != null)
if (room != null && Equals(room.Host, user)) if (room != null && Equals(room.Host, user))
@ -90,7 +90,7 @@ public class MatchController : ControllerBase
if (matchData is FindBestRoom && MatchHelper.UserLocations.Count > 1) if (matchData is FindBestRoom && MatchHelper.UserLocations.Count > 1)
{ {
FindBestRoomResponse? response = RoomHelper.FindBestRoom(user, gameToken.GameVersion, gameToken.UserLocation); FindBestRoomResponse? response = RoomHelper.FindBestRoom(user, gameToken.GameVersion, gameToken.Platform, gameToken.UserLocation);
if (response == null) return this.NotFound(); if (response == null) return this.NotFound();
@ -112,7 +112,7 @@ public class MatchController : ControllerBase
} }
// Create a new one as requested // Create a new one as requested
RoomHelper.CreateRoom(users, gameToken.GameVersion, createRoom.RoomSlot); RoomHelper.CreateRoom(users, gameToken.GameVersion, gameToken.Platform, createRoom.RoomSlot);
} }
if (matchData is UpdatePlayersInRoom updatePlayersInRoom) if (matchData is UpdatePlayersInRoom updatePlayersInRoom)

View file

@ -26,7 +26,7 @@ public class RoomVisualizerController : ControllerBase
return this.NotFound(); return this.NotFound();
#else #else
List<User> users = await this.database.Users.OrderByDescending(_ => EF.Functions.Random()).Take(2).ToListAsync(); List<User> users = await this.database.Users.OrderByDescending(_ => EF.Functions.Random()).Take(2).ToListAsync();
RoomHelper.CreateRoom(users, GameVersion.LittleBigPlanet2); RoomHelper.CreateRoom(users, GameVersion.LittleBigPlanet2, Platform.PS3);
foreach (User user in users) foreach (User user in users)
{ {

View file

@ -42,7 +42,7 @@ public class RoomHelper
internal static int RoomIdIncrement => roomIdIncrement++; internal static int RoomIdIncrement => roomIdIncrement++;
public static FindBestRoomResponse? FindBestRoom(User? user, GameVersion roomVersion, string? location) public static FindBestRoomResponse? FindBestRoom(User? user, GameVersion roomVersion, Platform? platform, string? location)
{ {
if (roomVersion == GameVersion.LittleBigPlanet1 || roomVersion == GameVersion.LittleBigPlanetPSP) if (roomVersion == GameVersion.LittleBigPlanet1 || roomVersion == GameVersion.LittleBigPlanetPSP)
{ {
@ -60,6 +60,7 @@ public class RoomHelper
} }
rooms = rooms.Where(r => r.RoomVersion == roomVersion).ToList(); rooms = rooms.Where(r => r.RoomVersion == roomVersion).ToList();
if (platform != null) rooms = rooms.Where(r => r.RoomPlatform == platform).ToList();
foreach (Room room in rooms) foreach (Room room in rooms)
// Look for rooms looking for players before moving on to rooms that are idle. // Look for rooms looking for players before moving on to rooms that are idle.
@ -133,7 +134,7 @@ public class RoomHelper
return null; return null;
} }
public static Room CreateRoom(User user, GameVersion roomVersion, RoomSlot? slot = null) public static Room CreateRoom(User user, GameVersion roomVersion, Platform roomPlatform, RoomSlot? slot = null)
=> CreateRoom => CreateRoom
( (
new List<User> new List<User>
@ -141,9 +142,10 @@ public class RoomHelper
user, user,
}, },
roomVersion, roomVersion,
roomPlatform,
slot slot
); );
public static Room CreateRoom(List<User> users, GameVersion roomVersion, RoomSlot? slot = null) public static Room CreateRoom(List<User> users, GameVersion roomVersion, Platform roomPlatform, RoomSlot? slot = null)
{ {
Room room = new() Room room = new()
{ {
@ -152,6 +154,7 @@ public class RoomHelper
State = RoomState.Idle, State = RoomState.Idle,
Slot = slot ?? PodSlot, Slot = slot ?? PodSlot,
RoomVersion = roomVersion, RoomVersion = roomVersion,
RoomPlatform = roomPlatform,
}; };
CleanupRooms(room.Host, room); CleanupRooms(room.Host, room);
@ -161,13 +164,13 @@ public class RoomHelper
return room; return room;
} }
public static Room? FindRoomByUser(User user, GameVersion roomVersion, bool createIfDoesNotExist = false) public static Room? FindRoomByUser(User user, GameVersion roomVersion, Platform roomPlatform, bool createIfDoesNotExist = false)
{ {
lock(Rooms) lock(Rooms)
foreach (Room room in Rooms.Where(room => room.Players.Any(player => user == player))) foreach (Room room in Rooms.Where(room => room.Players.Any(player => user == player)))
return room; return room;
return createIfDoesNotExist ? CreateRoom(user, roomVersion) : null; return createIfDoesNotExist ? CreateRoom(user, roomVersion, roomPlatform) : null;
} }
public static Room? FindRoomByUserId(int userId) public static Room? FindRoomByUserId(int userId)

View file

@ -52,7 +52,7 @@
{ {
if (version == GameVersion.LittleBigPlanet1 || version == GameVersion.LittleBigPlanetPSP || version == GameVersion.Unknown) continue; if (version == GameVersion.LittleBigPlanet1 || version == GameVersion.LittleBigPlanetPSP || version == GameVersion.Unknown) continue;
FindBestRoomResponse? response = RoomHelper.FindBestRoom(null, version, null); FindBestRoomResponse? response = RoomHelper.FindBestRoom(null, version, null, null);
string text = response == null ? "No room found." : "Room " + response.RoomId; string text = response == null ? "No room found." : "Room " + response.RoomId;
<p><b>Best room for @version.ToPrettyString()</b>: @text</p> <p><b>Best room for @version.ToPrettyString()</b>: @text</p>
@ -72,7 +72,7 @@
<b>You are currently in this room.</b> <b>You are currently in this room.</b>
</p> </p>
} }
<p>@room.Players.Count players, state is @room.State, version is @room.RoomVersion.ToPrettyString()</p> <p>@room.Players.Count players, state is @room.State, version is @room.RoomVersion.ToPrettyString()on paltform @room.RoomPlatform</p>
<p>Slot type: @room.Slot.SlotType, slot id: @room.Slot.SlotId</p> <p>Slot type: @room.Slot.SlotType, slot id: @room.Slot.SlotId</p>
@foreach (User player in room.Players) @foreach (User player in room.Players)
{ {

View file

@ -15,6 +15,9 @@ public class Room
[JsonIgnore] [JsonIgnore]
public GameVersion RoomVersion { get; set; } public GameVersion RoomVersion { get; set; }
[JsonIgnore]
public Platform RoomPlatform { get; set; }
public RoomSlot Slot { get; set; } public RoomSlot Slot { get; set; }
public RoomState State { get; set; } public RoomState State { get; set; }