コード例 #1
0
    public void SendDataIfReady(ref NetworkConnection connection, ref UdpNetworkDriver driver, List <PersistentPlayerInfo> allPlayerInfo)
    {
        if (sendQueue == null)
        {
            return;
        }

        // Heart beat every once in a while to prevent disconnects for no reason
        if (timeSinceLastHeartBeat * 1000 + heartbeatFrequencyMs <= Time.time * 1000)
        {
            timeSinceLastHeartBeat = Time.time;
            sendQueue.Enqueue((byte)LOBBY_CLIENT_REQUESTS.HEARTBEAT);
        }

        // Not time to send yet.
        if (timeSinceLastSend * 1000 + sendFrequencyMs > Time.time * 1000)
        {
            return;
        }

        timeSinceLastSend = Time.time;


        if (sendQueue.Count <= 0 || driver.GetConnectionState(connection) != NetworkConnection.State.Connected)
        {
            return;
        }

        // Send eveyrthing in the queue
        using (var writer = new DataStreamWriter(sendQueue.Count, Allocator.Temp))
        {
            while (sendQueue.Count > 0)
            {
                writer.Write(sendQueue.Dequeue());
            }

            connection.Send(driver, writer);
        }
    }