/// <summary> /// Add a server to the list of servers /// </summary> /// <param name="address"></param> /// <param name="port"></param> private void AddServer(string address, ushort port = NetWorker.DEFAULT_PORT, bool isLocal = true) { var hostAndPort = $"{address}:{port}"; for (int i = 0; i < serverList.Count; ++i) { var server = serverList[i]; if (server.Hostname == hostAndPort) { // Already have that server listed nothing else to do return; } } var serverListItemData = new ServerListItemData { ListItem = GameObject.Instantiate <ServerListEntry>(serverListEntryTemplate, servers.content), Hostname = hostAndPort, IsLocal = isLocal }; serverListItemData.ListItem.gameObject.SetActive(true); var endpoint = HostResolver.Resolve(address, Settings.SQPPort); serverListItemData.SqpQuery = sqpClient.GetQuery(endpoint); UpdateItem(serverListItemData); serverListItemData.NextUpdate = Time.time + 5.0f + UnityEngine.Random.Range(0.0f, 1.0f); serverList.Add(serverListItemData); SetListItemSelected(serverListItemData, false); RepositionItems(); }
/// <summary> /// Update a specific server's details on the server list. /// </summary> /// <param name="option">The server display information to update</param> private void UpdateItem(ServerListItemData option) { option.ListItem.hostName.text = option.Hostname; if (option.SqpQuery.ValidResult) { var sid = option.SqpQuery.ServerInfo.ServerInfoData; option.ListItem.serverName.text = $"{sid.ServerName} ({option.LocalOrGlobal})"; option.ListItem.playerCount.text = $"{sid.CurrentPlayers.ToString()}/{sid.MaxPlayers.ToString()}"; option.ListItem.pingTime.text = $"{option.SqpQuery.RTT.ToString()} ms"; } else { option.ListItem.serverName.text = "Server offline"; option.ListItem.playerCount.text = "-/-"; option.ListItem.pingTime.text = "--"; } }
/// <summary> /// Set the border around the selected server entry /// </summary> /// <param name="data"></param> /// <param name="selected"></param> private void SetListItemSelected(ServerListItemData data, bool selected) { data.ListItem.GetComponent <Image>().enabled = selected; }
private void RemoveServer(ServerListItemData item) { Destroy(item.ListItem.gameObject); serverList.Remove(item); RepositionItems(); }