/// <summary>
        /// Add a server to the list of servers
        /// </summary>
        /// <param name="lobby">The <see cref="Steamworks.Data.Lobby"/> of the lobby/server to add to the list</param>
        private void AddServer(Steamworks.Data.Lobby lobby)
        {
            for (int i = 0; i < serverList.Count; ++i)
            {
                var server = serverList[i];
                if (server.lobby.Id == lobby.Id)
                {
                    // Already have that server listed nothing else to do
                    return;
                }
            }

            var serverListItemData = new ServerListItemData {
                ListItem = GameObject.Instantiate <ServerListEntry>(serverListEntryTemplate, servers.content),
                lobby    = lobby
            };

            // Make the list item visible
            serverListItemData.ListItem.gameObject.SetActive(true);

            // Make sure we periodically re-request the lobby/server data so the server information in the list is
            // up-to-date
            serverListItemData.NextUpdate = Time.time + 5.0f + UnityEngine.Random.Range(0.0f, 1.0f);

            // Add the server to the list.
            serverList.Add(serverListItemData);
            // Make sure the the newly added server is not selected on the UI
            SetListItemSelected(serverListItemData, false);

            // Make sure every item in the UI is positioned well
            RepositionItems();
            return;
        }
Exemplo n.º 2
0
        /// <summary>
        /// Connect this FacepunchP2PClient to a steam lobby
        /// </summary>
        /// <param name="lobbyToJoin">The Facepunch <see cref="Steamworks.Data.Lobby"/> object to join</param>
        /// <param name="pendCreates">Immediately set the NetWorker::PendCreates to true</param>
        public void Connect(Steamworks.Data.Lobby lobbyToJoin, bool pendCreates = false)
        {
            if (Disposed)
            {
                throw new ObjectDisposedException("FacepunchP2PClient", "This object has been disposed and can not be used to connect, please use a new FacepunchP2PClient");
            }

            ConnectToLobbyAsync(lobbyToJoin, pendCreates);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Connects to a Steam Lobby then kicks off connection to the lobby owner's SteamId
        /// </summary>
        /// <param name="lobbyToJoin">The <see cref="Steamworks.Data.Lobby"/> to join</param>
        /// <param name="pendCreates">Set the NetWorker::PendCreates to true</param>
        private async void ConnectToLobbyAsync(Steamworks.Data.Lobby lobbyToJoin, bool pendCreates)
        {
            RoomEnter roomEnter = await lobbyToJoin.Join();

            if (roomEnter != RoomEnter.Success)
            {
                return;
            }
            Lobby = lobbyToJoin;
            Connect(Lobby.Owner.Id, pendCreates);
        }
        /// <summary>
        /// Handle the RequestLobbyData Steam API callback
        /// </summary>
        /// <param name="result">The <see cref="LobbyDataUpdate_t"/> result set</param>
        private void OnLobbyDataUpdated(Steamworks.Data.Lobby lobby)
        {
            for (int i = 0; i < serverList.Count; i++)
            {
                if (serverList[i].lobby.Id == lobby.Id)
                {
                    // No-one is in the lobby, get rid!
                    if (lobby.MemberCount == 0)
                    {
                        RemoveServer(i);
                        return;
                    }

                    foreach (var entry in lobby.Data)
                    {
                        switch (entry.Key)
                        {
                        case "name":
                            serverList[i].ListItem.serverName.text = entry.Value;
                            break;

                        case "fnr_gameType":
                            serverList[i].ListItem.gameType.text = entry.Value;
                            break;

                        case "fnr_gameMode":
                            serverList[i].ListItem.gameMode.text = entry.Value;
                            break;

                        default:
                            break;
                        }
                    }

                    var maxPlayers  = lobby.MaxMembers;
                    var currPlayers = lobby.MemberCount;
                    serverList[i].ListItem.playerCount.text = $"{currPlayers}/{maxPlayers}";
                    return;
                }
            }
        }
Exemplo n.º 5
0
        private void UpdateInfoFromSteamworksLobby(Steamworks.Data.Lobby lobby)
        {
            if (lobby.Id != LobbyID)
            {
                return;
            }
            Steamworks.SteamMatchmaking.OnLobbyDataChanged -= UpdateInfoFromSteamworksLobby;
            if (string.IsNullOrWhiteSpace(lobby.GetData("haspassword")))
            {
                return;
            }
            bool.TryParse(lobby.GetData("haspassword"), out bool hasPassword);
            int.TryParse(lobby.GetData("playercount"), out int currPlayers);
            int.TryParse(lobby.GetData("maxplayernum"), out int maxPlayers);
            UInt64 ownerId = SteamManager.SteamIDStringToUInt64(lobby.GetData("lobbyowner"));

            if (OwnerID != ownerId)
            {
                return;
            }

            ServerName            = lobby.GetData("name");
            IP                    = "";
            Port                  = "";
            QueryPort             = "";
            PlayerCount           = currPlayers;
            MaxPlayers            = maxPlayers;
            HasPassword           = hasPassword;
            RespondedToSteamQuery = true;
            LobbyID               = lobby.Id;
            OwnerID               = ownerId;
            PingChecked           = false;
            OwnerVerified         = true;

            SteamManager.AssignLobbyDataToServerInfo(lobby, this);
        }
Exemplo n.º 6
0
 /// <summary>
 /// Sets the lobby to be joined when clicking the connect button.
 /// Usually called by the <see cref="JoinMenu"/> when a server list item is clicked
 /// </summary>
 /// <param name="steamId"></param>
 public void SetSelectedLobby(Steamworks.Data.Lobby lobby)
 {
     selectedLobby = lobby;
 }
Exemplo n.º 7
0
 public void OnLobbyJoinRequested(Steamworks.Data.Lobby lobby, Steamworks.SteamId friendId)
 {
     SteamManager.JoinLobby(lobby.Id, true);
 }
 private void OnLobbyMemberLeave(Steamworks.Data.Lobby lobby, Friend friend)
 {
     BeardedManStudios.Forge.Logging.BMSLog.Log(friend.Name + " left the lobby");
 }