Network with MasterServer - Client only connects to server when switching away from active windows

Hi all,

I really would like your help on this subject.

I am building a multiplayer game using the MasterServer tech. The server connects and disconnects flawlessly, and the client also connects without trouble.

However, when I run a new server, and try to connect as client, it blocks, and only releases when I change windows… Needless to say, this doesn’t happen on other machines

The code:

using UnityEngine;
using System.Collections;
using System.Net;

public class NetworkManagerCS : MonoBehaviour {
    public int loadlevel;
    public int connectPort = 25000;
    public string hostname;
    public string GameName = "Historical Grounds";
    private bool isServerRegistered;
    private bool refreshing;
    private HostData[] hostData;


    public void OnGUI() {
   
        if (Network.peerType == NetworkPeerType.Disconnected) {
            GUILayout.Label("Connection status: Disconnected");
       
            //connectToIP2 = GUILayout.TextField("127.0.0.1", GUILayout.MinWidth(100));
            //connectPort = int.Parse(GUILayout.TextField(connectPort.ToString()));

            GUILayout.BeginVertical();
            if (GUILayout.Button("Connect as client"))
            {
                ConnectToServer();   
            }
           
            if (GUILayout.Button("Start Server"))
            {               
                Network.InitializeServer(4, connectPort, true);
                MasterServer.RegisterHost(GameName, "Tutorial Game", "This is a turn based shooter");
            }
            GUILayout.EndVertical();
        }
        else
        {
            if (Network.peerType == NetworkPeerType.Connecting)
            {       
                GUILayout.Label("Connection status: Connecting");    
            }
            else if (Network.peerType == NetworkPeerType.Client)
            {           
                GUILayout.Label("Connection status: Client!");
                GUILayout.Label("Ping to server: " + Network.GetAveragePing(Network.connections[0]));       
                if( GUILayout.Button("Attack Server")) {
                    networkView.RPC("AttackServer",RPCMode.All, null);
                }
            }
            else if (Network.peerType == NetworkPeerType.Server)
            {
                GUILayout.Label("Connection status: Server!");
                GUILayout.Label("Hostname is:" + System.Net.Dns.GetHostName() );
                GUILayout.Label("Connections: " + Network.connections.Length);           
            }
       
            if (GUILayout.Button("Disconnect"))
            {
                Network.Disconnect(200);
            }
        }
   
   
    }

    public void Update() {
        if(refreshing) {
                if (MasterServer.PollHostList().Length > 0) {
                refreshing = false;
                Debug.Log(MasterServer.PollHostList().Length);   
                hostData = MasterServer.PollHostList();
                ConnectToServer();
            }
        }
    }

    public void ConnectToServer() {
        if (hostData == null) {
            MasterServer.RequestHostList(GameName);
            refreshing = true;
        } else {
            Network.Connect(hostData[0]);
        }
    }

    public void OnConnectedToServer()
    {       
        Application.LoadLevel(loadlevel);
    }

    public void OnDisconnectedFromServer(NetworkDisconnection info)
    {
       
       
    }

    public void OnFailedToConnect(NetworkConnectionError error)
    {
        Debug.LogError(error.ToString());
        Debug.Log("FAIL!");   
    }



    public void OnPlayerConnected(NetworkPlayer player)
    {
        Debug.Log("Player connected from: " + player.ipAddress + ":" + player.port);
    }

    public void OnServerInitialized()
    {
        Application.LoadLevel(loadlevel);
        Debug.Log("Server Started");
    }
       
    public void OnSerializeNetworkView(BitStream stream, NetworkMessageInfo info)
    {
       
    }

    void OnMasterServerEvent(MasterServerEvent msg) {
        if (msg == MasterServerEvent.RegistrationSucceeded){
            Debug.Log("Registered Server!");
        }
        isServerRegistered = true;
    }

    [RPC]
    public void AttackServer() {
        Debug.Log ("Server is under attack");
    }

    [RPC]
    public void UpdateHostname() {

    }
}

I’m sure this is a system thing, but maybe it has something to do with the code?

Thanks!

In Edit → Project Settings → Player, you will see a flag called “Run in background”. You’ll want that to be checked :slight_smile:

1 Like

Thanks!! It worked perfectly!