NetworkClient
NetworkDiscovery

NetworkConnection

NetworkConnection は、ネットワーク接続をカプセル化した HLAPI クラスです。NetworkClient オブジェクトは NetworkConnection をひとつ持ち、NetworkServer は複数の接続(各クライアントからひとつずつ)を持ちます。NetworkConnection はバイト配列か、シリアライズされたオブジェクトをネットワークメッセージとして送信する機能を持っています。

プロパティー

プロパティー 説明
hostId 接続のための ネットワークトランスポートホストID
connectionId 接続のための ネットワークトランスポートコネクションID
isReady 通信ができる状態かどうかを制御するためのフラグ
lastMessageTime この接続で最後にメッセージを受信した時刻
address 接続先のエンドポイントの IP アドレス
playerControllers AddPlayer() によって加えられた一連のプレイヤー
clientOwnedObjects この接続が権限を持つ一連のオブジェクト

NetworkConnection クラスには、トランスポート層にデータの送受信を行うときに呼び出される仮想関数があります。これらの関数は、特殊なバージョンの NetworkConnection を使って、データを調べたり変更したり、また、さまざまなソースにデータを送信することさえできます。これらの関数は、以下のとおりです。

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

例として、送受信のパケットのコンテンツを記録してみましょう。以下は、NetworkConnection から派生した DebugConnection クラスの例で、パケットの最初の 50 バイトをコンソールに出力します。このようなクラスを使用するには、NetworkClient や NetworkServer 上で SetNetworkConnectionClass() 関数を呼び出します。

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