int main(int argc,char *argv[])
{
    string provider("pva");
    if(argc>1) provider = argv[1];
    PVDatabasePtr master = PVDatabase::getMaster();
    NTScalarArrayBuilderPtr ntScalarArrayBuilder = NTScalarArray::createBuilder();
    PVStructurePtr pvStructure = ntScalarArrayBuilder->
        value(pvDouble)->
        addAlarm()->
        addTimeStamp()->
        createPVStructure();
    master->addRecord(PVRecord::create("doubleArray",pvStructure));
    ChannelProviderLocalPtr channelProvider = getChannelProviderLocal();
    if(provider=="pva") ClientFactory::start();
    ServerContext::shared_pointer ctx =
        startPVAServer(PVACCESS_ALL_PROVIDERS,0,true,true);
    ExampleLinkPtr pvRecord(
        ExampleLink::create(
           "exampleLink",provider,"doubleArray")); 
    master->addRecord(pvRecord);
    cout << "exampleLink\n";
    string str;
    while(true) {
        cout << "Type exit to stop: \n";
        getline(cin,str);
        if(str.compare("exit")==0) break;

    }
    ctx->destroy();
    epicsThreadSleep(3.0);
//    channelProvider->destroy();
//    if(provider=="pva") ClientFactory::stop();
//    epicsThreadSleep(3.0);
    return 0;
}
int main(int argc,char *argv[])
{
    string doubleArrayRecordName("doubleArray");
    if(argc==2 && string(argv[1])==string("-help")) {
        cout << "doubleArrayRecordName" << endl;
        cout << "default" << endl;
        cout << doubleArrayRecordName << endl;
        return 0;
    }
    if(argc>1) doubleArrayRecordName = argv[1];
    try {
        PVDatabasePtr master = PVDatabase::getMaster();
        ChannelProviderLocalPtr channelProvider = getChannelProviderLocal();
        NTScalarArrayBuilderPtr ntScalarArrayBuilder = NTScalarArray::createBuilder();
        PVStructurePtr pvStructure = ntScalarArrayBuilder->
            value(pvDouble)->
            addAlarm()->
            addTimeStamp()->
            createPVStructure();
        master->addRecord(PVRecord::create(doubleArrayRecordName,pvStructure));
        ServerContext::shared_pointer ctx =
            startPVAServer(PVACCESS_ALL_PROVIDERS,0,true,true);
        string str;
        while(true) {
            cout << "Type exit to stop: \n";
            getline(cin,str);
            if(str.compare("exit")==0) break;
        }
        ctx->destroy();
    } catch (std::runtime_error e) {
        cerr << "exception " << e.what() << endl;
        return 1;
    }
    return 0;
}
int main(int argc,char *argv[])
{
    string provider("pva");
    string linkedRecordName("doubleArray");
    bool generateLinkedRecord(true);
    if(argc==2 && string(argv[1])==string("-help")) {
        cout << "provider  linkedRecordName generateLinkedRecord" << endl;
        cout << "default" << endl;
        cout << provider << " " << " " << linkedRecordName << " true" << endl;
        return 0;
    }
    if(argc>1) provider = argv[1];
    if(argc>2) linkedRecordName = argv[2];
    if(argc>3) {
        string val = argv[3];
        if(val=="false") generateLinkedRecord = false;
    }
    try {
        PVDatabasePtr master = PVDatabase::getMaster();
        ChannelProviderLocalPtr channelProvider = getChannelProviderLocal();
        PvaClientPtr pva= PvaClient::get(provider);
        ServerContext::shared_pointer ctx =
        startPVAServer("local",0,true,true);
        
        if(generateLinkedRecord) {
            NTScalarArrayBuilderPtr ntScalarArrayBuilder = NTScalarArray::createBuilder();
            PVStructurePtr pvStructure = ntScalarArrayBuilder->
                value(pvDouble)->
                addAlarm()->
                addTimeStamp()->
                createPVStructure();
            PVRecordPtr pvRecord(PVRecord::create(linkedRecordName,pvStructure));
            master->addRecord(pvRecord);
        }
        ExampleMonitorLinkRecordPtr pvMonitorRecord(
            ExampleMonitorLinkRecord::create(
                 pva, "exampleMonitorLink",provider,linkedRecordName));
        master->addRecord(pvMonitorRecord);
        ExampleGetLinkRecordPtr pvGetRecord(
            ExampleGetLinkRecord::create(
                 pva,"exampleGetLink",provider,linkedRecordName));
        master->addRecord(pvGetRecord);
        ExamplePutLinkRecordPtr pvPutRecord(
            ExamplePutLinkRecord::create(
                 pva,"examplePutLink",provider,linkedRecordName));
        master->addRecord(pvPutRecord);
        cout << "exampleMonitorLink\n";
        string str;
        while(true) {
            cout << "Type exit to stop: \n";
            getline(cin,str);
            if(str.compare("exit")==0) break;
        }
        ctx->destroy();
    } catch (std::runtime_error e) {
        cerr << "exception " << e.what() << endl;
        return 1;
    }
    return 0;
}
int main(int argc,char *argv[])
{
    PVDatabasePtr master = PVDatabase::getMaster();
    ChannelProviderLocalPtr channelProvider = getChannelProviderLocal();
    PVRecordPtr pvRecord;
    string recordName;

    recordName = "powerSupply";
    pvRecord = PowerSupplyRecord::create(recordName);
    master->addRecord(pvRecord);

    ServerContext::shared_pointer ctx =
        startPVAServer(PVACCESS_ALL_PROVIDERS,0,true,true);
    
    string str;
    while(true) {
        cout << "Type exit to stop: \n";
        getline(cin,str);
        if(str.compare("exit")==0) break;

    }
    ctx->destroy();
epicsThreadSleep(3.0); // should not be necessary
    return 0;
}
void PVAServerCTX::stop()
{
   if(!ctx.get()) {
        cout<< "PVAServer already stopped" << endl;
        return;
   }
   ctx->destroy();
   ctx.reset();
   epicsThreadSleep(1.0);
}
void PVAServerCTX::start()
{
   if(ctx.get()) {
        cout<< "PVAServer already started" << endl;
        return;
   }
   ctx = startPVAServer(PVACCESS_ALL_PROVIDERS,0,true,true);
}
int main(int argc,char *argv[])
{
    PVDatabasePtr master = PVDatabase::getMaster();
    ChannelProviderLocalPtr channelProvider = getChannelProviderLocal();
    ExampleDatabase::create();
    ServerContext::shared_pointer ctx =
        startPVAServer(PVACCESS_ALL_PROVIDERS,0,true,true);
    cout << "exampleDatabase\n";
    PVStringArrayPtr pvNames = master->getRecordNames();
    cout << "recordNames" << endl << *pvNames << endl;
    string str;
    while(true) {
        cout << "Type exit to stop: \n";
        getline(cin,str);
        if(str.compare("exit")==0) break;

    }
    ctx->destroy();
    epicsThreadSleep(1.0);
    channelProvider->destroy();
    return 0;
}
int main(int argc,char *argv[])
{
    bool result(false);
    string recordName;
    recordName = "arrayPerformance";
    size_t size = 10000000;
    double delay = .0001;
    string providerName("local");
    size_t nMonitor = 1;
    int queueSize = 2;
    double waitTime = 0.0;
    if(argc==2 && string(argv[1])==string("-help")) {
        cout << "arrayPerformanceMain recordName size";
        cout << " delay providerName nMonitor queueSize waitTime" << endl;
        cout << "default" << endl;
        cout << "arrayPerformance ";
        cout << recordName << " ";
        cout << size << " ";
        cout << delay << " ";
        cout << providerName << " ";
        cout << nMonitor << " ";
        cout << queueSize << " ";
        cout << "0.0" << endl;
        return 0;
    }
    if(argc>1) recordName = argv[1];
    if(argc>2) size = strtoul(argv[2],0,0);
    if(argc>3) delay = atof(argv[3]);
    if(argc>4) providerName = argv[4];
    if(argc>5) nMonitor = strtoul(argv[5],0,0);
    if(argc>6) queueSize = strtol(argv[6],0,0);
    if(argc>7) waitTime = atof(argv[7]);
    cout << "arrayPerformance ";
    cout << recordName << " ";
    cout << size << " ";
    cout << delay << " ";
    cout << providerName << " ";
    cout << nMonitor << " ";
    cout << queueSize << " ";
       cout << waitTime << endl;
    ClientFactory::start();
    PVDatabasePtr master = PVDatabase::getMaster();
    ChannelProviderLocalPtr channelProvider = getChannelProviderLocal();
    PVRecordPtr pvRecord;
    pvRecord = ArrayPerformance::create(recordName,size,delay);
    result = master->addRecord(pvRecord);
    PVRecordPtr arrayPreformance = pvRecord;
    arrayPreformance->setTraceLevel(0);
    pvRecord = TraceRecord::create("traceRecordPGRPC");
    result = master->addRecord(pvRecord);
    if(!result) cout<< "record " << recordName << " not added" << endl;
    pvRecord.reset();
    ServerContext::shared_pointer pvaServer = 
        startPVAServer(PVACCESS_ALL_PROVIDERS,0,true,true);
    std::vector<LongArrayMonitorPtr> longArrayMonitor(nMonitor);
    for(size_t i=0; i<nMonitor; ++i) {
       longArrayMonitor[i]
         = LongArrayMonitor::create(providerName,recordName,queueSize,waitTime);
    }
    epicsThreadSleep(1.0);
    for(size_t i=0; i<nMonitor; ++i) longArrayMonitor[i]->start();
    cout << "arrayPerformance\n";
    string str;
    while(true) {
        cout << "Type exit to stop: \n";
        getline(cin,str);
        if(str.compare("exit")==0) break;

    }
    arrayPreformance.reset();
    for(size_t i=0; i<nMonitor; ++i) longArrayMonitor[i]->stop();
    for(size_t i=0; i<nMonitor; ++i) longArrayMonitor[i]->destroy();
    pvaServer->shutdown();
    epicsThreadSleep(1.0);
    pvaServer->destroy();
    ClientFactory::stop();
    epicsThreadSleep(1.0);
    channelProvider->destroy();
    return 0;
}
Exemple #9
0
int main(int argc,char *argv[])
{
    double delay = 0.01;
    size_t event_count = 10;
    bool random_count = false;
    bool realistic = false;

    int opt;
    while ((opt = getopt(argc, argv, "d:e:h:mr")) != -1)
    {
        switch (opt)
        {
        case 'd':
            delay = atof(optarg);
            break;
        case 'e':
            event_count = (size_t)atol(optarg);
            break;
        case 'h':
            help(argv[0]);
            return 0;
        case 'm':
        	random_count = true;
            break;
        case 'r':
        	realistic = true;
            break;
        default:
            help(argv[0]);
            return -1;
        }
    }

    cout << "Delay : " << delay << " seconds" << endl;
    cout << "Events: " << event_count << endl;
    cout << "Realistic: " << realistic << endl;

    PVDatabasePtr master = PVDatabase::getMaster();
    ChannelProviderLocalPtr channelProvider = getChannelProviderLocal();


    NeutronPVRecord::shared_pointer neutrons = NeutronPVRecord::create("neutrons");
    if (! master->addRecord(neutrons))
        throw std::runtime_error("Cannot add record " + neutrons->getRecordName());

    shared_ptr<FakeNeutronEventRunnable> runnable(new FakeNeutronEventRunnable(neutrons, delay, event_count, random_count, realistic));
    shared_ptr<epicsThread> thread(new epicsThread(*runnable, "processor", epicsThreadGetStackSize(epicsThreadStackMedium)));
    thread->start();

    PVRecordPtr pvRecord = TraceRecord::create("traceRecordPGRPC");
    if (! master->addRecord(pvRecord))
        throw std::runtime_error("Cannot add record " + pvRecord->getRecordName());
    // Release record, held by database
    pvRecord.reset();

    ServerContext::shared_pointer pvaServer = 
        startPVAServer(PVACCESS_ALL_PROVIDERS,0,true,true);
    cout << "neutronServer running\n";
    string str;
    while(true) {
        cout << "Type exit to stop: \n";
        getline(cin,str);
        if(str.compare("exit")==0) break;

    }
    runnable->shutdown();
    pvaServer->shutdown();
    epicsThreadSleep(1.0);
    pvaServer->destroy();
    channelProvider->destroy();

    return 0;
}