ContextLocal added
This commit is contained in:
@@ -88,12 +88,12 @@ ChannelProviderLocal::ChannelProviderLocal()
|
||||
|
||||
ChannelProviderLocal::~ChannelProviderLocal()
|
||||
{
|
||||
cout << "~ChannelProviderLocal()" << endl;
|
||||
// TODO should I call destroy() here
|
||||
destroy();
|
||||
}
|
||||
|
||||
void ChannelProviderLocal::destroy()
|
||||
{
|
||||
cout << "ChannelProviderLocal::destroy()" << endl;
|
||||
Lock xx(mutex);
|
||||
if(beingDestroyed) return;
|
||||
beingDestroyed = true;
|
||||
@@ -172,4 +172,47 @@ Channel::shared_pointer ChannelProviderLocal::createChannel(
|
||||
return Channel::shared_pointer();
|
||||
}
|
||||
|
||||
|
||||
ContextLocal::shared_pointer ContextLocal::create()
|
||||
{
|
||||
return ContextLocal::shared_pointer(new ContextLocal());
|
||||
}
|
||||
|
||||
void ContextLocal::start(bool _waitForExit)
|
||||
{
|
||||
m_context = startPVAServer(
|
||||
PVACCESS_ALL_PROVIDERS,
|
||||
0,
|
||||
true,
|
||||
true);
|
||||
|
||||
if (_waitForExit)
|
||||
waitForExit();
|
||||
}
|
||||
|
||||
void ContextLocal::waitForExit()
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
std::cout << "Type 'exit' to stop: ";
|
||||
std::string input;
|
||||
std::cin >> input;
|
||||
if (input == "exit")
|
||||
break;
|
||||
}
|
||||
|
||||
destroy();
|
||||
}
|
||||
|
||||
void ContextLocal::destroy()
|
||||
{
|
||||
if (m_context)
|
||||
m_context->destroy();
|
||||
}
|
||||
|
||||
ContextLocal::ContextLocal()
|
||||
{
|
||||
m_channelProvider = getChannelProviderLocal();
|
||||
}
|
||||
|
||||
}}
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include <pv/pvCopy.h>
|
||||
#include <pv/pvAccess.h>
|
||||
#include <pv/status.h>
|
||||
#include <pv/serverContext.h>
|
||||
|
||||
#ifdef channelProviderLocalEpicsExportSharedSymbols
|
||||
# define epicsExportSharedSymbols
|
||||
@@ -399,7 +400,44 @@ private:
|
||||
epics::pvData::Mutex mutex;
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief A pvAccess server context that provides
|
||||
* remote access to a local channel providers (i.e. pvDatabase records).
|
||||
*/
|
||||
class epicsShareClass ContextLocal
|
||||
{
|
||||
|
||||
public:
|
||||
POINTER_DEFINITIONS(ContextLocal);
|
||||
|
||||
static shared_pointer create();
|
||||
|
||||
/**
|
||||
* Start the context thread.
|
||||
* After this is called clients can connect to the server.
|
||||
* @param waitForExit In true then waitForExit() method is called after the server is started.
|
||||
*/
|
||||
void start(bool waitForExit = false);
|
||||
|
||||
/**
|
||||
* Waits for "exit" to be entered on standard input and calls destroy() before returning.
|
||||
*/
|
||||
void waitForExit();
|
||||
|
||||
/**
|
||||
* This destroys the context.
|
||||
* All clients will be disconnected.
|
||||
*/
|
||||
void destroy();
|
||||
|
||||
private:
|
||||
ContextLocal();
|
||||
|
||||
ChannelProviderLocalPtr m_channelProvider;
|
||||
epics::pvAccess::ServerContext::shared_pointer m_context;
|
||||
};
|
||||
|
||||
|
||||
}}
|
||||
#endif /* CHANNELPROVIDERLOCAL_H */
|
||||
|
||||
Reference in New Issue
Block a user