Ejemplo n.º 1
0
void TMap::deleteArea( int id )
{
    if( areas.contains( id ) )
    {
        TArea * pA = areas[id];
        QList<int> rl;
        for( int i=0; i< pA->rooms.size(); i++ )
        {
            rl.push_back( pA->rooms[i] );
        }
        for( int i=0; i<rl.size(); i++ )
        {
            deleteRoom( rl[i] );
        }
        areas.remove( id );
        areaNamesMap.remove( id );
        mMapGraphNeedsUpdate = true;
    }
}
Ejemplo n.º 2
0
/**
 * Ejecuta en el servidor la cadena recibida
 */
int execParams(user* conn, int connTam, char* str, int socketID, int sock, sqlite3* db, room* rooms, int dim){
    PDEBUG("INFO: Analizando lista de parámetros\n");
    char saux[10][DIM];
    bzero(saux, 10 * DIM);
    int error = 0;
    
    // tienes permisos para ejecutar comandos en el servidor???
    PDEBUG("INFO: Comprobando permisos\n");
    int aux = searchConn(conn, connTam, socketID);
    // almacenamos en la base de datos
    sms auxMsj;
    strcpy(auxMsj.name, (*(conn + aux)).name);
    strcpy(auxMsj.text, str);
    db_addLog(auxMsj, &db);
    if((*(conn + aux)).rol != ADMIN){

        PDEBUG("INFO: Usuario sin permisos\n");
        sms auxMsj;
        auxMsj.flag = MSJ;
        strcpy(auxMsj.name, SERVER);
        strcpy(auxMsj.text, "Usuario sin permisos");
        SSL_write((*(conn + aux)).ssl, &auxMsj, sizeof(sms));
        PDEBUG("INFO: Mensaje de usuario no válido enviado al emisor\n");
        return -1;
        
    }

    PDEBUG("INFO: Usuario autorizado\n");
    str = trim(str); // eliminamos os espacios en blanco

    if(strcmp(str, "-x") == 0){ // comando de salida

        PDEBUG("EXIT: Cerrando el servidor\n");
        shutdown(sock, SHUT_RDWR); // cerramos el socket
        sms auxMsj;
        auxMsj.flag = SERV_EXIT;
        strcpy(auxMsj.name, SERVER);
        broadcast(conn, &connTam, auxMsj, socketID, db);
        closeAll(conn, &connTam); // cerramos todas las conexiones
        PDEBUG("EXIT: Cerrando la conexión con la base de datos\n");
        db_close(&db);
        PDEBUG("EXIT: Liberando espacio\n");
        free(conn);
        PDEBUG("EXIT: Cerrando el proceso\n");
        exit(0);

    }else if(sscanf(str, "--add-user %s %s %s", saux[0], saux[1], saux[2]) == 3){ // añadiendo un usuario
        //saux[0] es el nombre
        //saux[1] es el password
        //saux[2] es el rol
        PDEBUG("INFO: Añadiendo usuario 3 param\n");
        int rol = 0;

        if(strcmp(saux[2], "admin") == 0){
            rol = ADMIN;
        }else if(strcmp(saux[2], "user") == 0){
            rol = USER;
        }else{
            PDEBUG("INFO: tercer argumento no válido");

            sms auxMsj;
            auxMsj.flag = MSJ;
            strcpy(auxMsj.name, SERVER);
            strcpy(auxMsj.text, "Rol no reconocido.");
            SSL_write((*(conn + aux)).ssl, &auxMsj, sizeof(sms));
            return 0;
        }
        error = db_addUser(saux[0], saux[1], rol, &db);

        sms auxMsj;
        auxMsj.flag = MSJ;
        strcpy(auxMsj.name, SERVER);
        if(error == 0){
            strcpy(auxMsj.text, "Usuario creado");
        }else if(error == 1){
            strcpy(auxMsj.text, "Nombre de usuario en uso");
        }else{
            strcpy(auxMsj.text, "Error al crear el usuario");
        }
        SSL_write((*(conn + aux)).ssl, &auxMsj, sizeof(sms));

    }else if(sscanf(str, "--add-user %s %s", saux[0], saux[1]) == 2){ // añadiendo un usuario
        // se usará el rol por defecto
        //saux[0] es el nombre
        //saux[1] es el password
        PDEBUG("INFO: Añadiendo usuario 2 param\n");
        error = db_addUser(saux[0], saux[1], USER, &db);

        sms auxMsj;
        auxMsj.flag = MSJ;
        strcpy(auxMsj.name, SERVER);
        if(error == 0){
            strcpy(auxMsj.text, "Usuario creado");
        }else if(error == 1){
            strcpy(auxMsj.text, "Nombre de usuario en uso");
        }else{
            strcpy(auxMsj.text, "Error al crear el usuario");
        }
        SSL_write((*(conn + aux)).ssl, &auxMsj, sizeof(sms));

    }else if(sscanf(str, "--delete-user %s", saux[0]) == 1){ // borrando un usuario
        //saux[0] es el nombre
        PDEBUG("INFO: Borrando usuario\n");
        int num = 0;

        num = db_deleteUser(saux[0], &db);

        sms auxMsj;
        auxMsj.flag = MSJ;
        strcpy(auxMsj.name, SERVER);
        if(num > 0){
            PDEBUG("INFO: Usuario borrado\n");
            strcpy(auxMsj.text, "Usuario borrado");
        }else{
            PDEBUG("INFO: Usuario no encontrado\n");
            strcpy(auxMsj.text, "Usuario no encontrado");
        }
        SSL_write((*(conn + aux)).ssl, &auxMsj, sizeof(sms));

    }else if(strcmp(str, "--list-user") == 0){ // listando usuarios
        //saux[0] es el nombre
        PDEBUG("INFO: listando usuarios\n");
        int num = 0;

        num = db_listUser(socketID, &db);

    }else if(sscanf(str, "--log %s %s", saux[0], saux[1]) == 2){ // listando usuarios
        //saux[0] es la fecha de inicio
        //saux[1] es la fecha de finalización
        PDEBUG("INFO: listando usuarios\n");
        int num = 0;
        struct tm tm1, tm2;
        long t1, t2;

        if (strptime(saux[0], "%d/%m/%Y", &tm1) == 0 || strptime(saux[1], "%d/%m/%Y", &tm2) == 0){
            PDEBUG("INFO: Formato de fecha no válido\n");
            sms auxMsj;
            auxMsj.flag = MSJ;
            strcpy(auxMsj.name, SERVER);
            strcpy(auxMsj.text, "Formato de fecha no válido -> dd/mm/YYYY");
            SSL_write((*(conn + aux)).ssl, &auxMsj, sizeof(sms));
            return -1;
        }

        t1 = (long)mktime(&tm1);
        t2 = (long)mktime(&tm2);

        sprintf(saux[0], " WHERE time > %ld AND time < %ld", t1, t2);

        num = db_getLogPar(socketID, &db, saux[0]);

    }else if(strcmp(str, "--log") == 0){ // listando usuarios
        PDEBUG("INFO: listando usuarios\n");
        int num = 0;

        num = db_getLog(socketID, &db);

    }else if(sscanf(str, "--add-room %s", saux[0]) == 1){ // creacion de un cana
        // saux[0] es el nombre del canal
        PDEBUG("INFO: añadiendo canales\n");

        sms auxMsj;
        auxMsj.flag = MSJ;
        strcpy(auxMsj.name, SERVER);

        if(addRoom(saux[0], rooms, dim) == -1){
            strcpy(auxMsj.text, "Error al crear el canal, mire el log para más información");
        }else{
            strcpy(auxMsj.text, "Canal creado");
        }

        SSL_write((*(conn + aux)).ssl, &auxMsj, sizeof(sms));

    }else if(sscanf(str, "--delete-room %s", saux[0]) == 1){ // creacion de un cana
        // saux[0] es el nombre del canal
        PDEBUG("INFO: borrando canal\n");

        sms auxMsj;
        auxMsj.flag = MSJ;
        strcpy(auxMsj.name, SERVER);

        PDEBUG("INFO: Moviendo usuarios\n");
        strcpy(saux[1], "general");
        moveAllTo(conn, &connTam, saux[0], rooms, dim, db, saux[1]);

        if(deleteRoom(saux[0], rooms, dim) == -1){
            strcpy(auxMsj.text, "Error al borrar el canal, mire el log para más información");
        }else{
            strcpy(auxMsj.text, "Canal borrado");
        }

        SSL_write((*(conn + aux)).ssl, &auxMsj, sizeof(sms));

    }else if(sscanf(str, "--kick %s", saux[0]) == 1){ // expulsión de un usuario
        // saux[0] es el nombre del usuario
        PDEBUG("INFO: expulsión de un usuario\n");

        //PDEBUG("INFO: Moviendo usuarios\n");
        //strcpy(saux[1], "general");

        sms auxMsj;
        auxMsj.flag = SERV_EXIT;
        strcpy(auxMsj.name, SERVER);
        strcpy(auxMsj.text, "Usuario expulsado.");
        int aux = searchName(conn, connTam, saux[0]);
        SSL_write((*(conn+aux)).ssl, &auxMsj, sizeof(sms));
        //moveAllTo(conn, &connTam, saux[0], rooms, dim, db, saux[1]);

        if(deleteRoom(saux[0], rooms, dim) == -1){
            strcpy(auxMsj.text, "Error al borrar el canal, mire el log para más información");
        }else{
            strcpy(auxMsj.text, "Canal borrado");
        }

        SSL_write((*(conn + aux)).ssl, &auxMsj, sizeof(sms));

    }else if(sscanf(str, "--list-room") == 0){ // listando de canales
        sendRoomList((*(conn + aux)).ssl, rooms, dim);
    }else{ // error, comando no válido

        PDEBUG("INFO: Comando no válido\n");
        sms auxMsj;
        auxMsj.flag = MSJ;
        strcpy(auxMsj.name, SERVER);
        strcpy(auxMsj.text, "Comando no válido");
        SSL_write((*(conn + aux)).ssl, &auxMsj, sizeof(sms));
        PDEBUG("INFO: Mensaje de comando no válido enviado al emisor\n");
        return -1;
        
    }
    return 0;
}
Ejemplo n.º 3
0
void Grid::buildRooms()
{


    std::random_device rd;
    std::mt19937_64 gen(rd());
    std::uniform_int_distribution<int> sizeDistrib(m_roomMin,m_roomMax);
    std::uniform_int_distribution<int> widthDistrib(2,m_width-2);
    std::uniform_int_distribution<int> heightDistrib(2,m_height-2);
    for(int i=0;i<m_roomAttempts;i++)
    {

        printGrid();
       int discard=false;
       while(!discard)
       {
            int origY=heightDistrib(gen);
            int origX=widthDistrib(gen);
            int sizeX=sizeDistrib(gen);

            int sizeY=sizeDistrib(gen);
            std::cout<<"Y="<<sizeY<<"\n";
           if((m_grid[origY-1][origX]->getWall()==false)||(m_grid[origY][origX-1]->getWall()==false)||(m_grid[origY-1][origX-1]->getWall()==false))
           {
               discard=true;
               break;
           }

           for(int y=origY;(y<=(origY+sizeY));y++)
           {

                if(y>=m_height-1){break;}

               for(int x=origX;(x<=(origX+sizeX));x++)
               {

                    if(x>=m_width-1){break;}

                    if((m_grid[y+1][x]->getWall()==false)\
                     ||(m_grid[y][x+1]->getWall()==false)\
                     ||(m_grid[y+1][x+1]->getWall()==false)\
                     ||(m_grid[origY-1][x]->getWall()==false)\
                     ||(m_grid[y][origX-1]->getWall()==false))
                    {
                            deleteRoom(origY,y,origX,x);
                            discard=true;
                            break;
                    }

                    else
                    {
                        m_grid[y][x]->setWall(false);
                    }
               }

           }
           discard=true;

       }
    }
}
Ejemplo n.º 4
0
Archivo: p1_main.c Proyecto: syzhou/p1
int main() {
	struct Ordered_container* people;
	struct Ordered_container* rooms;
	people = OC_create_container((OC_comp_fp_t)comparePeople);
	rooms = OC_create_container((OC_comp_fp_t)compareRooms);
	while (1) {
		char cmd1;
		char cmd2;
		printf("\nEnter command: ");
		scanf(" %c", &cmd1);
		scanf("%c", &cmd2);
		switch (cmd1) {
		case 'p':
			switch (cmd2) {
			case 'i':
				printIndividual(people);
				break;
			case 'r':
				printRoom(rooms);
				break;
			case 'm':
				printMeeting(rooms);
				break;
			case 's':
				printSchedule(rooms);
				break;
			case 'g':
				printGroup(people);
				break;
			default:
				printErrUnrecCmd();
				break;
			}
			break;
		case 'a':
			switch (cmd2) {
			case 'i':
				addIndividual(people);
				break;
			case 'r':
				addRoom(rooms);
				break;
			case 'm':
				addMeeting(rooms);
				break;
			case 'p':
				addParticipant(rooms, people);
				break;
			default:
				printErrUnrecCmd();
				break;
			}
			break;
		case 'r':
			switch (cmd2) {
			case 'm':
				rescheduleMeeting(rooms);
				break;
			default:
				printErrUnrecCmd();
				break;
			}
			break;
		case 'd':
			switch (cmd2) {
			case 'i':
				deleteIndividual(people, rooms);
				break;
			case 'r':
				deleteRoom(rooms);
				break;
			case 'm':
				deleteMeeting(rooms);
				break;
			case 'p':
				deleteParticipant(rooms, people);
				break;
			case 's':
				deleteSchedule(rooms);
				break;
			case 'g':
				deleteGroup(rooms, people);
				break;
			case 'a':
				deleteAll(rooms, people);
				break;
			default:
				printErrUnrecCmd();
				break;
			}
			break;
		case 's':
			break;
		case 'l':
			break;
		case 'q':
			switch (cmd2) {
			case 'q' :
				printf("All meetings deleted\n");
				printf("All rooms deleted\n");
				printf("All persons deleted\n");
				printf("Done\n");
				return 0;
				break;
			default:
				printErrUnrecCmd();
				break;
			}
			break;
		default:
			printErrUnrecCmd();
			break;
		}
	}
	return 0;
}