コード例 #1
0
    public SGCommand ReceiveStream(int player)
    {
        NetworkStream stream;

        if (m_clients[player] != null && m_clients[player].Connected)
        {
            stream = m_clients[player].GetStream();
        }
        else
        {
            Debug.LogWarning("Trying to receive stream from disconnected player " + player);
            return(null);
        }

        if (stream.DataAvailable)
        {
            // Decode the first 32 bits to find the length of the remaining data
            byte[] dataSizeBytes = new byte[4];
            stream.Read(dataSizeBytes, 0, 4);
            int dataSize = BitConverter.ToInt32(dataSizeBytes, 0);
            dataSize = IPAddress.NetworkToHostOrder(dataSize);
            //Debug.Log("Received data of size " + dataSize + " bytes");

            // Receive the data
            // Convert size to bytes
            byte[] data = new byte[dataSize];
            stream.Read(data, 0, dataSize);

            // Put the data into a BitStream
            BKSystem.IO.BitStream clientStream = new BKSystem.IO.BitStream(dataSize * 8);
            clientStream.Write(data);

            if (clientStream.Length > 0)
            {
                return(SGCommand.CreateCommandFromPacket(clientStream, player));
            }
        }
        return(null);
    }