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

ahhhhhh

parent 777d39ca
No related branches found
No related tags found
No related merge requests found
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#define UI unsigned int #define UI unsigned int
//tamanho da janela //tamanho da janela
#define TAM_JANELA 1 #define TAM_JANELA 2
// Macro que cria uma sequencia com o 1 deslocado "des" posicoes a direita // Macro que cria uma sequencia com o 1 deslocado "des" posicoes a direita
#define MASKR(des) (1 << des) #define MASKR(des) (1 << des)
......
...@@ -33,6 +33,7 @@ class server { ...@@ -33,6 +33,7 @@ class server {
private: private:
// --------- Dados ---------- // // --------- Dados ---------- //
int soquete; int soquete;
int tipoReceivingFrames;
conexao *socket; conexao *socket;
...@@ -54,6 +55,7 @@ private: ...@@ -54,6 +55,7 @@ private:
int receive_file_data(string fileName); int receive_file_data(string fileName);
bool verify_crc8(frame *f); bool verify_crc8(frame *f);
bool verify_seq(int seq, int lastSeq); bool verify_seq(int seq, int lastSeq);
queue<frame *> receive_frames_window(int lastSeq);
public: public:
// ------- Construtores ------ // // ------- Construtores ------ //
...@@ -376,11 +378,11 @@ int server::receive_valid_frame(frame **f) { ...@@ -376,11 +378,11 @@ int server::receive_valid_frame(frame **f) {
return 1; return 1;
} }
queue<frames *> server::receive_frames_window(int lastSeq) queue<frame *> server::receive_frames_window(int lastSeq)
{ {
queue<frames *> frames_queue; queue<frame *> frames_queue;
frame *f; frame *f;
retries = 0; int retries = 0;
do { do {
f = receive_frame_socket(); f = receive_frame_socket();
...@@ -390,26 +392,28 @@ queue<frames *> server::receive_frames_window(int lastSeq) ...@@ -390,26 +392,28 @@ queue<frames *> server::receive_frames_window(int lastSeq)
int tipo = f->get_tipo(); int tipo = f->get_tipo();
// Adiciona o frame de fim de transmissao
if ( tipo == FIMT )
{
frames_queue.push(f);
return frames_queue;
}
// Primeiro frame a ser recebido, seta o tipo // Primeiro frame a ser recebido, seta o tipo
if ( lastSeq == -1 ) if ( lastSeq == -1 )
{ {
// Ignora os frames perdidos na linha // Ignora os frames perdidos na linha
if ( (tipo != MIDIA || tipo != TEXTO) && f->get_seq() != 0 ) {continue;} if ( (tipo != MIDIA && tipo != TEXTO) || f->get_seq() != 0 ) {continue;}
tipoReceivingFrames = f->get_tipo(); tipoReceivingFrames = f->get_tipo();
frames_queue.push(f); frames_queue.push(f);
lastSeq = 0; lastSeq = 0;
retries = 0; retries = 0;
continue; } 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 // Ignora se o frame nao for do tipo midia e esteja recebendo midia
if ( f->get_tipo() == MIDIA && tipoReceivingFrames == MIDIA ) if ( tipo == MIDIA && tipoReceivingFrames == MIDIA )
{ {
// Ignora se for um frame do tipo midia que nao e o segundo da sequencia // 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; } if ( lastSeq != 0 || (TAM_JANELA > 1 && f->get_seq() != 1)) { continue; }
...@@ -423,20 +427,22 @@ queue<frames *> server::receive_frames_window(int lastSeq) ...@@ -423,20 +427,22 @@ queue<frames *> server::receive_frames_window(int lastSeq)
} }
// Recebe os frames de dados de um arquivo // Recebe os frames de dados de um arquivo
if ( tipoReceivingFrames == DADOS && f->get_tipo() == DADOS ) if ( tipoReceivingFrames == DADOS && tipo == DADOS )
{ {
if ( !verify_seq(f->get_seq(), lastSeq) ) { continue; } if ( !verify_seq(f->get_seq(), lastSeq) ) { continue; }
frames_queue.push(f); frames_queue.push(f);
retries = 0; retries = 0;
lastSeq = f->get_seq();
continue; continue;
} }
// Recebe os frames de uma mensagem // Recebe os frames de uma mensagem
if ( tipoReceivingFrames == TEXTO && f->get_tipo() == TEXTO ) if ( tipoReceivingFrames == TEXTO && tipo == TEXTO )
{ {
if ( !verify_seq(f->get_seq(), lastSeq) ) { continue; } if ( !verify_seq(f->get_seq(), lastSeq) ) { continue; }
frames_queue.push(f); frames_queue.push(f);
retries = 0; retries = 0;
lastSeq = f->get_seq();
continue; continue;
} }
...@@ -449,10 +455,31 @@ void server::start_receveing_message() { ...@@ -449,10 +455,31 @@ void server::start_receveing_message() {
int continueTransmission = 1; int continueTransmission = 1;
cout << "Recebendo frames\n"; cout << "Recebendo frames\n";
frame *f; int lastSeq = -1;
lastSeq = -1;
do { do {
queue<frames *> frames = receive_frames_window(lastSeq); queue<frame *> frames = receive_frames_window(lastSeq);
cout << "Quantidade de frames: " << frames.size() << "\n";
while ( !frames.empty() )
{
cout << "Frame recebido: \n";
frame *f = frames.front();
frames.pop();
f->imprime(HEX);
cout << "\n";
int tipo = f->get_tipo();
switch (tipo)
{
case FIMT:
continueTransmission = 0;
case TEXTO:
lastSeq = f->get_seq();
}
}
cout << "Recebeu todos os frames de uma janela\n";
// if (!receive_valid_frame(&f)) { return; } // if (!receive_valid_frame(&f)) { return; }
// if (!f) { return; } // if (!f) { return; }
...@@ -474,6 +501,8 @@ void server::start_receveing_message() { ...@@ -474,6 +501,8 @@ void server::start_receveing_message() {
// } // }
// //
} while (continueTransmission); } while (continueTransmission);
cout << "Encerrou a transmissao\n";
} }
// ------------------------------- PUBLIC --------------------------------- // // ------------------------------- PUBLIC --------------------------------- //
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment