33 #include <boost/thread.hpp>
39 #ifdef RSB_WITH_SOCKET_TRANSPORT
65 &inprocess::InPushConnector::create,
69 #ifdef RSB_WITH_SOCKET_TRANSPORT
72 options.insert(
"host");
73 options.insert(
"port");
74 options.insert(
"server");
75 options.insert(
"tcpnodelay");
78 &socket::InPushConnector::create,
92 &inprocess::InPullConnector::create,
96 #ifdef RSB_WITH_SOCKET_TRANSPORT
99 options.insert(
"host");
100 options.insert(
"port");
101 options.insert(
"server");
102 options.insert(
"tcpnodelay");
105 &socket::InPullConnector::create,
118 &inprocess::OutConnector::create,
122 #ifdef RSB_WITH_SOCKET_TRANSPORT
125 options.insert(
"host");
126 options.insert(
"port");
127 options.insert(
"server");
128 options.insert(
"tcpnodelay");
131 &socket::OutConnector::create,
143 struct intersection {
144 set<string> operator()(
const set<string>& left,
145 const set<string>& right)
const {
147 set_intersection(left.begin(), left.end(), right.begin(), right.end(),
148 inserter(result, result.begin()));
153 if (requiredDirections == 0) {
154 throw invalid_argument(
"At least one required direction has to be specified.");
158 set<string> inPullTransports;
161 for (set<InPullFactory::ConnectorInfo>::const_iterator it
162 = infos.begin(); it != infos.end(); ++it) {
163 inPullTransports.insert(it->getName());
164 result.insert(it->getName());
167 set<string> inPushTransports;
170 for (set<InPushFactory::ConnectorInfo>::const_iterator it
171 = infos.begin(); it != infos.end(); ++it) {
172 inPushTransports.insert(it->getName());
173 result.insert(it->getName());
176 set<string> outTransports;
179 for (set<OutFactory::ConnectorInfo>::const_iterator it
180 = infos.begin(); it != infos.end(); ++it) {
181 outTransports.insert(it->getName());
182 result.insert(it->getName());
187 result = intersection()(result, inPullTransports);
190 result = intersection()(result, inPushTransports);
193 result = intersection()(result, outTransports);
200 unsigned int requiredDirections) {
201 if (requiredDirections == 0) {
202 throw invalid_argument(
"At least one required direction has to be specified.");
208 }
catch (
const rsc::runtime::NoSuchObject&) {
215 }
catch (
const rsc::runtime::NoSuchObject&) {
222 }
catch (
const rsc::runtime::NoSuchObject&) {
231 bool validResult =
false;
238 }
catch (
const rsc::runtime::NoSuchObject&) {
244 if (validResult && (remote != info.
isRemote())) {
245 throw std::logic_error(
"connectors of one transport disagree about remoteness.");
249 }
catch (
const rsc::runtime::NoSuchObject&) {
255 if (validResult && (remote != info.
isRemote())) {
256 throw std::logic_error(
"connectors of one transport disagree about remoteness.");
260 }
catch (
const rsc::runtime::NoSuchObject&) {
263 throw rsc::runtime::NoSuchObject(transportName);
Instances of this class describe capabilities and properties of connector implementations.
bool isRemote(const string &transportName)
Returns true if transportName names a remote transport.
void registerConnector(const std::string &name, const CreateFunction &constructor, const std::set< std::string > &schemas=std::set< std::string >(), bool remote=true, const std::set< std::string > &options=std::set< std::string >())
For the connector implementation named name, register the construct function constructor, supported schemas schemas and recognized configuration options options.
ConnectorInfo getConnectorInfo(const std::string &name) const
Return information regarding the connector implementation named name.
std::set< ConnectorInfo > getConnectorInfos() const
static boost::mutex registrationMutex
set< string > getAvailableTransports(unsigned int requiredDirections)
Returns the names of all available transports which support requiredDirections.
void registerDefaultTransports()
bool isAvailable(const string &transportName, unsigned int requiredDirections)
Returns true if transportName names a transport which is available and supports requiredDirections ...
InPullFactory & getInPullFactory()
bool isRemote() const
Return "remoteness" of the implementation.
InPushFactory & getInPushFactory()
OutFactory & getOutFactory()
Objects of this class are specialized factories that construct Connector objects and provide introspe...