completed merge
This commit is contained in:
@@ -36,7 +36,7 @@ ServerContextImpl::ServerContextImpl():
|
||||
_beaconEmitter(),
|
||||
_acceptor(),
|
||||
_transportRegistry(),
|
||||
_channelAccess(),
|
||||
_channelProviderRegistry(),
|
||||
_channelProviderNames(PVACCESS_DEFAULT_PROVIDER),
|
||||
_channelProviders(),
|
||||
_beaconServerStatusProvider()
|
||||
@@ -46,6 +46,7 @@ ServerContextImpl::ServerContextImpl():
|
||||
epicsSignalInstallSigAlarmIgnore ();
|
||||
epicsSignalInstallSigPipeIgnore ();
|
||||
|
||||
generateGUID();
|
||||
initializeLogger();
|
||||
loadConfiguration();
|
||||
}
|
||||
@@ -61,14 +62,30 @@ ServerContextImpl::~ServerContextImpl()
|
||||
dispose();
|
||||
}
|
||||
|
||||
const GUID& ServerContextImpl::getGUID()
|
||||
{
|
||||
return _guid;
|
||||
}
|
||||
|
||||
const Version& ServerContextImpl::getVersion()
|
||||
{
|
||||
return ServerContextImpl::VERSION;
|
||||
}
|
||||
|
||||
void ServerContextImpl::generateGUID()
|
||||
{
|
||||
// TODO use UUID
|
||||
epics::pvData::TimeStamp startupTime;
|
||||
startupTime.getCurrent();
|
||||
|
||||
ByteBuffer buffer(_guid.value, sizeof(_guid.value));
|
||||
buffer.putLong(startupTime.getSecondsPastEpoch());
|
||||
buffer.putInt(startupTime.getNanoSeconds());
|
||||
}
|
||||
|
||||
void ServerContextImpl::initializeLogger()
|
||||
{
|
||||
//createFileLogger("serverContextImpl.log");
|
||||
//createFileLogger("serverContextImpl.log");
|
||||
}
|
||||
|
||||
struct noop_deleter
|
||||
@@ -98,6 +115,11 @@ void ServerContextImpl::loadConfiguration()
|
||||
{
|
||||
Configuration::shared_pointer config = getConfiguration();
|
||||
|
||||
// TODO for now just a simple switch
|
||||
int32 debugLevel = config->getPropertyAsInteger(PVACCESS_DEBUG, 0);
|
||||
if (debugLevel > 0)
|
||||
SET_LOG_LEVEL(logLevelDebug);
|
||||
|
||||
_beaconAddressList = config->getPropertyAsString("EPICS_PVA_ADDR_LIST", _beaconAddressList);
|
||||
_beaconAddressList = config->getPropertyAsString("EPICS_PVAS_BEACON_ADDR_LIST", _beaconAddressList);
|
||||
|
||||
@@ -126,12 +148,12 @@ bool ServerContextImpl::isChannelProviderNamePreconfigured()
|
||||
return config->hasProperty("EPICS_PVA_PROVIDER_NAMES") || config->hasProperty("EPICS_PVAS_PROVIDER_NAMES");
|
||||
}
|
||||
|
||||
void ServerContextImpl::initialize(ChannelAccess::shared_pointer const & channelAccess)
|
||||
void ServerContextImpl::initialize(ChannelProviderRegistry::shared_pointer const & channelProviderRegistry)
|
||||
{
|
||||
Lock guard(_mutex);
|
||||
if (channelAccess == NULL)
|
||||
if (channelProviderRegistry == NULL)
|
||||
{
|
||||
THROW_BASE_EXCEPTION("non null channelAccess expected");
|
||||
THROW_BASE_EXCEPTION("non null channelProviderRegistry expected");
|
||||
}
|
||||
|
||||
if (_state == DESTROYED)
|
||||
@@ -143,7 +165,7 @@ void ServerContextImpl::initialize(ChannelAccess::shared_pointer const & channel
|
||||
THROW_BASE_EXCEPTION("Context already initialized.");
|
||||
}
|
||||
|
||||
_channelAccess = channelAccess;
|
||||
_channelProviderRegistry = channelProviderRegistry;
|
||||
|
||||
|
||||
// user all providers
|
||||
@@ -151,10 +173,10 @@ void ServerContextImpl::initialize(ChannelAccess::shared_pointer const & channel
|
||||
{
|
||||
_channelProviderNames.resize(0); // VxWorks 5.5 omits clear()
|
||||
|
||||
std::auto_ptr<ChannelAccess::stringVector_t> names = _channelAccess->getProviderNames();
|
||||
for (ChannelAccess::stringVector_t::iterator iter = names->begin(); iter != names->end(); iter++)
|
||||
std::auto_ptr<ChannelProviderRegistry::stringVector_t> names = _channelProviderRegistry->getProviderNames();
|
||||
for (ChannelProviderRegistry::stringVector_t::iterator iter = names->begin(); iter != names->end(); iter++)
|
||||
{
|
||||
ChannelProvider::shared_pointer channelProvider = _channelAccess->getProvider(*iter);
|
||||
ChannelProvider::shared_pointer channelProvider = _channelProviderRegistry->getProvider(*iter);
|
||||
if (channelProvider)
|
||||
{
|
||||
_channelProviders.push_back(channelProvider);
|
||||
@@ -173,13 +195,13 @@ void ServerContextImpl::initialize(ChannelAccess::shared_pointer const & channel
|
||||
std::string providerName;
|
||||
while (std::getline(ss, providerName, ' '))
|
||||
{
|
||||
ChannelProvider::shared_pointer channelProvider = _channelAccess->getProvider(providerName);
|
||||
ChannelProvider::shared_pointer channelProvider = _channelProviderRegistry->getProvider(providerName);
|
||||
if (channelProvider)
|
||||
_channelProviders.push_back(channelProvider);
|
||||
}
|
||||
}
|
||||
|
||||
//_channelProvider = _channelAccess->getProvider(_channelProviderNames);
|
||||
//_channelProvider = _channelProviderRegistry->getProvider(_channelProviderNames);
|
||||
if (_channelProviders.size() == 0)
|
||||
{
|
||||
std::string msg = "None of the specified channel providers are available: " + _channelProviderNames + ".";
|
||||
@@ -212,7 +234,8 @@ void ServerContextImpl::internalInitialize()
|
||||
// setup broadcast UDP transport
|
||||
initializeBroadcastTransport();
|
||||
|
||||
_beaconEmitter.reset(new BeaconEmitter(_broadcastTransport, thisServerContext));
|
||||
// TODO introduce a constant
|
||||
_beaconEmitter.reset(new BeaconEmitter("tcp", _broadcastTransport, thisServerContext));
|
||||
}
|
||||
|
||||
void ServerContextImpl::initializeBroadcastTransport()
|
||||
@@ -243,7 +266,7 @@ void ServerContextImpl::initializeBroadcastTransport()
|
||||
nullTransportClient, responseHandler,
|
||||
listenLocalAddress, PVA_PROTOCOL_REVISION,
|
||||
PVA_DEFAULT_PRIORITY));
|
||||
_broadcastTransport->setBroadcastAddresses(broadcastAddresses.get());
|
||||
_broadcastTransport->setSendAddresses(broadcastAddresses.get());
|
||||
|
||||
// set ignore address list
|
||||
if (!_ignoreAddressList.empty())
|
||||
@@ -268,7 +291,7 @@ void ServerContextImpl::initializeBroadcastTransport()
|
||||
auto_ptr<InetAddrVector> list(getSocketAddressList(_beaconAddressList, _broadcastPort, appendList));
|
||||
if (list.get() != NULL && list->size() > 0)
|
||||
{
|
||||
_broadcastTransport->setBroadcastAddresses(list.get());
|
||||
_broadcastTransport->setSendAddresses(list.get());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -545,9 +568,9 @@ BlockingUDPTransport::shared_pointer ServerContextImpl::getBroadcastTransport()
|
||||
return _broadcastTransport;
|
||||
}
|
||||
|
||||
ChannelAccess::shared_pointer ServerContextImpl::getChannelAccess()
|
||||
ChannelProviderRegistry::shared_pointer ServerContextImpl::getChannelProviderRegistry()
|
||||
{
|
||||
return _channelAccess;
|
||||
return _channelProviderRegistry;
|
||||
}
|
||||
|
||||
std::string ServerContextImpl::getChannelProviderName()
|
||||
@@ -621,8 +644,8 @@ ServerContext::shared_pointer startPVAServer(String const & providerNames, int t
|
||||
if (!ctx->isChannelProviderNamePreconfigured())
|
||||
ctx->setChannelProviderName(providerNames);
|
||||
|
||||
ChannelAccess::shared_pointer channelAccess = getChannelAccess();
|
||||
ctx->initialize(channelAccess);
|
||||
ChannelProviderRegistry::shared_pointer channelProviderRegistry = getChannelProviderRegistry();
|
||||
ctx->initialize(channelProviderRegistry);
|
||||
|
||||
if (printInfo)
|
||||
ctx->printInfo();
|
||||
|
||||
Reference in New Issue
Block a user