Files
BoneSync/BoneSync/Networking/LobbyManager/SteamLobbyManager.cs
aarov db6211c7f8 revert 84538e16e2
revert revert
2025-02-25 11:08:35 +00:00

63 lines
1.8 KiB
C#

using Facepunch.Steamworks;
using Facepunch.Steamworks.Data;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BoneSync.Networking.LobbyManager
{
internal class SteamLobbyManager : LobbyManager
{
private Lobby _lobbyInstance;
public Friend[] LobbyMembers
{
get;
private set;
}
public SteamId[] steamIds
{
get;
private set;
}
public override ulong[] GetPeers() => steamIds.Select(x => x.Value).ToArray();
public override ulong GetLocalId() => SteamClient.SteamId.Value;
public override ulong GetHostId() => _lobbyInstance.Owner.Id.Value;
public override ulong GetLobbyId() => _lobbyInstance.Id.Value;
private void UpdateLobbyData()
{
LobbyMembers = _lobbyInstance.Members.ToArray();
steamIds = LobbyMembers.Select(x => x.Id).ToArray();
}
public override void Initialize()
{
SteamMatchmaking.OnLobbyCreated += (Result result, Lobby lobby) =>
{
_lobbyInstance = lobby;
UpdateLobbyData();
};
SteamMatchmaking.OnLobbyEntered += (Lobby lobby) =>
{
_lobbyInstance = lobby;
UpdateLobbyData();
};
SteamMatchmaking.OnLobbyMemberLeave += (Lobby lobby, Friend friend) =>
{
if (friend.Id == SteamClient.SteamId)
{
_lobbyInstance = new Lobby();
}
UpdateLobbyData();
};
SteamMatchmaking.OnLobbyMemberJoined += (Lobby lobby, Friend friend) =>
{
UpdateLobbyData();
};
}
}
}