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