Skip to content
Snippets Groups Projects
Commit 777d39ca authored by Nico Ramos's avatar Nico Ramos
Browse files

ahh

parent 998ddfb5
No related branches found
No related tags found
No related merge requests found
63 0 → 100644
Enviar 0 → 100644
Janela 0 → 100644
Merge 0 → 100644
Readme 0 → 100644
...@@ -376,31 +376,103 @@ int server::receive_valid_frame(frame **f) { ...@@ -376,31 +376,103 @@ int server::receive_valid_frame(frame **f) {
return 1; return 1;
} }
void server::start_receveing_message() { queue<frames *> server::receive_frames_window(int lastSeq)
int continueTransmission = 1; {
queue<frames *> frames_queue;
cout << "Recebendo frames\n";
frame *f; frame *f;
retries = 0;
do { do {
if (!receive_valid_frame(&f)) { return; } f = receive_frame_socket();
if (!f) { return; } if ( f == NULL ) { continue; }
int frameType = f->get_tipo();
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;
}
switch (frameType) { // Recebe os frames de uma mensagem
case TEXTO: if ( tipoReceivingFrames == TEXTO && f->get_tipo() == TEXTO )
receive_text(f); {
continueTransmission = 0; if ( !verify_seq(f->get_seq(), lastSeq) ) { continue; }
break; frames_queue.push(f);
retries = 0;
continue;
}
case MIDIA: } while ( (f == NULL && retries < NUM_RETRIES) || frames_queue.size() < TAM_JANELA );
receive_midia(f);
continueTransmission = 0;
break;
default: return frames_queue;
break;
} }
void server::start_receveing_message() {
int continueTransmission = 1;
cout << "Recebendo frames\n";
frame *f;
lastSeq = -1;
do {
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); } while (continueTransmission);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment