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.
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);
}
}