89 lines
3.4 KiB
C#
89 lines
3.4 KiB
C#
using FemRec2023.Classes.DBs;
|
|
using FemRec2023.Classes.DBs.DBClasses;
|
|
using static FemRec2023.Classes.DBs.DBClasses.PlayerDBClasses;
|
|
using static FemRec2023.Classes.DBs.DBClasses.RoomDBClasses;
|
|
|
|
namespace FemRec2023.Classes
|
|
{
|
|
public class Sessions
|
|
{
|
|
private static readonly Random _rng = new();
|
|
|
|
public static Heartbeat? CreateRoom(long playerId, long roomId, string sceneName = "", bool isPrivate = false)
|
|
{
|
|
var roomData = RoomDB.GetRoom(roomId);
|
|
if (roomData == null)
|
|
return null;
|
|
|
|
var sub = roomData.SubRooms?.FirstOrDefault();
|
|
if (sub == null)
|
|
return null;
|
|
|
|
long instanceNumber = _rng.Next(1000, 999999999);
|
|
var photonSuffix = isPrivate ? $"-private-room-{instanceNumber}-{Guid.NewGuid()}" : "room";
|
|
var roomName = roomData.Name ?? "UnknownRoom";
|
|
|
|
var session = new RoomInstance {
|
|
Name = $"^{roomName}",
|
|
dataBlob = sub.DataBlob ?? "",
|
|
isPrivate = isPrivate,
|
|
location = sub.UnitySceneId,
|
|
maxCapacity = sub.MaxPlayers,
|
|
photonRegion = "eu", photonRegionId = "eu",
|
|
photonRoomId = $"FemRecRoom-{roomName}-{photonSuffix}",
|
|
roomId = (long)roomData.RoomId,
|
|
roomInstanceId = instanceNumber,
|
|
subRoomId = (long)sub.SubRoomId
|
|
};
|
|
|
|
if (!string.IsNullOrEmpty(sceneName)) ApplySceneSettings(session, roomData, sceneName);
|
|
else ApplyRandomPublicSubroom(session, roomData);
|
|
|
|
var newHeartbeat = PlayerDB.UpdatePlayerHeartbeat(playerId, session);
|
|
return newHeartbeat;
|
|
}
|
|
|
|
public static Heartbeat CreateDorm(long playerId, string name)
|
|
{
|
|
long dormId = 1;
|
|
var dorm = RoomDB.GetRoom(dormId);
|
|
long instanceId = _rng.Next(1000, 999999999);
|
|
|
|
var session = new RoomInstance
|
|
{
|
|
isPrivate = true,
|
|
location = "76d98498-60a1-430c-ab76-b54a29b7a163",
|
|
maxCapacity = 4,
|
|
Name = $"@{name}'s Dorm",
|
|
photonRegion = "eu", photonRegionId = "eu",
|
|
photonRoomId = $"FemRecDorm-{instanceId}-room",
|
|
roomId = dormId,
|
|
roomInstanceId = instanceId,
|
|
subRoomId = (long)(dorm?.SubRooms?.FirstOrDefault()?.SubRoomId ?? 0)
|
|
};
|
|
|
|
var newHeartbeat = PlayerDB.UpdatePlayerHeartbeat(playerId, session);
|
|
return newHeartbeat;
|
|
}
|
|
|
|
private static void ApplySceneSettings(RoomInstance sess, Room data, string scene)
|
|
{
|
|
var target = data.SubRooms?.FirstOrDefault(s => s.Name.Equals(scene, StringComparison.OrdinalIgnoreCase));
|
|
if (target != null) UpdateSession(sess, target);
|
|
}
|
|
|
|
private static void ApplyRandomPublicSubroom(RoomInstance sess, Room data)
|
|
{
|
|
var publics = data.SubRooms?.Where(s => s.Accessibility == RoomAccessibility.Public).ToList();
|
|
if (publics?.Any() == true) UpdateSession(sess, publics[_rng.Next(publics.Count)]);
|
|
}
|
|
|
|
private static void UpdateSession(RoomInstance sess, SubRooms sub)
|
|
{
|
|
sess.dataBlob = sub.DataBlob ?? "";
|
|
sess.subRoomId = (long)sub.SubRoomId;
|
|
sess.location = sub.UnitySceneId;
|
|
}
|
|
}
|
|
}
|