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; }
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; }