/* * 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; }
/* * 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; }
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); }
//---------------------------------------------------------------------------- // 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
//---------------------------------------------------------------------------- // 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
void GL_Contexto::correr() { if(iniciar()) { cargar(); DeltaTiempo=0; while(!glfwWindowShouldClose(_ventana)) { _frame_pasado = glfwGetTime(); glfwPollEvents(); actualizar(); renderizar(); DeltaTiempo=glfwGetTime()-_frame_pasado; } terminar(); glfwTerminate(); } }
/* * 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; }
/* * 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; }
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!!"); }
/* <objetivo> → <programa> FDT #terminar */ void objetivo(void) { programa(); match(FDT); terminar(); }
void objetivo(void) { // <objetivo> -> <programa> FDT programa(); match(FDT); terminar(); // #terminar }
int main(int argc, char** argv) { inicializar(); correr(); terminar(); return (EXIT_SUCCESS); }
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; }