Note: UNet is deprecated, and will be removed from Unity in the future. A new system is under development. For more information and next steps see this blog post. |
NetworkConnection is a high-level API class that encapsulates a network connection. (NetworkClient)[class-NetworkClient] objects have a NetworkConnection
, and NetworkServers have multiple connections - one from each client. NetworkConnections have the ability to send byte arrays, or serialized objects as network messages.
Propiedad: | Función: | |
---|---|---|
hostId | The NetworkTransport hostId for this connection. | |
connectionId | The NetworkTransport connectionId for this connection. |
|
isReady | Flag to control whether state updates are sent to this connection | |
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);
}
}