Ejemplo n.º 1
0
        /// <summary>
        /// [Sender] Handle ack information from Receiver.
        /// </summary>
        /// <param name="packet"></param>
        public void OnDataAck(DataAckPacket packet)
        {
            foreach (var chunkSequence in packet.AckList)
            {
                DataPool[packet.DataSequence].Remove(chunkSequence);
            }

            Task.Run(async() => {
                await SendAck2Async(packet.AckSequence);
            });
        }
Ejemplo n.º 2
0
        /// <summary>
        /// [Receiver] Send AckList in queue
        /// </summary>
        /// <param name="dataSequence"></param>
        /// <returns></returns>
        public async Task SendAckAsync(int dataSequence)
        {
            DataAckPacket dataAckPacket = new DataAckPacket(ClientId, 0, dataSequence, AckList[dataSequence]);

            dataAckPacket.AckSequence = dataAckPacket.GetHashCode();
            await Conn.SendAsync(dataAckPacket.Dgram, SenderIPEndPoint);

            AckStatusList[dataAckPacket.AckSequence] = 0;

            AckList[dataSequence].Clear();

            while (AckStatusList[dataAckPacket.AckSequence] == 1)
            {
                await Task.Delay(1000);

                await Conn.SendAsync(dataAckPacket.Dgram, SenderIPEndPoint);
            }
        }