51 lines
1.0 KiB
C++
51 lines
1.0 KiB
C++
#pragma once
|
|
|
|
#include "SessionImpl.hpp"
|
|
#include "ddkit/utils/container.hpp"
|
|
|
|
#include "ddkit/actors/SessionImpl.hpp"
|
|
|
|
#include <memory>
|
|
#include <mutex>
|
|
#include <condition_variable>
|
|
|
|
|
|
namespace ddkit {
|
|
namespace actors {
|
|
|
|
class IActor;
|
|
typedef std::shared_ptr<IActor> ActorPtr;
|
|
|
|
class SessionImpl;
|
|
typedef std::shared_ptr<SessionImpl> SessionImplPtr;
|
|
typedef std::weak_ptr<SessionImpl> SessionImplWeakPtr;
|
|
|
|
class IActor : public std::enable_shared_from_this<IActor> {
|
|
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
|