diff --git a/63 b/63 new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Adicionar b/Adicionar new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Arrumar b/Arrumar new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Demonstracao b/Demonstracao new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Enviar b/Enviar new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Janela b/Janela new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Merge b/Merge new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Readme b/Readme new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/headers/server.h b/headers/server.h index d45e9e691d81c0b0139d4519c52740907393f207..07473d0a0b81b28d51325c690368c28fc7922369 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391