def handleNack(self, buffer): packet = Nack() packet.buffer = buffer packet.decode() for seq in packet.packets: if seq in self.recoveryQueue: pk = self.recoveryQueue[seq] pk.sequenceNumber = self.sequenceNumber self.sequenceNumber += 1 self.packetToSend.append(pk) del self.recoveryQueue[seq]
def handleNack(self, buffer): packet = Nack() packet.buffer = buffer packet.decode() for seq in packet.packets: if seq in self.recoveryQueue: pk = self.recoveryQueue[seq] pk.sequenceNumber = self.sendSequenceNumber self.sendSequenceNumber += 1 pk.sendTime = timeNow() pk.encode() self.sendPacket(pk) del self.recoveryQueue[seq]
def update(self, timestamp): if not self.isActive and (self.lastUpdate + 10) < timestamp: self.disconnect("timeout") return self.isActive = False if len(self.ackQueue) > 0: pk = Ack() pk.packets = self.ackQueue self.sendPacket(pk) self.ackQueue = [] if len(self.nackQueue) > 0: pk = Nack() pk.packets = self.nackQueue self.sendPacket(pk) self.nackQueue = [] if len(self.packetToSend) > 0: limit = 16 for count, pk in enumerate(self.packetToSend): pk.sendTime = timestamp pk.encode() self.recoveryQueue[pk.sequenceNumber] = pk del self.packetToSend[count] self.sendPacket(pk) limit -= 1 if limit <= 0: break if len(self.packetToSend) > 2048: self.packetToSend = [] for seq, pk in dict(self.recoveryQueue).items(): if pk.sendTime < (timeNow() - 8): self.packetToSend.append(pk) del self.recoveryQueue[seq] self.sendTheQueue()
def update(self, timestamp): if not self.isActive and (self.lastUpdate + 10000) < timestamp: self.disconnect("timeout") return self.isActive = False if len(self.ackQueue) > 0: pk = Ack() pk.packets = self.ackQueue self.sendPacket(pk) self.ackQueue = [] if len(self.nackQueue) > 0: pk = Nack() pk.packets = self.nackQueue self.sendPacket(pk) self.nackQueue = [] if len(self.packetToSend) > 0: limit = 16 for key, pk in enumerate(self.packetToSend): pk.sendTime = timestamp pk.encode() self.recoveryQueue[pk.sequenceNumber] = pk del self.packetToSend[key] #self.sendPacket(pk) #ToDo limit -= 1 if limit <= 0: break if len(self.packetToSend) > 2048: self.packetToSend = [] if len(self.needAck) > 0: for identifierACK, indexes in self.needAck.items(): if len(indexes) == 0: del self.needAck[identifierACK] # Todo add Notify ACK for seq, pk in dict(self.recoveryQueue).items(): if pk.sendTime < (timeNow() - 8): self.packetToSend.append(pk) del self.recoveryQueue[seq] # Should look at that later for seq, value in enumerate(self.receivedWindow): if seq < self.windowStart: del self.receivedWindow[seq] else: break self.sendTheQueue()