// ********************************************************************** // // Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved. // // This copy of Ice is licensed to you under the terms described in the // ICE_LICENSE file included in this distribution. // // ********************************************************************** #ifndef ICE_CONNECT_REQUEST_HANDLER_H #define ICE_CONNECT_REQUEST_HANDLER_H #include #include #include #include #include #include #include #include #include #include namespace IceInternal { class ConnectRequestHandler : public RequestHandler, public Reference::GetConnectionCallback, public RouterInfo::AddProxyCallback, public IceUtil::Monitor { public: ConnectRequestHandler(const ReferencePtr&, const Ice::ObjectPrx&); virtual ~ConnectRequestHandler(); virtual RequestHandlerPtr connect(const Ice::ObjectPrx&); virtual RequestHandlerPtr update(const RequestHandlerPtr&, const RequestHandlerPtr&); virtual void prepareBatchRequest(BasicStream*); virtual void finishBatchRequest(BasicStream*); virtual void abortBatchRequest(); virtual bool sendRequest(OutgoingBase*); virtual AsyncStatus sendAsyncRequest(const OutgoingAsyncBasePtr&); virtual void requestCanceled(OutgoingBase*, const Ice::LocalException&); virtual void asyncRequestCanceled(const OutgoingAsyncBasePtr&, const Ice::LocalException&); virtual Ice::ConnectionIPtr getConnection(); virtual Ice::ConnectionIPtr waitForConnection(); virtual void setConnection(const Ice::ConnectionIPtr&, bool); virtual void setException(const Ice::LocalException&); virtual void addedProxy(); private: bool initialized(); void flushRequests(); struct Request { Request() : out(0), os(0) { } OutgoingBase* out; OutgoingAsyncBasePtr outAsync; BasicStream* os; }; bool _connect; Ice::ObjectPrx _proxy; std::set _proxies; Ice::ConnectionIPtr _connection; bool _compress; IceUtil::UniquePtr _exception; bool _initialized; bool _flushing; std::deque _requests; bool _batchRequestInProgress; BasicStream _batchStream; RequestHandlerPtr _connectionRequestHandler; }; typedef IceUtil::Handle ConnectRequestHandlerPtr; } #endif