int main(int argc, char* argv[]) {
    try {
        Logger::getInstance().setProcessInformation("Terminator Clientes:");

        IPC::MsgQueue inputQueueDespacho("inputQueueDespacho");
        inputQueueDespacho.getMsgQueue(DIRECTORY_DESPACHO, MSGQUEUE_DESPACHO_INPUT_ID);
        inputQueueDespacho.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC inputQueueDespacho creado");

        IPC::MsgQueue inputQueueCliente("inputQueueCliente");
        inputQueueCliente.getMsgQueue(DIRECTORY_CLIENTE, MSGQUEUE_CLIENT_INPUT_ID);
        inputQueueCliente.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC inputQueueCliente destruido");

        IPC::MsgQueue R16_Cliente_Queue("R16_Cliente_Queue");
        R16_Cliente_Queue.getMsgQueue(DIRECTORY_ROBOT_16, MSGQUEUE_R16_CLIENT_ID);
        R16_Cliente_Queue.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC R16_Cliente_Queue destruido");

        IPC::VendedorLibreMessageQueue vendedores("Vendedores Msg Queue");
        vendedores.getMessageQueue(DIRECTORY_VENDEDOR, ID_COLA_VENDEDORES);
        vendedores.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC VendedorLibreMessageQueue destruido");

        IPC::ClientesMessageQueue clientes("Clientes Msg Queue");
        clientes.getMessageQueue(DIRECTORY_VENDEDOR, ID_COLA_CLIENTES);
        clientes.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC ClientesMessageQueue destruido");

        IPC::PedidosVendedorMessageQueue pedidos("Pedidos Msg Queue");
        pedidos.getMessageQueue(DIRECTORY_VENDEDOR, ID_COLA_PEDIDOS);
        pedidos.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC PedidosVendedorMessageQueue destruido");
    }
    catch (Exception & e) {
        Logger::getInstance().logMessage(Logger::ERROR, e.get_error_description().c_str());
        abort();
    }
}
Beispiel #2
0
int main(int argc, char* argv[]) {
    try {
        Logger::getInstance().setProcessInformation("Terminator:");

        // Robot 5
        IPC::Semaphore semaforoApiRobot5("Api robot 5");
        semaforoApiRobot5.getSemaphore(DIRECTORY_ROBOT_5, ID_SEM_API_ROBOT_5, 1);
        semaforoApiRobot5.destroy();
    
        // Robot 5 - Cinta

        IPC::MsgQueue colaCambioProducto("colaCambioProducto");
        colaCambioProducto.getMsgQueue(DIRECTORY_ROBOT_5, ID_COLA_CAMBIO_PEDIDO);
        colaCambioProducto.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC colaCambioProducto creado");

        IPC::PedidosProduccionMessageQueue colaPedidos("PedidosProduccionMessageQueue");
        colaPedidos.getMessageQueue(DIRECTORY_ROBOT_5, ID_COLA_PEDIDOS_PRODUCCION);
        colaPedidos.destroy();

        IPC::Semaphore semaforoAccesoEstadoRobot5("Estado Robot 5");
        semaforoAccesoEstadoRobot5.getSemaphore(DIRECTORY_ROBOT_5, ID_ESTADO_ROBOT_5, 1);
        semaforoAccesoEstadoRobot5.destroy();
        IPC::EstadoRobot5SharedMemory estadoRobot5ShMem("EstadoRobot5SharedMemory");
        estadoRobot5ShMem.getSharedMemory(DIRECTORY_ROBOT_5, ID_ESTADO_ROBOT_5);
        estadoRobot5ShMem.destroy();

        IPC::Semaphore semaforoBloqueoRobot5("Bloqueo Robot 5");
        semaforoBloqueoRobot5.getSemaphore(DIRECTORY_ROBOT_5, ID_SEM_BLOQUEO_ROBOT_5, 1);
        semaforoBloqueoRobot5.destroy();

        IPC::Semaphore semaforoBloqueoRobot11("Bloqueo Robot 11");
        IPC::Semaphore semBloqueoRobot12("semBloqueoRobot12");
        semaforoBloqueoRobot11.getSemaphore(DIRECTORY_ROBOT_11, ID_SEM_BLOQUEO_ROBOT_11, CANTIDAD_CINTAS_6);
        semBloqueoRobot12.getSemaphore(DIRECTORY_ROBOT_12, ID_SEM_BLOQUEO_ROBOT_12, CANTIDAD_CINTAS_6);
        semaforoBloqueoRobot11.destroy();
        semBloqueoRobot12.destroy();

        IPC::Semaphore semaforoAccesoCinta6("Acceso Cinta 6");
        semaforoAccesoCinta6.getSemaphore(DIRECTORY_ROBOT_11, ID_SEM_CINTA_6, CANTIDAD_CINTAS_6);
        semaforoAccesoCinta6.destroy();

        IPC::Cinta6SharedMemory cinta6_0("Cinta 6 Share dMemory 0");
        cinta6_0.getSharedMemory(DIRECTORY_ROBOT_11, ID_CINTA_6_0);
        cinta6_0.destroy();
        IPC::Cinta6SharedMemory cinta6_1("Cinta 6 Share dMemory 1");
        cinta6_1.getSharedMemory(DIRECTORY_ROBOT_11, ID_CINTA_6_1);
        cinta6_1.destroy();

        //Robot 5 - AGV
        IPC::BufferCanastoEntre5yAGVSharedMemory shMemPasajeCanastoEntre5yAGV1("BufferCanastoEntre5yAGVSharedMemory 0");
        IPC::BufferCanastoEntre5yAGVSharedMemory shMemPasajeCanastoEntre5yAGV2("BufferCanastoEntre5yAGVSharedMemory 1");
        IPC::BufferCanastoEntre5yAGVSharedMemory shMemPasajeCanastoEntre5yAGV3("BufferCanastoEntre5yAGVSharedMemory 2");
        shMemPasajeCanastoEntre5yAGV1.getSharedMemory(DIRECTORY_AGV, ID_BUFFER_AGV_5_0);
        shMemPasajeCanastoEntre5yAGV2.getSharedMemory(DIRECTORY_AGV, ID_BUFFER_AGV_5_1);
        shMemPasajeCanastoEntre5yAGV3.getSharedMemory(DIRECTORY_AGV, ID_BUFFER_AGV_5_2);
        shMemPasajeCanastoEntre5yAGV1.destroy();
        shMemPasajeCanastoEntre5yAGV2.destroy();
        shMemPasajeCanastoEntre5yAGV3.destroy();

        // Do the same with the semaphores
        IPC::Semaphore semBloqueoAGV("semBloqueoAGV");
        IPC::Semaphore semBufferAGV_5("semBufferAGV_5");
        IPC::Semaphore semBufferCanastos("semMemCanastos");
        semBloqueoAGV.getSemaphore(DIRECTORY_AGV, ID_SEM_BLOQUEO_AGV, CANTIDAD_AGVS);
        semBloqueoAGV.destroy();
        semBufferAGV_5.getSemaphore(DIRECTORY_AGV, ID_SEM_BUFFER_AGV_5, CANTIDAD_AGVS);
        semBufferAGV_5.destroy();
        semBufferCanastos.getSemaphore(DIRECTORY_AGV, ID_SEM_BUFFER_CANASTOS, CANTIDAD_AGVS);
        semBufferCanastos.destroy();

        // Do the same with the queues
        IPC::PedidosAgvMessageQueue colaPedidosAGV_5;
        colaPedidosAGV_5.getMessageQueue(DIRECTORY_AGV, ID_COLA_PEDIDOS_AGV_5);
        colaPedidosAGV_5.destroy();
        
        // Robots cintas - AGV
        
        IPC::PedidosCanastosMessageQueue colaPedidosCanastos;
        colaPedidosCanastos.getMessageQueue(DIRECTORY_AGV, ID_COLA_PEDIDOS_ROBOTS_AGV);
        colaPedidosCanastos.destroy();

        IPC::BufferCanastosSharedMemory shMemBufferCanastos0 = IPC::BufferCanastosSharedMemory("shMemBufferCanastos0");
        IPC::BufferCanastosSharedMemory shMemBufferCanastos1 = IPC::BufferCanastosSharedMemory("shMemBufferCanastos1");
        IPC::BufferCanastosSharedMemory shMemBufferCanastos2 = IPC::BufferCanastosSharedMemory("shMemBufferCanastos2");
        shMemBufferCanastos0.getSharedMemory(DIRECTORY_AGV, ID_BUFFER_CANASTOS_0);
        shMemBufferCanastos1.getSharedMemory(DIRECTORY_AGV, ID_BUFFER_CANASTOS_1);
        shMemBufferCanastos2.getSharedMemory(DIRECTORY_AGV, ID_BUFFER_CANASTOS_2);
        shMemBufferCanastos0.destroy();
        shMemBufferCanastos1.destroy();
        shMemBufferCanastos2.destroy();
        
        //Robots 11 y 12
        IPC::Barrera1112MessageQueue cola11_A_12;        
        cola11_A_12.getMessageQueue(DIRECTORY_ROBOT_12, ID_COLA_11_A_12);
        cola11_A_12.destroy();

        IPC::Barrera1112MessageQueue cola12_A_11;
        cola12_A_11.getMessageQueue(DIRECTORY_ROBOT_12, ID_COLA_12_A_11);
        cola12_A_11.destroy();
        

        // IPCs Torres

        IPC::SharedMemory<DataSM_R11_R14> SM_R11_R14("SM_R11_R14");
        SM_R11_R14.getSharedMemory(DIRECTORY_ROBOT_11, SM_R11_R14_ID);
        SM_R11_R14.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC shMem_R11_R14 destruido");

        IPC::SharedMemory<DataSM_R14_R16> SM_R14_R16("SM_R14_R16");
        SM_R14_R16.getSharedMemory(DIRECTORY_ROBOT_14, SM_R14_R16_ID);
        SM_R14_R16.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC shMem_R14_R16 destruido");

        IPC::Semaphore semMutexSM_R11_R14("semMutexSM_R11_R14");
        semMutexSM_R11_R14.getSemaphore(DIRECTORY_ROBOT_11, SEM_MUTEX_SM_R11_R14_ID, 1);
        semMutexSM_R11_R14.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC semMutex_shMem_R11_R14 destruido");

        IPC::Semaphore semMutexSM_R14_R16("semMutexSM_R14_R16");
        semMutexSM_R14_R16.getSemaphore(DIRECTORY_ROBOT_14, SEM_MUTEX_SM_R14_R16_ID, 1);
        semMutexSM_R14_R16.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC semMutex_shMem_R14_R16 destruido");

        IPC::Semaphore semMutex_sincronismo_R16("semMutex_sincronismo_R16");
        semMutex_sincronismo_R16.getSemaphore(DIRECTORY_ROBOT_16, SEM_MUTEX_SINCRONISMO_R16_ID, 1);
        semMutex_sincronismo_R16.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC semMutex_sincronismo_R16 destruido");

        IPC::Semaphore semR11_Cinta13("semR11_Cinta13");
        semR11_Cinta13.getSemaphore(DIRECTORY_ROBOT_11, SEM_R11_CINTA_13, AMOUNT_CINTA_13);
        semR11_Cinta13.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC semR11_Cinta13 destruido");

        IPC::Semaphore semR14_Cinta13("semR14_Cinta13");
        semR14_Cinta13.getSemaphore(DIRECTORY_ROBOT_14, SEM_R14_CINTA13_ID, 1);
        semR14_Cinta13.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC semR14_Cinta13 destruido");

        IPC::Semaphore semR14_Cinta15("semR14_Cinta15");
        semR14_Cinta15.getSemaphore(DIRECTORY_ROBOT_14, SEM_R14_CINTA15_ID, 1);
        semR14_Cinta15.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC semR14_Cinta15 destruido");

        /*** Queues ***/
        IPC::MsgQueue inputQueueDespacho("inputQueueDespacho");
        inputQueueDespacho.getMsgQueue(DIRECTORY_DESPACHO, MSGQUEUE_DESPACHO_INPUT_ID);
        inputQueueDespacho.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC inputQueueDespacho destruido");

        IPC::MsgQueue inputQueueR16_Cinta15("inputQueueR16_Cinta15");
        inputQueueR16_Cinta15.getMsgQueue(DIRECTORY_ROBOT_16, MSGQUEUE_R16_CINTA15_INPUT_ID);
        inputQueueR16_Cinta15.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC inputQueueR16_Cinta15 destruido");

        IPC::MsgQueue inputQueueR16_Despacho("inputQueueR16_Despacho");
        inputQueueR16_Despacho.getMsgQueue(DIRECTORY_ROBOT_16, MSGQUEUE_R16_DESPACHO_INPUT_ID);
        inputQueueR16_Despacho.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC inputQueueR16_Despacho Destruido");

        IPC::MsgQueue inputQueueCliente("inputQueueCliente");
        inputQueueCliente.getMsgQueue(DIRECTORY_CLIENTE, MSGQUEUE_CLIENT_INPUT_ID);
        inputQueueCliente.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC inputQueueCliente destruido");

        IPC::MsgQueue R16_Cliente_Queue("R16_Cliente_Queue");
        R16_Cliente_Queue.getMsgQueue(DIRECTORY_ROBOT_16, MSGQUEUE_R16_CLIENT_ID);
        R16_Cliente_Queue.destroy();
        Logger::logMessage(Logger::IMPORTANT, "IPC R16_Cliente_Queue destruido");

        // Fin IPCs Torres

    
        IPC::VendedorLibreMessageQueue vendedores("Vendedores Msg Queue");
        vendedores.getMessageQueue(DIRECTORY_VENDEDOR, ID_COLA_VENDEDORES);
        vendedores.destroy();
        IPC::ClientesMessageQueue clientes("Clientes Msg Queue");
        clientes.getMessageQueue(DIRECTORY_VENDEDOR, ID_COLA_CLIENTES);
        clientes.destroy();
        IPC::PedidosVendedorMessageQueue pedidos("Pedidos Msg Queue");
        pedidos.getMessageQueue(DIRECTORY_VENDEDOR, ID_COLA_PEDIDOS);
        pedidos.destroy();

	
        IPC::Semaphore mutexAlmacenDePiezas("mutexAlmacenDePiezas");
        mutexAlmacenDePiezas.getSemaphore(DIRECTORY_APIEZAS, LETRA_SEM_ALMACEN_PIEZAS, 1);
        mutexAlmacenDePiezas.destroy();

        IPC::EspacioAlmacenPiezasSharedMemory shMemAlmacenDePiezas = IPC::EspacioAlmacenPiezasSharedMemory("shMemAlmacenDePiezas");
        shMemAlmacenDePiezas.getSharedMemory(DIRECTORY_APIEZAS, LETRA_SHMEM_ALMACEN_PIEZAS);
        shMemAlmacenDePiezas.destroy();

        IPC::Semaphore esperaRepositorCanasto("Espera Repositor Canasto");
        esperaRepositorCanasto.getSemaphore(DIRECTORY_APIEZAS, LETRA_SEM_ESPERA_REPOSITOR_CANASTOS, 1);
        esperaRepositorCanasto.destroy();

        IPC::Semaphore esperaRepositorGabinete("Espera Repositor Gabinete");
        esperaRepositorGabinete.getSemaphore(DIRECTORY_APIEZAS, LETRA_SEM_ESPERA_REPOSITOR_GABINETES, 1);
        esperaRepositorGabinete.destroy();
        
        IPC::MsgQueue consultasAlmacen("consultasAlmacen");
        consultasAlmacen.getMsgQueue(DIRECTORY_VENDEDOR, ID_COLA_CONSULTAS_ALMACEN_PIEZAS);
        consultasAlmacen.destroy();

        IPC::MsgQueue respuestasAlmacen("respuestasAlmacen");
        respuestasAlmacen.getMsgQueue(DIRECTORY_VENDEDOR, ID_COLA_RESPUESTAS_ALMACEN_PIEZAS);
        respuestasAlmacen.destroy();
    }
    
    catch (Exception & e) {
        Logger::getInstance().logMessage(Logger::ERROR, e.get_error_description().c_str());
        abort();
    }
   
    IPC::SharedMemory<AlmacenProductosTerminados> shmemAlmacenTerminados("shMemAlmacenTerminados");
    shmemAlmacenTerminados.getSharedMemory(DIRECTORY_VENDEDOR, ID_ALMACEN_TERMINADOS);
    shmemAlmacenTerminados.destroy();
    
    IPC::SharedMemory<int> shmemNumeroOrdenCompra("ultimaOrdenCompra");
    shmemNumeroOrdenCompra.getSharedMemory(DIRECTORY_VENDEDOR, ID_SHMEM_NRO_OC);
    shmemNumeroOrdenCompra.destroy();

    IPC::Semaphore mutexAlmacenTerminados("Mutex Almacen Terminados");
    mutexAlmacenTerminados.getSemaphore(DIRECTORY_VENDEDOR, ID_ALMACEN_TERMINADOS, 1);
    mutexAlmacenTerminados.destroy();
    
    IPC::Semaphore mutexOrdenDeCompra("mutexOrdenDeCompra");
    mutexOrdenDeCompra.getSemaphore(DIRECTORY_VENDEDOR, ID_SHMEM_NRO_OC, 1);
    mutexOrdenDeCompra.destroy();
}
Beispiel #3
0
int main()
{
    int respuesta;
    do //ciclo repetir asta que
    {
		  //system("cls");//borrar pantalla
        clrscr();
//menu para que el usuario se guie.
        cout<<" =========================================\n";
        cout<<" || FACTURACION ||\n";
        cout<<" ||-------------------------------------||\n";
        cout<<" || 1.- Nueva Factura ||\n";
        cout<<" || 2.- Clientes ||\n";
        cout<<" || 3.- Buscar una Factura ||\n";
        cout<<" || 4.- Buscar un Cliente ||\n";
        cout<<" || 5.- Salir ||\n";
        cout<<" =========================================\n";
        cout<<endl;
        cout<<" -> INGRESE OPCION: ";//solicitud de su respues
        cin>>respuesta;//respuesta
		  //system("cls");//borrar pantalla
        clrscr();
        switch(respuesta)//seleccion de en caso que respuesta se
        {
        case 1:
            ingreso();
            break;//sea uno llama al procedimiento ingreso arriba
        case 2:
            clientes();
				//system("pause");
            getch();
            break;//llama ala funcion ver datos
        case 3:
            detalles();
				//system("pause");
            getch();
            break;//llama ala funcion ver datos
        case 4:
            Buscar_Clientes();
				//system("pause");
            getch();
				break;//llama ala funcion ver datos
        case 5:
				//system("cls");
            clrscr();
            cout<<"*/*/*/*/*/USTED salio correctamente del programa/*/*/*/*/*/\n\n\n";
            exit(1);;
            break;//cierra el programa
        default:
            cout<<"numero incorrecto intente nuevamente\n\n";
				//system("pause");
            getch();
            break;//lanza un mensaje y vuelve a mostrar los datos
        }
    }
    while(respuesta!=5);

	 //system("pause");
    getch();
	 //cout<<endl;
	 return 0;
}
Beispiel #4
0
void createIPCs() {
    //Logger::getInstance().createLog();
    Logger::getInstance().setProcessInformation("Launcher:");
    
    // Robot 5
    IPC::Semaphore semaforoApiRobot5("Api robot 5");
    semaforoApiRobot5.createSemaphore(DIRECTORY_ROBOT_5, ID_SEM_API_ROBOT_5, 1);
    semaforoApiRobot5.initializeSemaphore(0,1);

    // Robot 5 - Cinta
    IPC::PedidosProduccionMessageQueue colaPedidos("PedidosProduccionMessageQueue");
    colaPedidos.createMessageQueue(DIRECTORY_ROBOT_5,ID_COLA_PEDIDOS_PRODUCCION);
            
    IPC::Semaphore semaforoAccesoEstadoRobot5("Estado Robot 5");
    semaforoAccesoEstadoRobot5.createSemaphore(DIRECTORY_ROBOT_5, ID_ESTADO_ROBOT_5, 1);
    semaforoAccesoEstadoRobot5.initializeSemaphore(0,1);
    IPC::EstadoRobot5SharedMemory estadoRobot5ShMem("EstadoRobot5SharedMemory");
    estadoRobot5ShMem.createSharedMemory(DIRECTORY_ROBOT_5, ID_ESTADO_ROBOT_5);
    semaforoAccesoEstadoRobot5.wait();
    {
        EstadoRobot5 estadoRobot5;
        estadoRobot5.robot5Bloqueado = false;
        estadoRobot5ShMem.writeInfo(&estadoRobot5);
    }
    semaforoAccesoEstadoRobot5.signal();
    
    IPC::Semaphore semaforoBloqueoRobot5("Bloqueo Robot 5");
    semaforoBloqueoRobot5.createSemaphore(DIRECTORY_ROBOT_5, ID_SEM_BLOQUEO_ROBOT_5, 1);
    semaforoBloqueoRobot5.initializeSemaphore(0,0);
    
    IPC::Semaphore semaforoBloqueoRobot11("Bloqueo Robot 11");
    IPC::Semaphore semBloqueoRobot12("semBloqueoRobot12");
    semaforoBloqueoRobot11.createSemaphore(DIRECTORY_ROBOT_11, ID_SEM_BLOQUEO_ROBOT_11, CANTIDAD_CINTAS_6);
    semBloqueoRobot12.createSemaphore(DIRECTORY_ROBOT_12, ID_SEM_BLOQUEO_ROBOT_12, CANTIDAD_CINTAS_6);
    for (int i = 0; i < CANTIDAD_CINTAS_6; ++i) {
        semaforoBloqueoRobot11.initializeSemaphore(i, 0);
        semBloqueoRobot12.initializeSemaphore(i, 0);
    }
    
    IPC::Semaphore semaforoAccesoCinta6("Acceso Cinta 6");
    semaforoAccesoCinta6.createSemaphore(DIRECTORY_ROBOT_11, ID_SEM_CINTA_6, CANTIDAD_CINTAS_6);
        for (int i = 0; i < CANTIDAD_CINTAS_6; ++i) {
        semaforoAccesoCinta6.initializeSemaphore(i, 1);
    }
    
    IPC::Cinta6SharedMemory cinta6_0("Cinta 6 Share dMemory 0");
    cinta6_0.createSharedMemory(DIRECTORY_ROBOT_11, ID_CINTA_6_0);
    IPC::Cinta6SharedMemory cinta6_1("Cinta 6 Share dMemory 1");
    cinta6_1.createSharedMemory(DIRECTORY_ROBOT_11, ID_CINTA_6_1);

    CintaTransportadora_6 cinta6;
    cinta6.cantLibres = BUFF_SIZE_CINTA_6;
    cinta6.puntoLectura = 0;
    cinta6.robot11Durmiendo = false;
    for (int i = 0; i < BUFF_SIZE_CINTA_6; i++) cinta6.lugarVacio[i] = true;

    semaforoAccesoCinta6.wait(0);
    {
        cinta6_0.writeInfo(&cinta6);
    }
    semaforoAccesoCinta6.signal(0);    
    
    semaforoAccesoCinta6.wait(1);
    {
        cinta6_1.writeInfo(&cinta6);
    }
    semaforoAccesoCinta6.signal(1);

    //Robot 5 - AGV
    IPC::BufferCanastoEntre5yAGVSharedMemory shMemPasajeCanastoEntre5yAGV1("BufferCanastoEntre5yAGVSharedMemory 0");
    IPC::BufferCanastoEntre5yAGVSharedMemory shMemPasajeCanastoEntre5yAGV2("BufferCanastoEntre5yAGVSharedMemory 1");
    IPC::BufferCanastoEntre5yAGVSharedMemory shMemPasajeCanastoEntre5yAGV3("BufferCanastoEntre5yAGVSharedMemory 2");
    shMemPasajeCanastoEntre5yAGV1.createSharedMemory(DIRECTORY_AGV, ID_BUFFER_AGV_5_0);
    shMemPasajeCanastoEntre5yAGV2.createSharedMemory(DIRECTORY_AGV, ID_BUFFER_AGV_5_1);
    shMemPasajeCanastoEntre5yAGV3.createSharedMemory(DIRECTORY_AGV, ID_BUFFER_AGV_5_2);
    
    // Do the same with the semaphores
    IPC::Semaphore semBloqueoAGV("semBloqueoAGV");
    IPC::Semaphore semBufferAGV_5("semBufferAGV_5");
    IPC::Semaphore semBufferCanastos("semMemCanastos");
    semBloqueoAGV.createSemaphore(DIRECTORY_AGV, ID_SEM_BLOQUEO_AGV, CANTIDAD_AGVS);
    semBufferAGV_5.createSemaphore(DIRECTORY_AGV, ID_SEM_BUFFER_AGV_5, CANTIDAD_AGVS);
    semBufferCanastos.createSemaphore(DIRECTORY_AGV, ID_SEM_BUFFER_CANASTOS, CANTIDAD_AGVS);
    
    for (int i = 0; i < CANTIDAD_AGVS; i++) {
        semBloqueoAGV.initializeSemaphore(i, 0);
        semBufferAGV_5.initializeSemaphore(i, 1);
        semBufferCanastos.initializeSemaphore(i, 1);
    }
    
    // Do the same with the queues
    IPC::PedidosAgvMessageQueue colaPedidosAGV_5;
    colaPedidosAGV_5.createMessageQueue(DIRECTORY_AGV, ID_COLA_PEDIDOS_AGV_5);
        
    // Robots cintas - AGV
    BufferCanastos canastos;
    for (int i = 0; i < MAX_QUANTITY_CANASTOS; i++) {
        canastos.canastos[i].cantidadPiezas = 0;
        canastos.canastos[i].tipoPieza = NULL_PIEZA;
        canastos.canastos[5].tipoPieza = PIEZA_2;
        canastos.robotCinta1EsperaPorElLugarNumero = -1;
        canastos.robotCinta2EsperaPorElLugarNumero = -1;
    }
    
    IPC::PedidosCanastosMessageQueue colaPedidosCanastos;
    colaPedidosCanastos.createMessageQueue(DIRECTORY_AGV, ID_COLA_PEDIDOS_ROBOTS_AGV);
    
    IPC::BufferCanastosSharedMemory shMemBufferCanastos0 = IPC::BufferCanastosSharedMemory("shMemBufferCanastos0");
    IPC::BufferCanastosSharedMemory shMemBufferCanastos1 = IPC::BufferCanastosSharedMemory("shMemBufferCanastos1");
    IPC::BufferCanastosSharedMemory shMemBufferCanastos2 = IPC::BufferCanastosSharedMemory("shMemBufferCanastos2");
    shMemBufferCanastos0.createSharedMemory(DIRECTORY_AGV, ID_BUFFER_CANASTOS_0);
    shMemBufferCanastos1.createSharedMemory(DIRECTORY_AGV, ID_BUFFER_CANASTOS_1);
    shMemBufferCanastos2.createSharedMemory(DIRECTORY_AGV, ID_BUFFER_CANASTOS_2);
    
    semBufferCanastos.wait(0);
    {
        shMemBufferCanastos0.writeInfo(&canastos);
    }
    semBufferCanastos.signal(0);
    
    semBufferCanastos.wait(1);
    {
        shMemBufferCanastos1.writeInfo(&canastos);
    }
    semBufferCanastos.signal(1);
    
    semBufferCanastos.wait(2);
    {
        shMemBufferCanastos2.writeInfo(&canastos);
    }
    semBufferCanastos.signal(2);
    
    //Robots 11 y 12
    IPC::Barrera1112MessageQueue cola11_A_12;
    cola11_A_12.createMessageQueue(DIRECTORY_ROBOT_12, ID_COLA_11_A_12);
    
    IPC::Barrera1112MessageQueue cola12_A_11;
    cola12_A_11.createMessageQueue(DIRECTORY_ROBOT_12, ID_COLA_12_A_11);
    
    /* IPCs Torres: R11-R14-R16-Despacho-Cliente-Vendedores */
    // DataSM_R11_R14 dataSM_R11_R14;
    // DataSM_R14_R16 dataSM_R14_R16;

    // Create and initialize ShMem
    IPC::SharedMemory<SerializedData> SM_R11_R14("SM_R11_R14");
    SM_R11_R14.createSharedMemory(DIRECTORY_ROBOT_11, SM_R11_R14_ID);
    // SM_R11_R14.write( & dataSM_R11_R14 );
    Logger::logMessage(Logger::IMPORTANT, "IPC SM_R11_R14 creado");

    IPC::SharedMemory<SerializedData> SM_R14_R16("SM_R14_R16");
    SM_R14_R16.createSharedMemory(DIRECTORY_ROBOT_14, SM_R14_R16_ID);
    // SM_R14_R16.write( & dataSM_R14_R16 );
    Logger::logMessage(Logger::IMPORTANT, "IPC SM_R14_R16 creado");

    // Do the same with the semaphores
    IPC::Semaphore semMutexSM_R11_R14("semMutexSM_R11_R14");
    semMutexSM_R11_R14.createSemaphore(DIRECTORY_ROBOT_11, SEM_MUTEX_SM_R11_R14_ID, 1);
    semMutexSM_R11_R14.initializeSemaphore(0, 1);
    Logger::logMessage(Logger::IMPORTANT, "IPC semMutexSM_R11_R14 creado");

    IPC::Semaphore semMutexSM_R14_R16("semMutexSM_R14_R16");
    semMutexSM_R14_R16.createSemaphore(DIRECTORY_ROBOT_14, SEM_MUTEX_SM_R14_R16_ID, 1);
    semMutexSM_R14_R16.initializeSemaphore(0, 1);
    Logger::logMessage(Logger::IMPORTANT, "IPC semMutexSM_R14_R16 creado");

    IPC::Semaphore semMutex_sincronismo_R16_("semMutex_sincronismo_R16");
    semMutex_sincronismo_R16_.createSemaphore(DIRECTORY_ROBOT_16, SEM_MUTEX_SINCRONISMO_R16_ID, 1);
    semMutex_sincronismo_R16_.initializeSemaphore(0, 1);
    Logger::logMessage(Logger::IMPORTANT, "IPC semMutex_sincronismo_R16");

    IPC::Semaphore semR11_Cinta13("semR11_Cinta13");
    semR11_Cinta13.createSemaphore(DIRECTORY_ROBOT_11, SEM_R11_CINTA_13, AMOUNT_CINTA_13);
    for (int i = 0; i < AMOUNT_CINTA_13; ++i) {
        semR11_Cinta13.initializeSemaphore(i, 0);
    }
    Logger::logMessage(Logger::IMPORTANT, "IPC semR11_Cinta13 creado");

    IPC::Semaphore semR14_Cinta13("semR14_Cinta13");
    semR14_Cinta13.createSemaphore(DIRECTORY_ROBOT_14, SEM_R14_CINTA13_ID, 1);
    semR14_Cinta13.initializeSemaphore(0, 0);
    Logger::logMessage(Logger::IMPORTANT, "IPC semR14_Cinta13 creado");

    IPC::Semaphore semR14_Cinta15("semR14_Cinta15");
    semR14_Cinta15.createSemaphore(DIRECTORY_ROBOT_14, SEM_R14_CINTA15_ID, 1);
    semR14_Cinta15.initializeSemaphore(0, 0);
    Logger::logMessage(Logger::IMPORTANT, "IPC semR14_Cinta15 creado");

    /* NOTA: La notación para colas es que el input o output es respecto
     * del nombre del proceso asociado a la cola. inputQueueClient por
     * ejemplo indica que es la cola donde el cliente recibe mensajes
     */
    IPC::MsgQueue inputQueueDespacho("inputQueueDespacho");
    inputQueueDespacho.create(DIRECTORY_DESPACHO, MSGQUEUE_DESPACHO_INPUT_ID);
    Logger::logMessage(Logger::IMPORTANT, "IPC inputQueueDespacho creado");

    IPC::MsgQueue inputQueueR16_Cinta15("inputQueueR16_Cinta15");
    inputQueueR16_Cinta15.create(DIRECTORY_ROBOT_16, MSGQUEUE_R16_CINTA15_INPUT_ID);
    Logger::logMessage(Logger::IMPORTANT, "IPC inputQueueR16_Cinta15 creado");

    IPC::MsgQueue inputQueueR16_Despacho("inputQueueR16_Despacho");
    inputQueueR16_Despacho.create(DIRECTORY_ROBOT_16, MSGQUEUE_R16_DESPACHO_INPUT_ID);
    Logger::logMessage(Logger::IMPORTANT, "IPC inputQueueR16_Despacho creado");

    IPC::MsgQueue inputQueueCliente("inputQueueCliente");
    inputQueueCliente.create(DIRECTORY_CLIENTE, MSGQUEUE_CLIENT_INPUT_ID);
    Logger::logMessage(Logger::IMPORTANT, "IPC inputQueueCliente creado");

    IPC::MsgQueue R16_Cliente_Queue("R16_Cliente_Queue");
    R16_Cliente_Queue.create(DIRECTORY_ROBOT_16, MSGQUEUE_R16_CLIENT_ID);
    Logger::logMessage(Logger::IMPORTANT, "IPC R16_Cliente_Queue creado");

    /* Fin IPCs Torres */

    IPC::VendedorLibreMessageQueue vendedores("Vendedores Msg Queue");
    vendedores.createMessageQueue(DIRECTORY_VENDEDOR, ID_COLA_VENDEDORES);
    IPC::ClientesMessageQueue clientes("Clientes Msg Queue");
    clientes.createMessageQueue(DIRECTORY_VENDEDOR, ID_COLA_CLIENTES);
    IPC::PedidosVendedorMessageQueue pedidos("Pedidos Msg Queue");
    pedidos.createMessageQueue(DIRECTORY_VENDEDOR, ID_COLA_PEDIDOS);

    IPC::MsgQueue consultasAlmacen("ConsultasAlmacen");
    consultasAlmacen.create(DIRECTORY_VENDEDOR, ID_COLA_CONSULTAS_ALMACEN_PIEZAS);
    
    IPC::MsgQueue respuestasAlmacen("RespuestasAlmacen");
    respuestasAlmacen.create(DIRECTORY_VENDEDOR, ID_COLA_RESPUESTAS_ALMACEN_PIEZAS);
    
    IPC::SharedMemory<AlmacenProductosTerminados> shmemAlmacenTerminados("shMemAlmacenTerminados");
    shmemAlmacenTerminados.createSharedMemory(DIRECTORY_VENDEDOR, ID_ALMACEN_TERMINADOS);
    
    IPC::SharedMemory<int> shmemNumeroOrdenCompra("shmemNumeroOrdenCompra");
    shmemNumeroOrdenCompra.createSharedMemory(DIRECTORY_VENDEDOR, ID_SHMEM_NRO_OC);
    
    IPC::Semaphore mutexAlmacenTerminados("Acceso Almacen Terminados");
    mutexAlmacenTerminados.createSemaphore(DIRECTORY_VENDEDOR, ID_ALMACEN_TERMINADOS, 1);
    mutexAlmacenTerminados.initializeSemaphore(0,1);
    
    IPC::Semaphore mutexOrdenDeCompra("mutexOrdenDeCompra");
    mutexOrdenDeCompra.createSemaphore(DIRECTORY_VENDEDOR, ID_SHMEM_NRO_OC, 1);
    mutexOrdenDeCompra.initializeSemaphore(0, 1);
        
    /* Setea la orden de compra en uno por ser la primera. */
    mutexOrdenDeCompra.wait();
    {
	int shMemData = 1;
        shmemNumeroOrdenCompra.write(&shMemData);
    }
    mutexOrdenDeCompra.signal();
        
    /* almacén de piezas */
    IPC::Semaphore mutexAlmacenDePiezas("mutexAlmacenDePiezas");
    mutexAlmacenDePiezas.createSemaphore(DIRECTORY_APIEZAS, LETRA_SEM_ALMACEN_PIEZAS, 1);
    mutexAlmacenDePiezas.initializeSemaphore(0, 1);
    
    IPC::Semaphore esperaRepositorCanasto("Espera Repositor Canasto");
    esperaRepositorCanasto.createSemaphore(DIRECTORY_APIEZAS, LETRA_SEM_ESPERA_REPOSITOR_CANASTOS, 1);
    esperaRepositorCanasto.initializeSemaphore(0, 0);
    
    IPC::Semaphore esperaRepositorGabinete("Espera Repositor Gabinete");
    esperaRepositorGabinete.createSemaphore(DIRECTORY_APIEZAS, LETRA_SEM_ESPERA_REPOSITOR_GABINETES, 1);
    esperaRepositorGabinete.initializeSemaphore(0, 0);
    
    
    IPC::EspacioAlmacenPiezasSharedMemory shMemAlmacenDePiezas = IPC::EspacioAlmacenPiezasSharedMemory("shMemAlmacenDePiezas");
    shMemAlmacenDePiezas.createSharedMemory(DIRECTORY_APIEZAS, LETRA_SHMEM_ALMACEN_PIEZAS);
    
    EstructuraAlmacenPiezas estructuraAlmacen;
    for (int i = 0; i < CANTIDAD_TIPOS_PIEZAS; ++i) estructuraAlmacen.cantCanastos[i] = 1;
    for (int i = 0; i < CANTIDAD_TIPOS_GABINETES; ++i) estructuraAlmacen.cantGabinetes[i] = 0;
    
    shMemAlmacenDePiezas.writeInfo(&estructuraAlmacen);
    
}
Beispiel #5
0
void menu_scroll(CDKSCREEN *cdkScreen)

{

/*    WINDOW *scrollwin;
    scrollwin=newwin(20,20,10,10);
    box(scrollwin,0,0);
    mvwaddstr(scrollwin,2,2,"dios");
    wrefresh
            (scrollwin);*/
   // refresh();
    char *opciones[]={"Proveedores","Tecnicos","Clientes","salir"};
    CDKSCROLL *scroll;
    int elegido;
    do{
        scroll=newCDKScroll (cdkScreen, 2, 2, RIGHT,10, 20,
				     "<C>Menu",
                                        opciones,
                                                4,
        				     TRUE,
                			     A_REVERSE,
                        		     TRUE,
                                	     FALSE
                            );
elegido=activateCDKScroll(scroll,0);
//refreshCDKScreen(cdkScreen);
//
//refresh();

switch(elegido)
{
        case 0:
            destroyCDKScroll(scroll);
            //unregisterCDKObject(vSCROLL,scroll);
           // refreshCDKScreen(cdkScreen);
            //getch();
              proveedores();
          //  registerCDKObject(cdkScreen,vSCROLL,scroll);
            //produccion();
            break;
        case 1:
            destroyCDKScroll(scroll);
            tecnicos();
            //administracion();
            break;
        case 2:
      //        mvwaddstr(cdkScreen->window,2,2,"dios");
    // wrefresh(cdkScreen->window);
    // getch();
          clientes();
          break;
        case 3:
        endCDK();

        exit(0);

}


}while(elegido!=3);
getch();
}