示例#1
0
RUniforme::RUniforme(QWidget *parent, Imagen image) :
    QWidget(parent),
    ui(new Ui::RUniforme)
{
    ui->setupUi(this);

    setValues(image);

    connect(ui->ButtonCancelar, SIGNAL(clicked()), this, SLOT(cancelar()));
    connect(ui->ButtonAceptar, SIGNAL(clicked()), this, SLOT(aceptar()));

    //cambios de spinbox cambian imagen directamente
    connect(ui->doubleSpinBoxP, SIGNAL(editingFinished()), this, SLOT(cambiarImagen()));
    connect(ui->spinBoxN1, SIGNAL(editingFinished()), this, SLOT(cambiarImagen()));
    connect(ui->spinBoxN2, SIGNAL(editingFinished()), this, SLOT(cambiarImagen()));

    connect(ui->checkBoxHistR, SIGNAL(pressed()), this, SLOT(verHistRuido()));
    connect(ui->checkBoxImagenR, SIGNAL(pressed()), this, SLOT(verImagenRuido()));


    connect(ui->spinBoxN1, SIGNAL(editingFinished()), this, SLOT(comprobarRango()));
    connect(ui->spinBoxN2, SIGNAL(editingFinished()), this, SLOT(comprobarRango()));
    //cambiarImagen(); //por defecto ya se ve un ruido hecho
    //emit(changed());

}
示例#2
0
Frmanalitica2::Frmanalitica2(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Frmanalitica2)
{
    ui->setupUi(this);
    connect(ui->btnAnadir,SIGNAL(clicked()),this,SLOT(aceptar()));
    connect(ui->btnCancelar,SIGNAL(clicked()),this,SLOT(close()));
}
示例#3
0
FrmTarifas::FrmTarifas(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::FrmTarifas)
{
    ui->setupUi(this);
    ui->tabWidget->setCurrentIndex(0);
    QSqlQueryModel *modelo = new QSqlQueryModel(this);
    modelo->setQuery("Select descripcion from codigotarifa",Configuracion_global->groupDB);
    ui->listaTarifa->setModel(modelo);
    modelVolumenes = new QSqlQueryModel(this);
    ui->tabla_volumenes->setModel(modelVolumenes);
    this->id_volumen =0;
    this->id_tarifa =0;
    modelVolumenes->setQuery(QString("select id,desde,hasta,precio from articulos_volumen where id_tarifa = %1").arg(this->id_tarifa),
                             Configuracion_global->groupDB);
    QStringList headers;
    QVariantList sizes;
    headers << "id" <<tr("Desde") << tr("Hasta") << tr("Precio");
    sizes << 0 << 60 << 60 <<100;
    for(int i=0;i<headers.size();i++)
    {
        ui->tabla_volumenes->setColumnWidth(i,sizes.at(i).toInt());
        modelVolumenes->setHeaderData(i,Qt::Horizontal,headers.at(i));
        if(i>0)
            ui->tabla_volumenes->setItemDelegateForColumn(i,new MonetaryDelegate(this));
    }



    //-----------
    // CONEXIONES
    //-----------
    connect(ui->listaTarifa,SIGNAL(clicked(QModelIndex)),this,SLOT(cargarDatosTarifa(QModelIndex)));
    connect(ui->txtPVPDivisa,SIGNAL(editingFinished()),Configuracion_global,SLOT(format_text()));
    connect(ui->txtPVPDivisa,SIGNAL(editingFinished()),this,SLOT(cambiar_precio_editingfinished()));
    connect(ui->btnAceptar,SIGNAL(clicked()),this,SLOT(aceptar()));
    connect(ui->spinMargen,SIGNAL(valueChanged(double)),this,SLOT(calcular_precio(double)));


    //-------------------------------
    // CAMBIO DIVISA
    //-------------------------------
    connect(Configuracion_global,SIGNAL(cambioReady(float)),this,SLOT(asignarcambiodivisa(float)));
    //   Configuracion_global->getCambio("EUR","USD",1);

    ui->spinMargen->setValue(Configuracion_global->margen);
    ui->spinmargen_minimo->setValue(Configuracion_global->margen_minimo);



}
void Servidor::ejecutar(unsigned int repeticiones) {
    char filename[42], palabra[42], buffer[TAM_DGRAMA+1];
    for (int i = 0; i < repeticiones; ++i) {
        otro_descriptor = aceptar();
        recibir_n();
        for(int i = 0; i < n; ++i) {
            sprintf(filename, "%d.txt", i);
            archivos.push_back(Archivo(filename, O_RDONLY));
            recibir(TAM_DGRAMA, buffer);
            palabra_aleatoria(buffer, palabra);
            archivos.back().escribe(palabra, strlen(palabra));
            archivos.back().cerrar();
            close(otro_descriptor);
        }
    }
}
示例#5
0
void Usuarios::mostrarNuevo(){

    lbApellido->setVisible(true);
    lbApellido->move(490,180);
    lbApellido->setText("Apellido: ");

    lbCedula->setVisible(true);
    lbCedula->move(270,230);
    lbCedula->setText("Cedula: ");

    leCedula->move(330,230);

    lbNombre->setVisible(true);
    lbNombre->move(260,180);
    lbNombre->setText("Nombre: ");

    leNombre->setVisible(true);
    leNombre->move(330,180);
    leNombre->setText("");

    leApellido->setVisible(true);
    leApellido->move(560,180);
    leApellido->setText("");

    leCedula->setVisible(true);
    leCedula->setText("");

    btnAceptar->setVisible(true);
    disconnect(btnAceptar, SIGNAL(clicked()), 0, 0);
    btnAceptar->move(450,320);
    btnAceptar->setText("Aceptar");
    btnAceptar->setIcon(QIcon(":/images/aceptar.png"));
    btnAceptar->setIconSize(QSize(15,15));
    connect(btnAceptar,SIGNAL(clicked()),this,SLOT(aceptar()));

    rbEstu->setVisible(true);
    rbEstu->move(540,260);

    rbProf->move(540,230);
    rbProf->setVisible(true);

    lbTipo->setText("Tipo: ");
    lbTipo->move(490,230);
    lbTipo->setVisible(true);

}
/**
 * Loop principal del algoritmo Simulated Annealing.
 *
 * @instance  :: Instancia del BACP
 * @iter      :: Numero maximo de iteraciones para una temperatura t_current
 * @t_current :: Temperatura inicial
 * @t_min     :: Temperatura minima (eps)
 * @alpha     :: Velocidad de decaimiento de la temperatura
 */
void run(struct bacp_instance *instance, int iter, float t_current, float t_min, float alpha)
{
  unsigned short int i;
  unsigned short int new_cost;
  unsigned short int *s_c      = instance->period;
  unsigned short int old_cost  = cost(instance);
  unsigned short int best_cost = old_cost;
  unsigned short int *s_best   = copy_solution(instance->period, instance->n_courses);

  instance->period = NULL;
  while (t_current > t_min) {
    i = 0;
    while (++i <= iter) {
      if (instance->period) free(instance->period);

      instance->period = s_c;
      instance->period = neighbour(instance);
      new_cost         = cost(instance);

      if (new_cost < old_cost || (exp(-abs(new_cost - old_cost)/t_current) > aceptar())) {
        free(s_c);
        s_c              = instance->period;
        old_cost         = new_cost;
        instance->period = NULL;
      }

      if ( best_cost > new_cost ) {
        if (s_best) free(s_best);
        s_best    = copy_solution(s_c, instance->n_courses);
        best_cost = new_cost;
      }
    }
    t_current = t_current * alpha;
  }

  if (instance->period) free(instance->period);
  if (s_c) free(s_c);

  instance->period = s_best;
}
示例#7
0
void Libro::mostrarNuevo(){

    lbCota->setText("(*)Cota: ");
    lbCota->move(200,180);
    lbCota->setVisible(true);

    leCota->move(270,180);
    leCota->setVisible(true);

    lbAutor->setText("(*)Autor: ");
    lbAutor->move(400,180);
    lbAutor->setVisible(true);

    leAutor->move(460,180);
    leAutor->setVisible(true);

    lbTitulo->setText("(*)Titulo: ");
    lbTitulo->move(590,180);
    lbTitulo->setVisible(true);

    leTitulo->move(660,180);
    leTitulo->setVisible(true);

    lbMateria->setText("(*)Materia: ");
    lbMateria->move(200,230);
    lbMateria->setVisible(true);

    leMateria->move(270,230);
    leMateria->setVisible(true);

    lbEditorial->move(400,230);
    lbEditorial->setVisible(true);

    leEditorial->move(460,230);
    leEditorial->setVisible(true);

    lbAnhoPublicacion->move(590,230);
    lbAnhoPublicacion->setVisible(true);

    leAnhoPublicacion->move(690,230);
    leAnhoPublicacion->setVisible(true);

    lbLugar->move(200,280);
    lbLugar->setVisible(true);

    leLugar->move(270,280);
    leLugar->setVisible(true);

    lbAdquisicion->move(400,280);
    lbAdquisicion->setVisible(true);

    comboAdquisicion->move(480,275);
    comboAdquisicion->setCurrentIndex(0);
    comboAdquisicion->setVisible(true);

    lbVolumen->setText("Tomo: ");
    lbVolumen->move(590,280);
    lbVolumen->setVisible(true);

    leVolumen->move(670,280);
    leVolumen->setVisible(true);

    lbEstado->move(200,330);
    lbEstado->setVisible(true);

    comboEstado->move(290,325);
    comboEstado->setCurrentIndex(0);
    comboEstado->setVisible(true);

    btnAceptar->move(440,400);
    btnAceptar->setVisible(true);
    btnAceptar->setText("Aceptar");
    btnAceptar->setIcon(QIcon(":/images/aceptar.png"));

    comboAdquisicion->setEditable(false);
    leCota->setReadOnly(false);
    leAutor->setReadOnly(false);
    leTitulo->setReadOnly(false);
    leMateria->setReadOnly(false);
    leEditorial->setReadOnly(false);
    leAnhoPublicacion->setReadOnly(false);
    leLugar->setReadOnly(false);
    leVolumen->setReadOnly(false);
    leEjemplar->setReadOnly(false);

    disconnect(btnAceptar, SIGNAL(clicked()), 0, 0);
    connect(btnAceptar,SIGNAL(clicked()),this,SLOT(aceptar()));

    disconnect(btnCancelar,SIGNAL(clicked()),0,0);
    connect(btnCancelar,SIGNAL(clicked()),this,SLOT(cancelar()));

}
示例#8
0
int main (int argc, char* argv[])
{
	int error,i,j,ronda;
	int fdcliente;
	key_t llave,llaved,llavedx,llavedy;
	struct paketeSC packout;

	signal(SIGINT,terminar);

	//Valores por default
	cant_niveles=10;
	dificultad=5;
	bots=0;

	switch(argc)
	{
		case 1:
			printf("Servidor de NkTron\nERROR: Faltan parametros\n");
			printf("Uso: servidor Cant_Jugadores [Dificultad][Rondas][Bots]\n");
			printf("  Cant_Jugadores=2..6 , Dificultad=1..10 (0=Especial) , ");
			printf("Rondas=1..20 , Bots=1..6\n");
			return 1; 
		break;
		case 5:
			bots=atoi(argv[4]);
			if (bots<0 || bots >MAX_JUGADORES)
			{	printf("Cantidad de bots invalida (0..%d)\n",MAX_JUGADORES);
				return 1;
			}
		case 4:
			cant_niveles=atoi(argv[3]);
			if (cant_niveles<1 || cant_niveles>20)
			{	printf("Cantidad de rondas invalida (1..20)\n");
				return 1;
			}
		case 3:
			dificultad=atoi(argv[2]);
			if (dificultad<0 || dificultad>10)
			{	printf ("Dificultad invalida (0..10) (0=Especial)\n");
				return 1;
			}
		case 2:
			jugadores=atoi(argv[1]);
			if (jugadores<2 || jugadores>MAX_JUGADORES)
			{	printf("Cantidad de jugadores invalida (2..%d)\n",MAX_JUGADORES);
				return 1;
			}
	}
	if (bots>jugadores)
	{	printf("Cantidad de bots invalida, mayor a jugadores totales\n");
		return 1;
	}

	llave=ftok("./cliente.c",33);
	id_mem=shmget(llave,sizeof(int[80][23]),0777 | IPC_CREAT);
	if(id_mem==-1)
	{	printf("No consegui memoria!\n");return 1; }
	shmatriz=(int **)shmat(id_mem,(char *)0,0);
	if(!shmatriz)
	{	printf("No consegui compartir memoria!\n");return 1; }
	
	shmatriz=(int **)matriz;

	llaved=ftok("./cliente.c",32);
	id_memd=shmget(llaved,sizeof(int[MAX_JUGADORES]),0777 | IPC_CREAT);
	if(id_memd==-1)
	{	printf("No consegui memoria!\n");return 1; }
	direcc=(int *)shmat(id_memd,(char *)0,0);
	if(!direcc)
	{	printf("No consegui compartir memoria!\n");return 1; }

        llavedx=ftok("./cliente.c",31);
        id_memdx=shmget(llavedx,sizeof(int[MAX_JUGADORES]),0777 | IPC_CREAT);
        if(id_memdx==-1)
        {       printf("No consegui memoria!\n");return 1; }
        x=(int *)shmat(id_memdx,(char *)0,0);
        if(!x)
        {       printf("No consegui compartir memoria!\n");return 1; }

        llavedy=ftok("./cliente.c",30);
        id_memdy=shmget(llavedy,sizeof(int[MAX_JUGADORES]),0777 | IPC_CREAT);
        if(id_memdy==-1)
        {       printf("No consegui memoria!\n");return 1; }
        y=(int *)shmat(id_memdy,(char *)0,0);
        if(!y)
        {       printf("No consegui compartir memoria!\n");return 1; }



	printf("Servidor de NkTron listo y esperando conexiones...\n");
	printf("Se jugaran %d rondas con nivel de dificultad %d\n",cant_niveles,dificultad);	
	printf("Jugaran %d jugadores, de los cuales %d seran bots\n\n",jugadores,bots);

	for(i=0;i<MAX_JUGADORES;i++)
	{	strcpy(vnombres[i],"NULL");
		puntajes[i]=0;
	}
	fdlisten=escuchar(PUERTO);
	if(fdlisten==-1)
	{	printf ("No se pudo abrir puerto para escuchar\n");
		return -1;;
	}

	for(i=0;i<bots;i++)
	{	//crear proceso de bot
		llave=ftok("./cliente.c",40+i);
		sembot[i]=obtenersem(llave);
		iniciasem(sembot[i],0); //1=verde

		cont_clientes++;
		strcpy(vnombres[i],"<Bot>");
		if ( (j=fork())==0 )
		{	char param[5];
			sprintf(param,"%d",i);
   			char * args[] = { "bot", param , NULL };
			execv("bot",args);			
		}
	}

	while (cont_clientes<jugadores)
	{		
		fdcliente=aceptar(fdlisten);
		if(fdcliente==-1)
		{
			printf ("no se pudo accept()\n");
			return -1;
		}
		cont_clientes++;
		error=pthread_create (&clientes[cont_clientes-1],NULL,atender,(void *)&fdcliente);
		if (error)
			//printf ("no se pudo crear el hilo %ld", (long)clientes[cont_clientes-1]);		
			//printf ("no se pudo crear el hilo %d", clientes[cont_clientes-1]);		
			printf ("no se pudo crear el hilo %d", cont_clientes-1);		
	}

	sleep(2);
	printf ("Comenzando la partida...\n");

	//enviar a todos el pakete I
	for(i=bots;i<jugadores;i++)
	{	packout.cabecera='I';
                packout.cantniv=cant_niveles;
                for(j=0;j<MAX_JUGADORES;j++)
                        strcpy(packout.nombre[j],vnombres[j]);
                packout.nrojugador=i+1;
                enviar (fdclientes[i],(void*)&packout,sizeof(packout));
	}
	sleep(2);

	for(ronda=1;ronda<cant_niveles+1;ronda++)
	{
		//enviar a todos el pakete N
		packout.cabecera='N';
		packout.cantniv=ronda;
 		//establecer posiciones y direcciones iniciales 
		switch (jugadores)
		{
			case 2:
				direcc[0]=2;x[0]=6;y[0]=6;
				direcc[1]=4;x[1]=70;y[1]=18;
				break;
			case 3:
				direcc[0]=2;x[0]=4;y[0]=4;
				direcc[1]=4;x[1]=76;y[1]=4;
				direcc[2]=4;x[2]=72;y[2]=20;
				break;
			case 4:
				direcc[0]=3;x[0]=37;y[0]=4;
				direcc[1]=4;x[1]=76;y[1]=12;
				direcc[2]=1;x[2]=37;y[2]=20;
				direcc[3]=2;x[3]=4;y[3]=12;
				break;
			case 5:
				direcc[0]=2;x[0]=4;y[0]=4;
				direcc[1]=4;x[1]=75;y[1]=4;
				direcc[2]=2;x[2]=4;y[2]=20;
				direcc[3]=4;x[3]=75;y[3]=20;
				direcc[4]=1;x[4]=37;y[4]=16;
				break;
			case 6:
				direcc[0]=2;x[0]=4;y[0]=4;
				direcc[1]=4;x[1]=75;y[1]=4;
				direcc[2]=2;x[2]=4;y[2]=20;
				direcc[3]=4;x[3]=75;y[3]=20;
				direcc[4]=2;x[4]=8;y[4]=12;
				direcc[5]=4;x[5]=71;y[5]=12;
		}
		llenardatos(&packout);
		for(i=bots;i<jugadores;i++)
		{ enviar(fdclientes[i],(void*)&packout,sizeof(packout));  }
		
		printf("Empieza ronda %d...\n",ronda);
		limpiamatriz();
		ganador=0;

		sleep(3);
	
		while(alguienvive())
		{
			for(i=0;i<bots;i++)
				semverde(sembot[i]);			

			if (dificultad==0)
				usleep(300000/ronda);
			else
				usleep(500000/dificultad);

			//cuando se cumple el tiempo
			procesarmovimientos();
			if(!alguienvive())
				break;
			fflush(stdout);			
			packout.cabecera='S';
			llenardatos(&packout);
			
			//for(i=0;i<jugadores;i++)
			//printf("%d: <%d,%d;%d> ",i,x[i],y[i],direcc[i]);
			//printf("\n");

			for(i=bots;i<jugadores;i++)
			{ enviar(fdclientes[i],(void*)&packout,sizeof(packout));  }

		}
		
		packout.cabecera='F';	//Fin de ronda
		packout.ganador=ganador;
		for(i=0;i<jugadores;i++)
			packout.puntajes[i]=puntajes[i];
                for(i=bots;i<jugadores;i++)
                { enviar(fdclientes[i],(void*)&packout,sizeof(packout));  }		
		
		sleep(5);
	}

	printf("FIN DE JUEGO\n");

	for (i=bots;i<jugadores;i++)	
		pthread_join (clientes[i], NULL );
	printf("Eliminando hilos...\n");fflush(stdout);
	terminar();

	return 0;
}
/*
 ============================================================================
 Funcion principal
 ============================================================================
 */
int main(int argc, char *argv[]) {
	stHeaderIPC *unHeaderIPC = NULL, *stHeaderSwitch = NULL;
	stMensajeIPC unMensaje;
	stPCB *unPCB = NULL;
	t_UMCConfig UMCConfig;
	pthread_t p_thread, p_threadCpu;
	char* temp_file = "nucleo.log";
	elEstadoActual.path_conf = argv[1];
	uint32_t pid_desconectado = 0;
	int unCliente = 0, maximoAnterior = 0, unSocket, agregarSock;
	struct sockaddr addressAceptado;

	/*Inicializacion de las colas del planificador*/
	inicializar_pidCounter();
	inicializar_cola_ready();
	listaBlock = list_create();
	consola_crear_lista();

	log_create(temp_file, "NUCLEO", -1, LOG_LEVEL_INFO);

	log_info("Arrancando el Nucleo");

	if (elEstadoActual.path_conf == NULL) {
		log_error("Falta el parametro de configuracion");
		exit(-1);
	}

	/*Carga del archivo de configuracion*/
	if (loadInfo(&elEstadoActual, 0)) {
		log_error("Error al cargar la configuracion");
		exit(-2);
	}
	log_info("Configuracion cargada satisfactoriamente...");

	/*Se lanza el thread para identificar cambios en el archivo de configuracion*/
	pthread_create(&p_thread, NULL, &monitor_configuracion, (void*) &elEstadoActual);

	inicializarThreadsDispositivos(&elEstadoActual);

	/*Inicializacion de listas de socket*/
	FD_ZERO(&(fds_master));
	FD_ZERO(&(read_fds));

	/*Inicializacion de socket de escucha*/
	elEstadoActual.salir = 0;
	elEstadoActual.sockEscuchador = -1;

	/*Iniciando escucha en el socket escuchador de Consola*/
	elEstadoActual.sockEscuchador = escuchar(elEstadoActual.miPuerto);
	FD_SET(elEstadoActual.sockEscuchador, &(fds_master));
	log_debug("Se establecio conexion con el socket de escucha...");

	/*Seteamos el maximo socket*/
	elEstadoActual.fdMax = elEstadoActual.sockEscuchador;

	/*Conexion con el proceso UMC*/
	log_debug("Estableciendo conexion con la UMC...");
	elEstadoActual.sockUmc = conectar(elEstadoActual.ipUmc, elEstadoActual.puertoUmc);

	if (elEstadoActual.sockUmc != -1) {
		//FD_SET(elEstadoActual.sockUmc, &(fds_master));

		unHeaderIPC = nuevoHeaderIPC(ERROR);
		if (!recibirHeaderIPC(elEstadoActual.sockUmc, unHeaderIPC)) {
			log_error("UMC handshake error - No se pudo recibir mensaje de respuesta");
			log_error("No se pudo conectar a la UMC");
			elEstadoActual.salir = 1;
		}
		if (unHeaderIPC->tipo == QUIENSOS) {
			unHeaderIPC = nuevoHeaderIPC(CONNECTNUCLEO);
			if (!enviarHeaderIPC(elEstadoActual.sockUmc, unHeaderIPC)) {
				log_error("UMC handshake error - No se pudo enviar mensaje de conexion");
				log_error("No se pudo conectar a la UMC");
				elEstadoActual.salir = 1;
			}
		}
		liberarHeaderIPC(unHeaderIPC);
		unHeaderIPC = nuevoHeaderIPC(OK);
		if (!recibirHeaderIPC(elEstadoActual.sockUmc, unHeaderIPC)) {
			log_error("UMC handshake error - No se pudo recibir mensaje de confirmacion");
			log_error("No se pudo conectar a la UMC");
			elEstadoActual.salir = 1;
		} else {
			if (recibirConfigUMC(elEstadoActual.sockUmc, &UMCConfig)) {
				log_error("UMC error - No se pudo recibir la configuracion");
				close(unCliente);
				exit(-2);
			}
			agregar_master(elEstadoActual.sockUmc,maximoAnterior);
			log_info("Paginas por proceso:[%d]", UMCConfig.paginasXProceso);
			log_info("Tamanio de pagina:[%d]", UMCConfig.tamanioPagina);

			elEstadoActual.tamanio_paginas = UMCConfig.tamanioPagina;
		}
		liberarHeaderIPC(unHeaderIPC);
	} else {
		log_error("No se pudo conectar a la UMC");
		elEstadoActual.salir = 1;
	}

	/*Ciclo Principal del Nucleo*/
	log_info(".............................................................................");
	log_info("..............................Esperando Conexion.............................\n\n");
	fflush(stdout);

	while (elEstadoActual.salir == 0) {
		read_fds = fds_master;

		if (seleccionar(elEstadoActual.fdMax, &read_fds, 0) == -1) {
			log_error("Error Preparando el Select");
			break;
		}

		for (unSocket = 0; unSocket <= elEstadoActual.fdMax; unSocket++) {

			if (FD_ISSET(unSocket, &read_fds)) {
				/*Nueva conexion*/
				if (unSocket == elEstadoActual.sockEscuchador) {
					unCliente = aceptar(elEstadoActual.sockEscuchador, &addressAceptado);
					unHeaderIPC = nuevoHeaderIPC(QUIENSOS);
					if (!enviarHeaderIPC(unCliente, unHeaderIPC)) {
						log_error("Cliente Handshake error - No se puede enviar el mensaje QUIENSOS");
						liberarHeaderIPC(unHeaderIPC);
						close(unCliente);
						break;/*Sale del for*/
					}
					liberarHeaderIPC(unHeaderIPC);
					unHeaderIPC = nuevoHeaderIPC(ERROR);
					if (!recibirHeaderIPC(unCliente, unHeaderIPC)) {
						log_error("Cliente Handshake error - No se puede recibir el mensaje");
						liberarHeaderIPC(unHeaderIPC);
						close(unCliente);
						break;/*Sale del for*/
					}

					/*Identifico quien se conecto y procedo*/
					switch (unHeaderIPC->tipo) {
					case CONNECTCONSOLA:
						stHeaderSwitch = nuevoHeaderIPC(OK);
						if (!enviarHeaderIPC(unCliente, stHeaderSwitch)) {
							log_error("Handshake Consola - No se pudo enviar el OK");
							liberarHeaderIPC(stHeaderSwitch);
							close(unCliente);
							break;/*Sale del switch*/
						}
						liberarHeaderIPC(stHeaderSwitch);
						log_info("Nueva consola conectada");
						agregarSock = 1;
						/*Agrego el socket conectado a la lista Master*/
						if (agregarSock == 1) {
							agregar_master(unCliente, maximoAnterior);
							agregarSock = 0;
						}
						/* Recibo Programa */
						if (!recibirMensajeIPC(unCliente, &unMensaje)) {
							log_error("No se puede recibir el programa a procesar");
							break;/*Sale del switch*/
						} else {
							if (unMensaje.header.tipo == SENDANSISOP) {
								/*metadata_desde_literal hace un malloc adentro*/
								int cantidadDePaginasCodigo = calcular_cantidad_paginas(unMensaje.header.largo, UMCConfig.tamanioPagina);
								/***Creacion del PCB***/
								unPCB = crear_pcb(unCliente, cantidadDePaginasCodigo, elEstadoActual.stackSize, &unMensaje);
								if (unPCB == NULL) {
									log_error("Error al crear el PCB... se cierra la consola\n");
									quitar_master(unCliente, maximoAnterior);
									close(unCliente);
									break;/*Sale del switch*/
								}
								if (inicializar_programa(unPCB, (char *)unMensaje.contenido, elEstadoActual.sockUmc) == EXIT_FAILURE) {
									log_error("No se pudo inicializar el programa");
									quitar_master(unCliente, maximoAnterior);
									close(unCliente);
									break;/*Sale del switch*/
								}

								/* Inicializada la consola la agrego a consolas activas */
								agregar_consola(unCliente, unPCB->pid);

								/*Cuando se usa mensajeIPC liberar el contenido*/
								free(unMensaje.contenido);
								ready_productor(unPCB);
								log_info("PCB [PID - %d] NEW a READY\n", unPCB->pid);
								fflush(stdout);
							}

						}
						break;

					case CONNECTCPU:
						stHeaderSwitch = nuevoHeaderIPC(OK);
						if (!enviarHeaderIPC(unCliente, stHeaderSwitch)) {
							liberarHeaderIPC(stHeaderSwitch);
							log_error("CPU error - No se pudo enviar OK");
							close(unCliente);
							break;/*Sale del switch*/
						}
						liberarHeaderIPC(stHeaderSwitch);
						if (pthread_create(&p_threadCpu, NULL, (void*) consumidor_cpu, (void*) &unCliente) != 0) {
							log_error("No se pudo lanzar el hilo correspondiente al cpu conectado");
							close(unCliente);
							break;/*Sale del switch*/
						}
						log_info("Se lanza hilo de atencion a CPU conectado");
						fflush(stdout);
						break;
					default:
						break;
					}
					if (unHeaderIPC != NULL) {
						liberarHeaderIPC(unHeaderIPC);
					}
				} else {
					/*Conexion existente*/
					log_debug("Recibi otro evento de un cliente ya conectado");
					if (!recibirMensajeIPC(unSocket, &unMensaje)) {
						log_info("Desconexion detectada");

						// Desconexion de una consola
   						pid_desconectado = borrar_consola(unSocket);

						// Desconexion de la UMC
						if (unSocket == elEstadoActual.sockUmc) {
							log_info("Se perdio conexion con la UMC...");
							elEstadoActual.salir = 1;
							cerrarSockets(&elEstadoActual);
						}

						if (unSocket == elEstadoActual.sockEscuchador) {
							log_debug("Se perdio conexion...");
						}
						/*Saco el socket de la lista Master*/
						quitar_master(unSocket, maximoAnterior);
						fflush(stdout);
					}
				}

			}

		}
	}
	destruir_planificador();
	destruir_lista_dispositivos(&elEstadoActual);
	consola_destruir_lista(&elEstadoActual);
	cerrarSockets(&elEstadoActual);
	finalizarSistema(&unMensaje, unSocket, &elEstadoActual);
	log_info("Fin del programa");
	return 0;
}