// ********************************************************************** // // Copyright (c) 2003-2017 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_COLLOCATED_REQUEST_HANDLER_H #define ICE_COLLOCATED_REQUEST_HANDLER_H #include #include #include #include #include #include #include #include namespace Ice { class ObjectAdapterI; ICE_DEFINE_PTR(ObjectAdapterIPtr, ObjectAdapterI); } namespace IceInternal { class OutgoingAsyncBase; class OutgoingAsync; class CollocatedRequestHandler : public RequestHandler, public ResponseHandler, private IceUtil::Monitor { public: CollocatedRequestHandler(const ReferencePtr&, const Ice::ObjectAdapterPtr&); virtual ~CollocatedRequestHandler(); virtual RequestHandlerPtr update(const RequestHandlerPtr&, const RequestHandlerPtr&); virtual AsyncStatus sendAsyncRequest(const ProxyOutgoingAsyncBasePtr&); virtual void asyncRequestCanceled(const OutgoingAsyncBasePtr&, const Ice::LocalException&); virtual void sendResponse(Ice::Int, Ice::OutputStream*, Ice::Byte, bool); virtual void sendNoResponse(); virtual bool systemException(Ice::Int, const Ice::SystemException&, bool); virtual void invokeException(Ice::Int, const Ice::LocalException&, int, bool); const ReferencePtr& getReference() const { return _reference; } // Inlined for performances. virtual Ice::ConnectionIPtr getConnection(); virtual Ice::ConnectionIPtr waitForConnection(); AsyncStatus invokeAsyncRequest(OutgoingAsyncBase*, int, bool); bool sentAsync(OutgoingAsyncBase*); void invokeAll(Ice::OutputStream*, Ice::Int, Ice::Int); #ifdef ICE_CPP11_MAPPING std::shared_ptr shared_from_this() { return std::static_pointer_cast(ResponseHandler::shared_from_this()); } #endif private: void handleException(Ice::Int, const Ice::Exception&, bool); const Ice::ObjectAdapterIPtr _adapter; const bool _dispatcher; const Ice::LoggerPtr _logger; const TraceLevelsPtr _traceLevels; int _requestId; std::map _sendAsyncRequests; std::map _asyncRequests; }; ICE_DEFINE_PTR(CollocatedRequestHandlerPtr, CollocatedRequestHandler); } #endif