Replace interface+impls with a single concrete container which wraps a map. This breaks code which was sub-classing. However, no external code can be found which does this. A build() method is used instead of simple ctor so that the ctor is private, which will cause theoretical external sub-class code to fail to compile. Code using getChannelProviderRegistry() and existing methods will behave as before. Add ChannelProviderRegistry::getFactory() for pass through to ChannelProviderFactory (Registery is just a proxy()...) Remove existing get/create virtual method in favor of getFactory. Update both existing implementations. Add SimpleChannelProviderFactory to cut down on boilerplace for the common case. Add method to clear mapping and release any saved sharedInstance.
85 lines
2.1 KiB
C++
85 lines
2.1 KiB
C++
/*
|
|
* testServerContext.cpp
|
|
*/
|
|
|
|
#include <pv/serverContext.h>
|
|
#include <epicsExit.h>
|
|
|
|
using namespace epics::pvAccess;
|
|
using namespace epics::pvData;
|
|
using namespace std;
|
|
|
|
class TestChannelProvider : public ChannelProvider
|
|
{
|
|
public:
|
|
|
|
std::string getProviderName() {
|
|
return "local";
|
|
};
|
|
|
|
TestChannelProvider(const std::tr1::shared_ptr<Configuration>&) {}
|
|
|
|
ChannelFind::shared_pointer channelFind(std::string const & /*channelName*/,
|
|
ChannelFindRequester::shared_pointer const & channelFindRequester)
|
|
{
|
|
ChannelFind::shared_pointer nullCF;
|
|
channelFindRequester->channelFindResult(Status::Ok, nullCF, false);
|
|
return nullCF;
|
|
}
|
|
|
|
ChannelFind::shared_pointer channelList(ChannelListRequester::shared_pointer const & channelListRequester)
|
|
{
|
|
ChannelFind::shared_pointer nullCF;
|
|
PVStringArray::const_svector none;
|
|
channelListRequester->channelListResult(Status::Ok, nullCF, none, false);
|
|
return nullCF;
|
|
}
|
|
|
|
Channel::shared_pointer createChannel(
|
|
std::string const & channelName,
|
|
ChannelRequester::shared_pointer const & channelRequester,
|
|
short priority = PRIORITY_DEFAULT)
|
|
{
|
|
return createChannel(channelName, channelRequester, priority, "");
|
|
}
|
|
|
|
Channel::shared_pointer createChannel(
|
|
std::string const & /*channelName*/,
|
|
ChannelRequester::shared_pointer const & channelRequester,
|
|
short /*priority*/, std::string const & /*address*/)
|
|
{
|
|
Channel::shared_pointer nullC;
|
|
channelRequester->channelCreated(Status::Ok, nullC);
|
|
return nullC;
|
|
}
|
|
|
|
void destroy()
|
|
{
|
|
}
|
|
};
|
|
|
|
void testServerContext()
|
|
{
|
|
ServerContextImpl::shared_pointer ctx = ServerContextImpl::create();
|
|
|
|
ChannelProviderRegistry::shared_pointer ca(ChannelProviderRegistry::build());
|
|
ca->add<TestChannelProvider>("local");
|
|
ctx->initialize(ca);
|
|
|
|
ctx->printInfo();
|
|
|
|
ctx->run(1);
|
|
|
|
ctx->destroy();
|
|
}
|
|
|
|
int main()
|
|
{
|
|
testServerContext();
|
|
|
|
cout << "Done" << endl;
|
|
|
|
//epicsExitCallAtExits();
|
|
return (0);
|
|
}
|