minor changes
This commit is contained in:
@@ -13,7 +13,6 @@
|
||||
|
||||
using std::tr1::static_pointer_cast;
|
||||
using namespace epics::pvData;
|
||||
using namespace epics::pvAccess;
|
||||
using namespace std;
|
||||
|
||||
namespace epics { namespace pvDatabase {
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
#include <map>
|
||||
#include <deque>
|
||||
|
||||
#include <pv/pvAccess.h>
|
||||
#include <pv/pvData.h>
|
||||
#include <pv/convert.h>
|
||||
|
||||
namespace epics { namespace pvDatabase {
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
|
||||
using std::tr1::static_pointer_cast;
|
||||
using namespace epics::pvData;
|
||||
using namespace epics::pvAccess;
|
||||
using namespace std;
|
||||
|
||||
namespace epics { namespace pvDatabase {
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
|
||||
using std::tr1::static_pointer_cast;
|
||||
using namespace epics::pvData;
|
||||
using namespace epics::pvAccess;
|
||||
using namespace std;
|
||||
|
||||
namespace epics { namespace pvDatabase {
|
||||
@@ -91,7 +90,10 @@ bool RecordListRecord::init()
|
||||
void RecordListRecord::process()
|
||||
{
|
||||
PVStringArrayPtr pvNames = PVDatabase::getMaster()->getRecordNames();
|
||||
names->replace(pvNames->viewUnsafe());
|
||||
std::vector<String> const & xxx = pvNames->getVector();
|
||||
size_t n = xxx.size();
|
||||
names->put(0,n,xxx,0);
|
||||
// names->replace(pvNames->viewUnsafe()); for pvDataCPP-md
|
||||
String message("");
|
||||
if(database->get().compare("master")!=0) {
|
||||
message += " can only access master ";
|
||||
|
||||
@@ -21,85 +21,39 @@ using namespace std;
|
||||
|
||||
static String providerName("local");
|
||||
|
||||
class LocalChannelCTX;
|
||||
typedef std::tr1::shared_ptr<LocalChannelCTX> LocalChannelCTXPtr;
|
||||
class LocalChannelProviderFactory;
|
||||
typedef std::tr1::shared_ptr<LocalChannelProviderFactory> LocalChannelProviderFactoryPtr;
|
||||
|
||||
class LocalChannelCTX :
|
||||
public epics::pvData::Runnable,
|
||||
public std::tr1::enable_shared_from_this<LocalChannelCTX>
|
||||
class LocalChannelProviderFactory : public ChannelProviderFactory
|
||||
{
|
||||
|
||||
public:
|
||||
POINTER_DEFINITIONS(LocalChannelCTX);
|
||||
static LocalChannelCTXPtr create(
|
||||
ChannelProviderLocalPtr const &channelProvider);
|
||||
ChannelProviderLocalPtr getChannelProviderLocal() {return channelProvider;}
|
||||
virtual ~LocalChannelCTX();
|
||||
virtual void run();
|
||||
private:
|
||||
LocalChannelCTX(
|
||||
ChannelProviderLocalPtr const &channelProvider);
|
||||
shared_pointer getPtrSelf()
|
||||
POINTER_DEFINITIONS(LocalChannelProviderFactory);
|
||||
virtual String getFactoryName() { return providerName;}
|
||||
static LocalChannelProviderFactoryPtr create(
|
||||
ChannelProviderLocalPtr const &channelProvider)
|
||||
{
|
||||
return shared_from_this();
|
||||
LocalChannelProviderFactoryPtr xxx(
|
||||
new LocalChannelProviderFactory(channelProvider));
|
||||
registerChannelProviderFactory(xxx);
|
||||
return xxx;
|
||||
}
|
||||
epics::pvData::Event event;
|
||||
virtual ChannelProvider::shared_pointer sharedInstance()
|
||||
{
|
||||
return channelProvider;
|
||||
}
|
||||
virtual ChannelProvider::shared_pointer newInstance()
|
||||
{
|
||||
return channelProvider;
|
||||
}
|
||||
private:
|
||||
LocalChannelProviderFactory(
|
||||
ChannelProviderLocalPtr const &channelProvider)
|
||||
: channelProvider(channelProvider)
|
||||
{}
|
||||
ChannelProviderLocalPtr channelProvider;
|
||||
epics::pvAccess::ServerContextImpl::shared_pointer ctx;
|
||||
epics::pvData::Thread *thread;
|
||||
};
|
||||
|
||||
LocalChannelCTXPtr LocalChannelCTX::create(
|
||||
ChannelProviderLocalPtr const & channelProvider)
|
||||
{
|
||||
static LocalChannelCTXPtr pvServiceChannelCTX;
|
||||
static Mutex mutex;
|
||||
Lock xx(mutex);
|
||||
|
||||
if(pvServiceChannelCTX.get()==0) {
|
||||
pvServiceChannelCTX = LocalChannelCTXPtr(
|
||||
new LocalChannelCTX(channelProvider));
|
||||
}
|
||||
return pvServiceChannelCTX;
|
||||
}
|
||||
|
||||
LocalChannelCTX::LocalChannelCTX(
|
||||
ChannelProviderLocalPtr const &channelProvider)
|
||||
:
|
||||
channelProvider(channelProvider),
|
||||
ctx(ServerContextImpl::create()),
|
||||
thread(new Thread(
|
||||
String("pvServiceChannel"),
|
||||
lowerPriority,
|
||||
this,
|
||||
epicsThreadStackBig))
|
||||
{}
|
||||
|
||||
LocalChannelCTX::~LocalChannelCTX()
|
||||
{
|
||||
std::cout << "LocalChannelCTX::~LocalChannelCTX()" << std::endl;
|
||||
ctx->shutdown();
|
||||
// we need thead.waitForCompletion()
|
||||
event.wait();
|
||||
epicsThreadSleep(1.0);
|
||||
std::cout << "LocalChannelCTX::run() calling channelProvider->destroy()" << std::endl;
|
||||
if(channelProvider!=NULL) channelProvider->destroy();
|
||||
ctx.reset();
|
||||
channelProvider.reset();
|
||||
delete thread;
|
||||
}
|
||||
void LocalChannelCTX::run()
|
||||
{
|
||||
registerChannelProvider(channelProvider);
|
||||
String providerName = channelProvider->getProviderName();
|
||||
ctx->setChannelProviderName(providerName);
|
||||
ctx->initialize(getChannelAccess());
|
||||
ctx->printInfo();
|
||||
ctx->run(0);
|
||||
ctx->destroy();
|
||||
event.signal();
|
||||
}
|
||||
|
||||
|
||||
ChannelProviderLocalPtr getChannelProviderLocal()
|
||||
{
|
||||
static ChannelProviderLocalPtr channelProviderLocal;
|
||||
@@ -108,7 +62,7 @@ ChannelProviderLocalPtr getChannelProviderLocal()
|
||||
if(channelProviderLocal.get()==NULL) {
|
||||
channelProviderLocal = ChannelProviderLocalPtr(
|
||||
new ChannelProviderLocal());
|
||||
LocalChannelCTX::create(channelProviderLocal);
|
||||
LocalChannelProviderFactory::create(channelProviderLocal);
|
||||
}
|
||||
return channelProviderLocal;
|
||||
}
|
||||
|
||||
@@ -14,11 +14,8 @@
|
||||
#include <stdexcept>
|
||||
#include <memory>
|
||||
|
||||
#include <pv/pvType.h>
|
||||
#include <pv/pvIntrospect.h>
|
||||
#include <pv/pvData.h>
|
||||
|
||||
#include <pv/pvDatabase.h>
|
||||
#include <pv/pvAccess.h>
|
||||
|
||||
namespace epics { namespace pvDatabase {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user