<commit_before>﻿const ClientP2P = require('./class/clientp2p.js')
const ServerP2P = require('./class/serverp2p.js')
const ClientCatalog = require('./class/clientCatalog.js')
const ClientBalancer = require('./class/clientBalancer.js')

mi_server_p2p = new ServerP2P();
list_client_p2p = [];
mi_client_balancer = new ClientBalancer(onConnectionBalancer,
                                        onErrorConnectionBalancer,
                                        onGetServerCatalog);
mi_client_catalog = new ClientCatalog(onConnectionCatalog,
                                      onErrorConnectionCatalog,
                                      onGetFileList,
                                      onGetPeerList,
                                      onAddNewFileDownloadPath,
                                      onDeleteFileDownloadPath);



function load() {

    // Iniciamos el servidor de archivos
    mi_server_p2p.listen();

    // Iniciamos la conexión con el balanceador de cargas
    mi_client_balancer.addIPPort('192.168.0.9', 3333);
    //mi_client_balancer.addIPPort('192.168.0.35', 3333);
    mi_client_balancer.connect();

    // Solicitamos un servidor de catalogo al balanceador de cargas
    mi_client_balancer.getCatalogServer();
}

function searchFiles(name) {
    mi_client_catalog.getFilesList(name);
}


/*********************************************************/
/*                  EVENTOS DE LAS CLASES
/*********************************************************/


/******************* BALANCEADOR  *************************/

/* Evento conexión con el balanceador */
function onConnectionBalancer() {
    document.title = "Cliente P2P - Conectado al balanceador";
}

/* Evento recibe servidor catálogo */
function onGetServerCatalog(info) {

    console.log('Recibe catalogo: ' + info);

    if (info != null){
      // Nos conectamos a un servidor de catálogo
      mi_client_catalog.setIPPort(info.ip, info.port);
      mi_client_catalog.connect();
    }else{

      // Solicitamos un servidor de catalogo al balanceador de cargas (5 segundos)
      setTimeout(function(){ mi_client_balancer.getCatalogServer() }, 1000 * 5)
    }
}

/* Nos desconectamos del balanceador */
function onErrorConnectionBalancer() {
  document.title = "Cliente P2P - Desconectado del balanceador";
}


/******************* CATÁLOGO  **************************/

/* Evento conexión con el servidor de Catalogo */
function onConnectionCatalog(){
  document.title = "Cliente P2P - Conectado al Catálogo";
  $("#button-search").prop("disabled", false);
}

/* Nos desconectamos o no nos pudimos conectar al catalogo */
function onErrorConnectionCatalog() {

  document.title = "Cliente P2P - Desconexión del Catálogo";

  // Solicitamos un servidor de catalogo al balanceador de cargas
  mi_client_balancer.getCatalogServer();
}

/* Evento recibe listado de archivos */
function onGetFileList(files) {

    clearResultTableSearch();

    if (files.length > 0){
      $("#info-no-files").hide();
      $.each(files, function(i, file) {
          addResultTableSearch(file.nombre, file.size, file.peers, file.hash);
      });
    }else{
      $("#info-no-files").show()
    }
}

/* Evento recibe lista de pares */
function onGetPeerList(data) {
    var current_file = data.file;
    var peers = data.peers;
    var peers_amount = peers.length;

    var client_p2p = new ClientP2P(onCompleteDownloadFilePeer,
            onErrorConnectionClientP2P,
            onConnectFilePeer,
            onCompleteDownload);

    client_p2p.setFile(current_file.id, current_file.nombre, current_file.hash,current_file.size);

    $.each(peers, function(i, peer) {
      client_p2p.addPeer(peer.ip, 6532);
    });

    addRowTableDownload(current_file.id, current_file.nombre, current_file.size, peers_amount, 'Descargando...');

    // Agregamos la conexión a la lista
    list_client_p2p[current_file.hash] = client_p2p;
    list_client_p2p[current_file.hash].downloadFile();
}


/* Evento que está a la escucha y obtiene el nombre de un nuevo archivo creado en la carpeta de descargas */
function onAddNewFileDownloadPath(file_name, stats){
  //FABIAN: No entiendo "list_client_p2p.length == 0" si estoy descargando 1 archivo, no evita que
  //informe que hay nuevo archivo hasta que terminen las descargas?
  if (list_client_p2p.length == 0 && mi_client_catalog.isCatalogConnected()){
      console.log('Se añadió un nuevo archivo: ' + file_name)
      mi_client_catalog.sendNewFile(file_name);
  }
}

/* Evento que está a la escucha y obtiene el nombre de un archivo eliminado de la carpeta de descargas */
function onDeleteFileDownloadPath(file_name, stats){
  console.log('Se eliminó el archivo: ' + file_name);
  mi_client_catalog.sendDeleteAllFiles();
  mi_client_catalog.sendAllFilesNames();
}


/******************* CLIENTE P2P  **************************/

/* No se puede conectar o se desconecta un par */
function onErrorConnectionClientP2P(lost_peer, file_id) {
  console.log('No se pudo conectar al par '+lost_peer+' descargando el archivo '+file_id);
}

/* Se conectar a un par */
function onConnectFilePeer(peer, file_hash, file_name, chunk) {
  addRowTablePeer(file_name, file_hash, chunk.offset, peer.ip, chunk.offset + ' - ' + (chunk.offset + chunk.size), 'Conectando...');
}

/* Se completa la descarga del par */<commit_msg>Fix de error que notificaba el archivo apenas comenzaba a descargar<commit_after>﻿const ClientP2P = require('./class/clientp2p.js')
const ServerP2P = require('./class/serverp2p.js')
const ClientCatalog = require('./class/clientCatalog.js')
const ClientBalancer = require('./class/clientBalancer.js')

mi_server_p2p = new ServerP2P();
list_client_p2p = [];
mi_client_balancer = new ClientBalancer(onConnectionBalancer,
                                        onErrorConnectionBalancer,
                                        onGetServerCatalog);
mi_client_catalog = new ClientCatalog(onConnectionCatalog,
                                      onErrorConnectionCatalog,
                                      onGetFileList,
                                      onGetPeerList,
                                      onAddNewFileDownloadPath,
                                      onDeleteFileDownloadPath);



function load() {

    // Iniciamos el servidor de archivos
    mi_server_p2p.listen();

    // Iniciamos la conexión con el balanceador de cargas
    mi_client_balancer.addIPPort('192.168.0.9', 3333);
    //mi_client_balancer.addIPPort('192.168.0.35', 3333);
    mi_client_balancer.connect();

    // Solicitamos un servidor de catalogo al balanceador de cargas
    mi_client_balancer.getCatalogServer();
}

function searchFiles(name) {
    mi_client_catalog.getFilesList(name);
}


/*********************************************************/
/*                  EVENTOS DE LAS CLASES
/*********************************************************/


/******************* BALANCEADOR  *************************/

/* Evento conexión con el balanceador */
function onConnectionBalancer() {
    document.title = "Cliente P2P - Conectado al balanceador";
}

/* Evento recibe servidor catálogo */
function onGetServerCatalog(info) {

    console.log('Recibe catalogo: ');
    console.log(info);

    if (info != null){
      // Nos conectamos a un servidor de catálogo
      mi_client_catalog.setIPPort(info.ip, info.port);
      mi_client_catalog.connect();
    }else{

      // Solicitamos un servidor de catalogo al balanceador de cargas (5 segundos)
      setTimeout(function(){ mi_client_balancer.getCatalogServer() }, 1000 * 5)
    }
}

/* Nos desconectamos del balanceador */
function onErrorConnectionBalancer() {
  document.title = "Cliente P2P - Desconectado del balanceador";
}


/******************* CATÁLOGO  **************************/

/* Evento conexión con el servidor de Catalogo */
function onConnectionCatalog(){
  document.title = "Cliente P2P - Conectado al Catálogo";
  $("#button-search").prop("disabled", false);
}

/* Nos desconectamos o no nos pudimos conectar al catalogo */
function onErrorConnectionCatalog() {

  document.title = "Cliente P2P - Desconexión del Catálogo";

  // Solicitamos un servidor de catalogo al balanceador de cargas
  mi_client_balancer.getCatalogServer();
}

/* Evento recibe listado de archivos */
function onGetFileList(files) {

    clearResultTableSearch();

    if (files.length > 0){
      $("#info-no-files").hide();
      $.each(files, function(i, file) {
          addResultTableSearch(file.nombre, file.size, file.peers, file.hash);
      });
    }else{
      $("#info-no-files").show()
    }
}

/* Evento recibe lista de pares */
function onGetPeerList(data) {
    var current_file = data.file;
    var peers = data.peers;
    var peers_amount = peers.length;

    var client_p2p = new ClientP2P(onCompleteDownloadFilePeer,
            onErrorConnectionClientP2P,
            onConnectFilePeer,
            onCompleteDownload);

    // Agregamos la conexión a la lista
    list_client_p2p['current_file.hash'] = client_p2p;
    

    client_p2p.setFile(current_file.id, current_file.nombre, current_file.hash,current_file.size);

    $.each(peers, function(i, peer) {
      client_p2p.addPeer(peer.ip, 6532);
    });

    addRowTableDownload(current_file.id, current_file.nombre, current_file.size, peers_amount, 'Descargando...');

    list_client_p2p['current_file.hash'].downloadFile();    
}


/* Evento que está a la escucha y obtiene el nombre de un nuevo archivo creado en la carpeta de descargas */
function onAddNewFileDownloadPath(file_name, stats){
  if (Object.keys(list_client_p2p).length == 0 && mi_client_catalog.isCatalogConnected()){
      console.log('Se añadió un nuevo archivo: ' + file_name)
      mi_client_catalog.sendNewFile(file_name);
  }
}

/* Evento que está a la escucha y obtiene el nombre de un archivo eliminado de la carpeta de descargas */
function onDeleteFileDownloadPath(file_name, stats){
  console.log('Se eliminó el archivo: ' + file_name);
  mi_client_catalog.sendDeleteAllFiles();
  mi_client_catalog.sendAllFilesNames();
}


/******************* CLIENTE P2P  **************************/

/* No se puede conectar o se desconecta un par */
function onErrorConnectionClientP2P(lost_peer, file_id) {
  console.log('No se pudo conectar al par '+lost_peer+' descargando el archivo '+file_id);
}

/* Se conectar a un par */
function onConnectFilePeer(peer, file_hash, file_name, chunk) {
  addRowTablePeer(file_name, file_hash, chunk.offset, peer.ip, chunk.offset + ' - ' + (chunk.offset + chunk.size), 'Conectando...');
}

/* Se completa la descarga del par */
{'fraction_non_alphanumeric': 0.1464980177458939, 'fraction_numerical': 0.011610345478572776, 'mean_word_length': 3.312169312169312, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 4, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 30, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7434588', 'n_tokens_mistral': 3352, 'n_tokens_neox': 3241, 'n_words': 741}