From 777d39ca73f8d9a500e620f4db38e6b6b2184fb1 Mon Sep 17 00:00:00 2001 From: Nico <nigr21@inf.ufpr.br> Date: Sun, 26 Feb 2023 19:36:43 -0300 Subject: [PATCH] ahh --- 63 | 0 Adicionar | 0 Arrumar | 0 Demonstracao | 0 Enviar | 0 Janela | 0 Merge | 0 Readme | 0 headers/server.h | 110 ++++++++++++++++++++++++++++++++++++++-------- received/todo.txt | 0 10 files changed, 91 insertions(+), 19 deletions(-) create mode 100644 63 create mode 100644 Adicionar create mode 100644 Arrumar create mode 100644 Demonstracao create mode 100644 Enviar create mode 100644 Janela create mode 100644 Merge create mode 100644 Readme create mode 100644 received/todo.txt diff --git a/63 b/63 new file mode 100644 index 0000000..e69de29 diff --git a/Adicionar b/Adicionar new file mode 100644 index 0000000..e69de29 diff --git a/Arrumar b/Arrumar new file mode 100644 index 0000000..e69de29 diff --git a/Demonstracao b/Demonstracao new file mode 100644 index 0000000..e69de29 diff --git a/Enviar b/Enviar new file mode 100644 index 0000000..e69de29 diff --git a/Janela b/Janela new file mode 100644 index 0000000..e69de29 diff --git a/Merge b/Merge new file mode 100644 index 0000000..e69de29 diff --git a/Readme b/Readme new file mode 100644 index 0000000..e69de29 diff --git a/headers/server.h b/headers/server.h index d45e9e6..07473d0 100644 --- a/headers/server.h +++ b/headers/server.h @@ -376,31 +376,103 @@ int server::receive_valid_frame(frame **f) { return 1; } +queue<frames *> server::receive_frames_window(int lastSeq) +{ + queue<frames *> frames_queue; + frame *f; + retries = 0; + + do { + f = receive_frame_socket(); + if ( f == NULL ) { continue; } + + retries++; + + int tipo = f->get_tipo(); + + // Primeiro frame a ser recebido, seta o tipo + if ( lastSeq == -1 ) + { + // Ignora os frames perdidos na linha + if ( (tipo != MIDIA || tipo != TEXTO) && f->get_seq() != 0 ) {continue;} + tipoReceivingFrames = f->get_tipo(); + frames_queue.push(f); + lastSeq = 0; + retries = 0; + continue; } + + // Adiciona o frame de fim de transmissao + if ( f->get_tipo() == FIMT ) + { + frames_queue.push(f); + return frames_queue; + } + + // Ignora se o frame nao for do tipo midia e esteja recebendo midia + if ( f->get_tipo() == MIDIA && tipoReceivingFrames == MIDIA ) + { + // Ignora se for um frame do tipo midia que nao e o segundo da sequencia + if ( lastSeq != 0 || (TAM_JANELA > 1 && f->get_seq() != 1)) { continue; } + + // Se for o segundo frame do tipo midia, muda o tipo esperado + tipoReceivingFrames = DADOS; + frames_queue.push(f); + lastSeq = 1; + retries = 0; + continue; + } + + // Recebe os frames de dados de um arquivo + if ( tipoReceivingFrames == DADOS && f->get_tipo() == DADOS ) + { + if ( !verify_seq(f->get_seq(), lastSeq) ) { continue; } + frames_queue.push(f); + retries = 0; + continue; + } + + // Recebe os frames de uma mensagem + if ( tipoReceivingFrames == TEXTO && f->get_tipo() == TEXTO ) + { + if ( !verify_seq(f->get_seq(), lastSeq) ) { continue; } + frames_queue.push(f); + retries = 0; + continue; + } + + } while ( (f == NULL && retries < NUM_RETRIES) || frames_queue.size() < TAM_JANELA ); + + return frames_queue; +} + void server::start_receveing_message() { int continueTransmission = 1; cout << "Recebendo frames\n"; frame *f; + lastSeq = -1; do { - if (!receive_valid_frame(&f)) { return; } - if (!f) { return; } - int frameType = f->get_tipo(); - - switch (frameType) { - case TEXTO: - receive_text(f); - continueTransmission = 0; - break; - - case MIDIA: - receive_midia(f); - continueTransmission = 0; - break; - - default: - break; - } - + queue<frames *> frames = receive_frames_window(lastSeq); + +// if (!receive_valid_frame(&f)) { return; } +// if (!f) { return; } +// int frameType = f->get_tipo(); +// +// switch (frameType) { +// case TEXTO: +// receive_text(f); +// continueTransmission = 0; +// break; +// +// case MIDIA: +// receive_midia(f); +// continueTransmission = 0; +// break; +// +// default: +// break; +// } +// } while (continueTransmission); } diff --git a/received/todo.txt b/received/todo.txt new file mode 100644 index 0000000..e69de29 -- GitLab