diff options
author | Jose <jose@zeroc.com> | 2015-12-01 17:36:19 +0100 |
---|---|---|
committer | Jose <jose@zeroc.com> | 2015-12-01 17:36:19 +0100 |
commit | 2029ff368e49fae489b8ec8fc12f7d126b182dfb (patch) | |
tree | 6075d652b7851831c39e6f22004d8720864f1a60 /cpp/src/Ice/ConnectionFactory.cpp | |
parent | The default LMDB map size for IceGrid and IceStorm is now 10MB (Windows) (diff) | |
download | ice-2029ff368e49fae489b8ec8fc12f7d126b182dfb.tar.bz2 ice-2029ff368e49fae489b8ec8fc12f7d126b182dfb.tar.xz ice-2029ff368e49fae489b8ec8fc12f7d126b182dfb.zip |
C++11 mapping initial commit
Diffstat (limited to 'cpp/src/Ice/ConnectionFactory.cpp')
-rw-r--r-- | cpp/src/Ice/ConnectionFactory.cpp | 114 |
1 files changed, 100 insertions, 14 deletions
diff --git a/cpp/src/Ice/ConnectionFactory.cpp b/cpp/src/Ice/ConnectionFactory.cpp index 3dbef2a5a6d..6ce8b78d45e 100644 --- a/cpp/src/Ice/ConnectionFactory.cpp +++ b/cpp/src/Ice/ConnectionFactory.cpp @@ -44,7 +44,10 @@ using namespace Ice::Instrumentation; using namespace IceInternal; IceUtil::Shared* IceInternal::upCast(OutgoingConnectionFactory* p) { return p; } + +#ifndef ICE_CPP11_MAPPING IceUtil::Shared* IceInternal::upCast(IncomingConnectionFactory* p) { return p; } +#endif namespace { @@ -57,6 +60,38 @@ struct RandomNumberGenerator : public std::unary_function<ptrdiff_t, ptrdiff_t> } }; +#ifdef ICE_CPP11_MAPPING +template <typename Map> void +remove(Map& m, const typename Map::key_type& k, const typename Map::mapped_type& v) +{ + auto pr = m.equal_range(k); + assert(pr.first != pr.second); + for(auto q = pr.first; q != pr.second; ++q) + { + if(q->second.get() == v.get()) + { + m.erase(q); + return; + } + } + assert(false); // Nothing was removed which is an error. +} + +template<typename Map> typename Map::mapped_type +find(const Map& m, const typename Map::key_type& k, function<bool (const typename Map::mapped_type&)> predicate) +{ + auto pr = m.equal_range(k); + for(auto q = pr.first; q != pr.second; ++q) + { + if(predicate(q->second)) + { + return q->second; + } + } + return nullptr; +} + +#else template <typename K, typename V> void remove(multimap<K, V>& m, K k, V v) { @@ -89,6 +124,7 @@ find(const multimap<K,::IceInternal::Handle<V> >& m, } return IceInternal::Handle<V>(); } +#endif } @@ -198,7 +234,11 @@ IceInternal::OutgoingConnectionFactory::create(const vector<EndpointIPtr>& endpt return; } +#ifdef ICE_CPP11_MAPPING + auto cb = make_shared<ConnectCallback>(_instance, this, endpoints, hasMore, callback, selType); +#else ConnectCallbackPtr cb = new ConnectCallback(_instance, this, endpoints, hasMore, callback, selType); +#endif cb->getConnectors(); } @@ -545,8 +585,8 @@ IceInternal::OutgoingConnectionFactory::createConnection(const TransceiverPtr& t throw Ice::CommunicatorDestroyedException(__FILE__, __LINE__); } - connection = new ConnectionI(_communicator, _instance, _monitor, transceiver, ci.connector, - ci.endpoint->compress(false), 0); + connection = ConnectionI::create(_communicator, _instance, _monitor, transceiver, ci.connector, + ci.endpoint->compress(false), ICE_NULLPTR); } catch(const Ice::LocalException&) { @@ -827,7 +867,12 @@ IceInternal::OutgoingConnectionFactory::ConnectCallback::connectionStartComplete } connection->activate(); +#ifdef ICE_CPP11_MAPPING + _factory->finishGetConnection(_connectors, *_iter, connection, + dynamic_pointer_cast<ConnectCallback>(shared_from_this())); +#else _factory->finishGetConnection(_connectors, *_iter, connection, this); +#endif } void @@ -845,7 +890,11 @@ IceInternal::OutgoingConnectionFactory::ConnectCallback::connectionStartFailed(c _factory->handleConnectionException(ex, _hasMore || _iter != _connectors.end() - 1); if(dynamic_cast<const Ice::CommunicatorDestroyedException*>(&ex)) // No need to continue. { +#ifdef ICE_CPP11_MAPPING + _factory->finishGetConnection(_connectors, ex, dynamic_pointer_cast<ConnectCallback>(shared_from_this())); +#else _factory->finishGetConnection(_connectors, ex, this); +#endif } else if(++_iter != _connectors.end()) // Try the next connector. { @@ -853,7 +902,11 @@ IceInternal::OutgoingConnectionFactory::ConnectCallback::connectionStartFailed(c } else { +#ifdef ICE_CPP11_MAPPING + _factory->finishGetConnection(_connectors, ex, dynamic_pointer_cast<ConnectCallback>(shared_from_this())); +#else _factory->finishGetConnection(_connectors, ex, this); +#endif } } @@ -936,7 +989,8 @@ IceInternal::OutgoingConnectionFactory::ConnectCallback::nextEndpoint() try { assert(_endpointsIter != _endpoints.end()); - (*_endpointsIter)->connectors_async(_selType, this); + (*_endpointsIter)->connectors_async(_selType, ICE_SHARED_FROM_THIS); + } catch(const Ice::LocalException& ex) { @@ -954,7 +1008,14 @@ IceInternal::OutgoingConnectionFactory::ConnectCallback::getConnection() // connection. // bool compress; +#ifdef ICE_CPP11_MAPPING + Ice::ConnectionIPtr connection = _factory->getConnection( + _connectors, + dynamic_pointer_cast<ConnectCallback>(shared_from_this()), + compress); +#else Ice::ConnectionIPtr connection = _factory->getConnection(_connectors, this, compress); +#endif if(!connection) { // @@ -982,7 +1043,6 @@ IceInternal::OutgoingConnectionFactory::ConnectCallback::nextConnector() Ice::ConnectionIPtr connection; try { - const CommunicatorObserverPtr& obsv = _factory->_instance->initializationData().observer; if(obsv) { @@ -1002,7 +1062,7 @@ IceInternal::OutgoingConnectionFactory::ConnectCallback::nextConnector() << _iter->connector->toString(); } connection = _factory->createConnection(_iter->connector->connect(), *_iter); - connection->start(this); + connection->start(ICE_SHARED_FROM_THIS); } catch(const Ice::LocalException& ex) { @@ -1062,7 +1122,11 @@ IceInternal::OutgoingConnectionFactory::ConnectCallback::removeConnectors(const void IceInternal::OutgoingConnectionFactory::ConnectCallback::removeFromPending() { +#ifdef ICE_CPP11_MAPPING + _factory->removeFromPending(dynamic_pointer_cast<ConnectCallback>(shared_from_this()), _connectors); +#else _factory->removeFromPending(this, _connectors); +#endif } bool @@ -1345,8 +1409,8 @@ IceInternal::IncomingConnectionFactory::message(ThreadPoolCurrent& current) try { - connection = new ConnectionI(_adapter->getCommunicator(), _instance, _monitor, transceiver, 0, _endpoint, - _adapter); + connection = ConnectionI::create(_adapter->getCommunicator(), _instance, _monitor, transceiver, 0, + _endpoint, _adapter); } catch(const LocalException& ex) { @@ -1371,7 +1435,11 @@ IceInternal::IncomingConnectionFactory::message(ThreadPoolCurrent& current) } assert(connection); +#ifdef ICE_CPP11_MAPPING + connection->start(dynamic_pointer_cast<IncomingConnectionFactory>(shared_from_this())); +#else connection->start(this); +#endif } void @@ -1545,7 +1613,6 @@ IceInternal::IncomingConnectionFactory::initialize() { _endpoint = _endpoint->compress(_instance->defaultsAndOverrides()->overrideCompressValue); } - try { const_cast<TransceiverPtr&>(_transceiver) = _endpoint->transceiver(); @@ -1557,9 +1624,8 @@ IceInternal::IncomingConnectionFactory::initialize() out << "attempting to bind to " << _endpoint->protocol() << " socket\n" << _transceiver->toString(); } const_cast<EndpointIPtr&>(_endpoint) = _transceiver->bind(); - - ConnectionIPtr connection = new ConnectionI(_adapter->getCommunicator(), _instance, 0, _transceiver, 0, - _endpoint, _adapter); + ConnectionIPtr connection(ConnectionI::create(_adapter->getCommunicator(), _instance, 0, _transceiver, 0, + _endpoint, _adapter)); connection->start(0); _connections.insert(connection); } @@ -1627,7 +1693,12 @@ IceInternal::IncomingConnectionFactory::setState(State state) Trace out(_instance->initializationData().logger, _instance->traceLevels()->networkCat); out << "accepting " << _endpoint->protocol() << " connections at " << _acceptor->toString(); } +#ifdef ICE_CPP11_MAPPING + _adapter->getThreadPool()->_register(dynamic_pointer_cast<EventHandler>(shared_from_this()), + SocketOperationRead); +#else _adapter->getThreadPool()->_register(this, SocketOperationRead); +#endif } for_each(_connections.begin(), _connections.end(), Ice::voidMemFun(&ConnectionI::activate)); break; @@ -1646,7 +1717,12 @@ IceInternal::IncomingConnectionFactory::setState(State state) Trace out(_instance->initializationData().logger, _instance->traceLevels()->networkCat); out << "holding " << _endpoint->protocol() << " connections at " << _acceptor->toString(); } +#ifdef ICE_CPP11_MAPPING + _adapter->getThreadPool()->unregister(dynamic_pointer_cast<EventHandler>(shared_from_this()), + SocketOperationRead); +#else _adapter->getThreadPool()->unregister(this, SocketOperationRead); +#endif } for_each(_connections.begin(), _connections.end(), Ice::voidMemFun(&ConnectionI::hold)); break; @@ -1663,7 +1739,11 @@ IceInternal::IncomingConnectionFactory::setState(State state) // the finish() call. Not all selector implementations do support this // however. // +#ifdef ICE_CPP11_MAPPING + if(_adapter->getThreadPool()->finish(dynamic_pointer_cast<EventHandler>(shared_from_this()), true)) +#else if(_adapter->getThreadPool()->finish(this, true)) +#endif { closeAcceptor(); } @@ -1696,7 +1776,6 @@ IceInternal::IncomingConnectionFactory::createAcceptor() { _acceptor = _endpoint->acceptor(_adapter->getName()); assert(_acceptor); - if(_instance->traceLevels()->network >= 2) { Trace out(_instance->initializationData().logger, _instance->traceLevels()->networkCat); @@ -1704,18 +1783,25 @@ IceInternal::IncomingConnectionFactory::createAcceptor() } _endpoint = _acceptor->listen(); - if(_instance->traceLevels()->network >= 1) { Trace out(_instance->initializationData().logger, _instance->traceLevels()->networkCat); out << "listening for " << _endpoint->protocol() << " connections\n" << _acceptor->toDetailedString(); } +#ifdef ICE_CPP11_MAPPING + _adapter->getThreadPool()->initialize(dynamic_pointer_cast<EventHandler>(shared_from_this())); +#else _adapter->getThreadPool()->initialize(this); - +#endif if(_state == StateActive) { +#ifdef ICE_CPP11_MAPPING + _adapter->getThreadPool()->_register(dynamic_pointer_cast<EventHandler>(shared_from_this()), + SocketOperationRead); +#else _adapter->getThreadPool()->_register(this, SocketOperationRead); +#endif } } catch(const Ice::Exception&) |