// ********************************************************************** // // Copyright (c) 2003-2007 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 namespace IceInternal { class ConnectRequestHandler : public RequestHandler, public Reference::GetConnectionCallback, public RouterInfo::AddProxyCallback, public IceUtil::Monitor { public: ConnectRequestHandler(const ReferencePtr&, const Ice::ObjectPrx&, const Handle< ::IceDelegate::Ice::Object>&); virtual ~ConnectRequestHandler(); RequestHandlerPtr connect(); virtual void prepareBatchRequest(BasicStream*); virtual void finishBatchRequest(BasicStream*); virtual void abortBatchRequest(); virtual Ice::ConnectionI* sendRequest(Outgoing*); virtual void sendAsyncRequest(const OutgoingAsyncPtr&); virtual bool flushBatchRequests(BatchOutgoing*); virtual void flushAsyncBatchRequests(const BatchOutgoingAsyncPtr&); virtual Ice::ConnectionIPtr getConnection(bool); virtual void setConnection(const Ice::ConnectionIPtr&, bool); virtual void setException(const Ice::LocalException&); virtual void addedProxy(); void flushRequestsWithException(const Ice::LocalException&); void flushRequestsWithException(const LocalExceptionWrapper&); private: bool initialized(); void flushRequests(); struct Request { OutgoingAsyncPtr out; BatchOutgoingAsyncPtr batchOut; BasicStream* os; }; Ice::ObjectPrx _proxy; Handle< ::IceDelegate::Ice::Object> _delegate; const bool _batchAutoFlush; Ice::ConnectionIPtr _connection; bool _compress; std::auto_ptr _exception; bool _initialized; bool _flushing; std::deque _requests; bool _batchRequestInProgress; size_t _batchRequestsSize; BasicStream _batchStream; bool _updateRequestHandler; }; typedef IceUtil::Handle ConnectRequestHandlerPtr; } #endif