コード例 #1
0
 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]
コード例 #2
0
 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]
コード例 #3
0
 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()
コード例 #4
0
 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()