def send_frame_stop_and_wait(self): # test # print(self.image) self.tableOfFrames = Image.gruop_into_frames(self.image, self.size, self.ChosenSumAlgorithm) #wyświetlenie tablicy zawierającej wszystkie ramki print(self.tableOfFrames) #zapis ilości ramek sizeoftable = len(self.tableOfFrames) #tworzy tablice o rozmiarze ilosci ramek z potwierdzeniami lub odrzuceniami pakietów for i in range(0, sizeoftable): self.ACK.append(False) #przenoszenie do receivera potrzebnych wartosci Receiver.numberOfValues = number Receiver.numberOfFrames = sizeoftable Receiver.reset_Data(Receiver) i = 0 endOfWindow = self.windowSize - 1 print("Rozmiar tablicy ramek:") print(sizeoftable) #wysyłanie poszczególnych ramek while i < sizeoftable: self.ACK[i] = self.receiver.receive_frame_stop_and_wait( self.tableOfFrames[i], i) if self.ACK[i]: i += 1 else: self.ACK[i] = False continue
def send_frame_selective(self): #stworzenie tablicy z ramkami self.tableOfFrames = Image.gruop_into_frames(self.image, self.size, self.ChosenSumAlgorithm) # zapisuje ilosc ramek dopedli wysylania sizeoftable = len(self.tableOfFrames) # tworzy tablice o rozmiarze ilosci ramek z potwierdzeniami lub odrzuceniami pakietów for i in range(0, sizeoftable): self.ACK.append(False) # przenoszenie do receivera potrzebnych wartosci Receiver.numberOfFrames = sizeoftable Receiver.reset_Data(Receiver) endOfWindow = self.windowSize - 1 i = 0 # petla wysylajaca ramki zgodnie z regulami algotrytmu selektywnego while i < sizeoftable: isCorrectFrame = True # petla operujaca oknem i wysylajaca te ramki ktore sender od nas chce for j in range(i, endOfWindow + 1): if j == sizeoftable: break if self.ACK[j] == False: # time.sleep(0.2) print(f'SENDER: wysłano obiekt nr "{j}"') self.ACK[j] = self.receiver.recieve_frame( self.tableOfFrames[j], j) else: pass # petla sprawdzajaca czy cala ramka zostala przeslana bez zarzutów for j in range(i, endOfWindow + 1): if j == sizeoftable: break if self.ACK[j] == False: isCorrectFrame = False # warunki odpowiadajace za przesuwanie sie okna gdy ramka jest dobra lub gdy ktorys z pakietow jest uszkodzony if isCorrectFrame: if (endOfWindow + self.windowSize) >= sizeoftable: endOfWindow = sizeoftable else: endOfWindow += self.windowSize i += self.windowSize else: count = 0 for j in range(i, endOfWindow + 1): if self.ACK[j] == True: count += 1 else: break endOfWindow += count i += count