kmf
kmf

Reputation: 137

Determine if player is the host or the client

I want to assign specific information for the server's characters and as well as the client's characters. Now, how do I know if the player is the host or the client? I tried using isServer and isClient, but it both return true. Are these the correct keywords that I should use?

void Update () {
        if(isServer){
            Debug.Log("I'm the server");
        }

        if(isClient){
            Debug.Log("I'm the client");
        }
}

Upvotes: 3

Views: 20646

Answers (3)

Svend Hansen
Svend Hansen

Reputation: 3333

If you're connecting as a "host", you're actually both the "client" and "server" at the same time. This is in contrast to running a "dedicated server", which acts as the server authority, but doesn't represent a "client" connection. Like you suggest in your own answer, you can use isServer and !isServer, or probably:

void Update() {
    if (isServer) {
        Debug.Log("I'm the server (or host)");
    } else {
        Debug.Log("I'm the client");
    }
}

Upvotes: 5

JoeyMaru
JoeyMaru

Reputation: 212

Not sure if this applies to every situation, so I apologize if it does not - I am using a plugin called NATTraversal for Unity, and I was having a similar issue. I needed to find which connection is the host. However for me, since I am not using the relay servers (this is for you guys who are avoiding the relay) I found that I can do this check..

using UnityEngine.Networking;

void Start(){
    if(NetworkServer.connections.Count > 0){
        Debug.Log("This is the host.");
    } else {
        Debug.Log("This is a client.");
    }
}

This works in my scenario because the client's connection list is empty, but the host's is not. There very well may be a better way to do this, but I didn't know of one without a previous built list of NetworkIdentity's.

The Network.isServer bool always returns false for me, so this is how I got around it. Hopefully it helps someone out there.

Edit: (Adding crucial information) Please note, that this is AFTER matchmaking and connections have been established.

Another way to do it I have found is by listening to OnServerConnect in the NATLobbyManager.

public override void OnServerConnect(NetworkConnection conn){ }

That event only triggers for the host with the NATTraversal plugin, more info for anyone who may come across this while trying to figure all this stuff out. :)

Upvotes: 0

kmf
kmf

Reputation: 137

Instead of using isClient to determine if player is the client, i use !isServer instead.

void Update () {
        if(isServer){
            Debug.Log("I'm the server");
        }

        if(!isServer){
            Debug.Log("I'm the client");
        }
}

Upvotes: 2

Related Questions