Version: 5.6
NetworkClient
NetworkDiscovery

NetworkConnection

NetworkConnection es una clase HLAPI que encapsula una conexión en red. Los objetos NetworkClient tienen NetworkConnections, y NetworkServers tienen varias conexiones - una para cada cliente. Las NetworkConnections tienen la habilidad de enviar arreglos byte, u objetos serializados como mensajes en red.

Propiedades

Propiedad: Función:
hostId El hostId del NetworkTransport para esta conexión.
connectionId El connectionId del NetworkTransport para esta conexión.
isReady Flag para controlar si las actualizaciones de estado son enviadas a este
lastMessageTime La última vez que un mensaje fue recibido en esta conexión.
address La dirección IP del punto final a la conexión que esta está conectada.
playerControllers El conjunto de jugadores que han sido agregados con AddPlayer().
clientOwnedObjects El conjunto de objetos sobre los que esta conexión tiene autoridad.

La clase NetworkConnection tiene funciones virtuales que son llamadas cuando los datos son enviados a la transport layer o recibidos de la transport layer. Estas funciones permiten versiones especializadas del NetworkConnection para inspeccionar o modificar estos datos, o incluso en-rutarlo a diferentes fuentes. Estas funciones se muestran abajo, incluyendo el comportamiento predeterminado:

public virtual void TransportRecieve(byte[] bytes, int numBytes, int channelId)
{
    HandleBytes(bytes, numBytes, channelId);
}

public virtual bool TransportSend(byte[] bytes, int numBytes, int channelId, out byte error)
{
    return NetworkTransport.Send(hostId, connectionId, channelId, bytes, numBytes, out error);
}

Un ejemplo de uso de estas funciones es registrar el contenido de paquetes entrando y saliendo. Abajo hay un ejemplo de una clase DebugConnection que es recibida del NetworkConnection que registrar los primeros 50 bytes de paquetes a la consola. Para utilizar una clase como esta llame la función SetNetworkConnectionClass() en un NetworkClient o NetworkServer.

class DebugConnection : NetworkConnection
{
    public override void TransportRecieve(byte[] bytes, int numBytes, int channelId)
    {
        StringBuilder msg = new StringBuilder();
        for (int i = 0; i < numBytes; i++)
        {
            var s = String.Format("{0:X2}", bytes[i]);
            msg.Append(s);
            if (i > 50) break;
        }
        UnityEngine.Debug.Log("TransportRecieve h:" + hostId + " con:" + connectionId + " bytes:" + numBytes + " " + msg);

        HandleBytes(bytes, numBytes, channelId);
    }

    public override bool TransportSend(byte[] bytes, int numBytes, int channelId, out byte error)
    {
        StringBuilder msg = new StringBuilder();
        for (int i = 0; i < numBytes; i++)
        {
            var s = String.Format("{0:X2}", bytes[i]);
            msg.Append(s);
            if (i > 50) break;
        }
        UnityEngine.Debug.Log("TransportSend    h:" + hostId + " con:" + connectionId + " bytes:" + numBytes + " " + msg);

        return NetworkTransport.Send(hostId, connectionId, channelId, bytes, numBytes, out error);
    }
}
NetworkClient
NetworkDiscovery