#pragma once #include "SessionImpl.hpp" #include "ddkit/utils/container.hpp" #include "ddkit/actors/SessionImpl.hpp" #include #include #include namespace ddkit { namespace actors { class IActor; typedef std::shared_ptr ActorPtr; class SessionImpl; typedef std::shared_ptr SessionImplPtr; typedef std::weak_ptr SessionImplWeakPtr; class IActor : public std::enable_shared_from_this { public: virtual ~IActor(); SessionImplPtr sessionImpl(); bool isMonitor(); virtual void shutdown() = 0; virtual bool isValid() = 0; protected: IActor(const SessionImplPtr& sessionImpl); IActor() = delete; IActor(IActor&) = delete; IActor(IActor&&) = delete; // todo nth: for which members exactly the syncing is needed? for now: try for all std::recursive_mutex m_mutex; std::condition_variable_any m_condition; SessionImplWeakPtr m_sessionImplWeak; }; } // namespace actors } // namespace ddkit