// ********************************************************************** // // Copyright (c) 2002 // Mutable Realms, Inc. // Huntsville, AL, USA // // All Rights Reserved // // ********************************************************************** #ifndef ICE_CONNECTION_FACTORY_H #define ICE_CONNECTION_FACTORY_H #include #include #include #include #include #include #include #include #include #include #include namespace Ice { class LocalException; class ObjectAdapterI; } namespace IceInternal { class OutgoingConnectionFactory : public ::IceUtil::Shared, public ::IceUtil::Mutex { public: ConnectionPtr create(const std::vector&); void setRouter(const ::Ice::RouterPrx&); void removeAdapter(const ::Ice::ObjectAdapterPtr&); private: OutgoingConnectionFactory(const InstancePtr&); virtual ~OutgoingConnectionFactory(); void destroy(); friend class Instance; InstancePtr _instance; std::map _connections; }; class IncomingConnectionFactory : public EventHandler, public ::IceUtil::Mutex { public: void hold(); void activate(); EndpointPtr endpoint() const; bool equivalent(const EndpointPtr&) const; std::list connections() const; // // Operations from EventHandler // virtual bool readable() const; virtual void read(BasicStream&); virtual void message(BasicStream&, const ThreadPoolPtr&); virtual void finished(const ThreadPoolPtr&); virtual void exception(const ::Ice::LocalException&); virtual std::string toString() const; private: IncomingConnectionFactory(const InstancePtr&, const EndpointPtr&, const ::Ice::ObjectAdapterPtr&); virtual ~IncomingConnectionFactory(); void destroy(); friend class ::Ice::ObjectAdapterI; enum State { StateActive, StateHolding, StateClosed }; void setState(State); void registerWithPool(); void unregisterWithPool(); const EndpointPtr _endpoint; ::Ice::ObjectAdapterPtr _adapter; // Cannot be const, because it must be set to zero to break cyclic dependency. const AcceptorPtr _acceptor; const TransceiverPtr _transceiver; const ThreadPoolPtr _serverThreadPool; const bool _warn; std::list _connections; State _state; bool _registeredWithPool; }; } #endif