示例#1
0
/*
* Funcion insertarTicket
*    Parametros de entrada: Una estructura de tipo HistorialTicket que contiene 
*    Servidores, ademas de una cadena de caracteres con el nombre del servidor, 
*    un entero para su direccion, otra cadena de caracteres para su clave del MD5 
*    y otro más para su tiempo de respuesta.
*    Parametro de salida: Una estructura de tipo HistorialTicket.
*    Recibe el historial de Tickets de la lista e inserta un nuevo Servidor.
*/
HistorialTicket insertarTicket(HistorialTicket historialTickets, char* nombreBomba, char* direccionIP, char* claveMD5, int tiempoValidacion)
{ 
     HistorialTicket nuevoTicket = NULL;
     char* auxNombreBomba = (char*)malloc(sizeof(char)*100);
     if(auxNombreBomba == NULL){
          terminar("Error de asignacion de memoria: " );
     }
     char* auxDireccionIP = (char*)malloc(sizeof(char)*100);
     if(auxDireccionIP == NULL){
          terminar("Error de asignacion de memoria: " );
     }
     char* auxClaveMD5 = (char*)malloc(sizeof(char)*100);
     if(auxClaveMD5 == NULL){
          terminar("Error de asignacion de memoria: " );
     } 
     int auxTiempoValidacion = tiempoValidacion;
     strcpy(auxNombreBomba,nombreBomba);
     strcpy(auxDireccionIP,direccionIP);
     strcpy(auxClaveMD5,claveMD5);
     nuevoTicket =(TICKET*)malloc(sizeof(TICKET));
     if(nuevoTicket == NULL){
          terminar("Error de asignacion de memoria: " );
     }
     nuevoTicket->nombreBomba = auxNombreBomba;   
     nuevoTicket->direccionIP = auxDireccionIP;
     nuevoTicket->claveMD5 = auxClaveMD5;
     nuevoTicket->tiempoValidacion = auxTiempoValidacion;
     nuevoTicket-> siguiente = historialTickets; 
     
     historialTickets = nuevoTicket;
     
     return historialTickets;       
}
示例#2
0
/*
 * Funcion ordenarHistorial
 */
HistorialTicket ordenarHistorial(HistorialTicket historialTickets){
   
   HistorialTicket copiaHistorialTickets = (TICKET*)malloc(sizeof(TICKET));
   if(copiaHistorialTickets == NULL){
      terminar("Error de asignacion de memoria: " );
   }
   copiaHistorialTickets = historialTickets;
   HistorialTicket cabeza = historialTickets, aux1 = historialTickets, aux2;
   int indiceHistorial, longitud = length(copiaHistorialTickets);
   
   for(indiceHistorial = 1; indiceHistorial <= longitud; indiceHistorial++){
      
      while(aux1->siguiente != NULL){
         aux2 = aux1->siguiente;
         if(aux1->tiempoValidacion > aux2->tiempoValidacion){
            aux1->siguiente = aux2->siguiente;
            aux2->siguiente = aux1;
            cabeza = aux2;
         }else{
            aux1 = aux2;
         }
      }
      aux1 = historialTickets;
   }
   
   return cabeza;
}
示例#3
0
vel_mot mov_curva_circ::actualizar_imp(util::micros_t tiempo_pasado)
{
	if(tiempo_pasado >= tiempo_restante_){
		terminar();
		return {1, 1};
	}else {
		tiempo_restante_ -= tiempo_pasado;
		return {vel_izq_, vel_der_};
	}
}
void Manejador::handleSigInt()
{

    sigIntNotifier->setEnabled(false);
    char tmp;
    ::read(sigIntFd[1], &tmp, sizeof(tmp));
    emit terminar();
    sigIntNotifier->setEnabled(true);


}
示例#5
0
//----------------------------------------------------------------------------
// Erro da aplicação com terminação do programa
//
void FatalErrorUser( const TCHAR *fmtStr, ... ) {
    va_list args;

    va_start( args, fmtStr );

    DisplayErrorApp(fmtStr, args );

    va_end( args );

    terminar();

    exit( 1 );
} // FatalErrorSystem
示例#6
0
//----------------------------------------------------------------------------
// Erro de sistema com terminação do programa
//
void FatalErrorSystem( const TCHAR *fmtStr, ... ) {
    va_list args;

    int error = GetLastError();

    va_start( args, fmtStr );

    DisplayError( error, fmtStr, args );

    va_end( args );

    terminar();

    exit( 1 );
} // ErrorSystem
示例#7
0
void GL_Contexto::correr()
{

    if(iniciar())
    {
        cargar();
    DeltaTiempo=0;
    while(!glfwWindowShouldClose(_ventana))
    {
        _frame_pasado = glfwGetTime();
        glfwPollEvents();
        actualizar();
        renderizar();
        DeltaTiempo=glfwGetTime()-_frame_pasado;
    }
    terminar();
    glfwTerminate();
    }
}
示例#8
0
/*  
* Funcion buscarTicket
*    Parametros de entrada: Una estructura de tipo HistorialTicket, ademas de una 
*    cadena de caracteres con el nombre del Servidor.
*    Parametro de salida: el Servidor buscado si se encuentra en la lista o
*    NULL si no se encuentra.
*    Busca en la lista y compara el nombre de cada Servidor, hasta encontrarlo
*    o se recorra toda  la lista.
*/
HistorialTicket buscarTicket(HistorialTicket historialTickets, char* direccionIP){
   
   HistorialTicket ticketBuscado = NULL;
   HistorialTicket copiaHistorialTickets;
   copiaHistorialTickets=(TICKET*)malloc(sizeof(TICKET));
   if(copiaHistorialTickets == NULL){
      terminar("Error de asignacion de memoria: " );
   }
   copiaHistorialTickets = historialTickets;
   
   while(copiaHistorialTickets != NULL){
      if (strcmp(copiaHistorialTickets->direccionIP,direccionIP) != 0){
          copiaHistorialTickets = copiaHistorialTickets->siguiente;
      } else {
         ticketBuscado = copiaHistorialTickets;
         return ticketBuscado;
      } 
   }
   return ticketBuscado;
}
示例#9
0
/* 
* Funcion insertarTiempoRespuesta
*    Parametros de entrada: Una estructura de tipo HistorialTicket, ademas de 
*    una cadena de caracteres con el nombre y un entero con su tiempo de
*    respuesta.
*    Parametro de salida: Una estructura de tipo HistorialTicket.
*    Busca en la lista de Servidores un servidor en específico y luego inserta
*    su tiempo de respuesta.
*/
HistorialTicket insertarTiempoValidacion(HistorialTicket historialTickets, char* nombreBomba, 
     int tiempoValidacion)
{
    HistorialTicket copiaHistorialTickets;
    copiaHistorialTickets=(TICKET*)malloc(sizeof(TICKET));
    if(copiaHistorialTickets == NULL){
         terminar("Error de asignacion de memoria: " );
    }
    copiaHistorialTickets = historialTickets;
    while(historialTickets != NULL && strcmp(historialTickets->nombreBomba,nombreBomba) != 0){
        historialTickets=historialTickets->siguiente;
    }
    if (historialTickets != NULL){ 
        historialTickets->tiempoValidacion = tiempoValidacion;
    }else{
        printf("El nombre de la Bomba NO se encuentra en el historial de tickets válidos.\n");
    }
    
    return copiaHistorialTickets;
}
示例#10
0
int main() {
    int estado = 1;    
    unsigned int discos = 0; 
    Pilha * A = criar();
    Pilha * B = criar();
    Pilha * C = criar();
    while(estado != 1000){
        switch(estado){
            case 1 :
                system("cls");
                estado = inicializar(A, &discos);     
                break;
            case 2 :
                system("cls");
                mostrarPinos(A,B,C); 
            case 3 :
                mostrarPossibilidades(A,B,C);
            case 4 :                
                estado = movimentar(A, B, C);                
                break;            
            case 5 :
                if(tamanho(C) == discos){
                    estado = 6;
                }
                else{
                    estado = 2;   
                }
                break;  
            case 6 :
                terminar(A, B, C);
                estado = 1000;
                break;            
        }
        
    }
    printf("Jogo finalizado!!");
}
示例#11
0
/* <objetivo> → <programa> FDT #terminar */
void objetivo(void) {	
	programa();	
	match(FDT);
	terminar();
}
示例#12
0
void objetivo(void) {
	// <objetivo> -> <programa> FDT
	programa();
	match(FDT);
	terminar(); // #terminar
}
示例#13
0
int main(int argc, char** argv) {
    inicializar();
    correr();
    terminar();
    return (EXIT_SUCCESS);
}
示例#14
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;
}