NetworkConnection

NetworkConnection是封装网络连接的HLAPI类。NetworkClient对象具有NetworkConnectionsNetworkServers具有多个连接 - 每个客户端都有一个连接。NetworkConnections能够将字节数组或串行化对象作为网络消息发送。

属性

属性功能
hostId用于此连接的NetworkTransport hostId。
connectionIdNetworkTransport connectionId用于此连接。
isReady用于控制是否向其发送状态更新的标志
lastMessageTime上次在此连接上收到消息的时间。
address此连接所连接的端点的IP地址。
playerControllers已添加了AddPlayer()的玩家组。
clientOwnedObjects该连接拥有权限的一组对象。

NetworkConnection类具有虚拟功能,当数据发送到传输层或从传输层接收数据时会调用该功能。这些功能允许NetworkConnection的特定版本检查或修改此数据,或者甚至将其路由到不同的来源。这些功能如下所示,包括默认行为:

  1. public virtual void TransportRecieve(byte[] bytes, int numBytes, int channelId)
  2. {
  3. HandleBytes(bytes, numBytes, channelId);
  4. }
  5. public virtual bool TransportSend(byte[] bytes, int numBytes, int channelId, out byte error)
  6. {
  7. return NetworkTransport.Send(hostId, connectionId, channelId, bytes, numBytes, out error);
  8. }

这些功能的一个例子是记录传入和传出数据包的内容。下面是一个从NetworkConnection派生的DebugConnection类的示例,它将前50个字节的数据包记录到控制台。要使用这样的类,请在NetworkClientNetworkServer上调用SetNetworkConnectionClass()函数。

  1. class DebugConnection : NetworkConnection
  2. {
  3. public override void TransportRecieve(byte[] bytes, int numBytes, int channelId)
  4. {
  5. StringBuilder msg = new StringBuilder();
  6. for (int i = 0; i < numBytes; i++)
  7. {
  8. var s = String.Format("{0:X2}", bytes[i]);
  9. msg.Append(s);
  10. if (i > 50) break;
  11. }
  12. UnityEngine.Debug.Log("TransportRecieve h:" + hostId + " con:" + connectionId + " bytes:" + numBytes + " " + msg);
  13. HandleBytes(bytes, numBytes, channelId);
  14. }
  15. public override bool TransportSend(byte[] bytes, int numBytes, int channelId, out byte error)
  16. {
  17. StringBuilder msg = new StringBuilder();
  18. for (int i = 0; i < numBytes; i++)
  19. {
  20. var s = String.Format("{0:X2}", bytes[i]);
  21. msg.Append(s);
  22. if (i > 50) break;
  23. }
  24. UnityEngine.Debug.Log("TransportSend h:" + hostId + " con:" + connectionId + " bytes:" + numBytes + " " + msg);
  25. return NetworkTransport.Send(hostId, connectionId, channelId, bytes, numBytes, out error);
  26. }
  27. }

?