63 lines
1.8 KiB
C#
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();
|
|
};
|
|
}
|
|
|
|
}
|
|
}
|