• NetworkConnection
    • 属性

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

    ?