#ifndef JETBRAINS_RENDERDOC_PEER_BASE_H #define JETBRAINS_RENDERDOC_PEER_BASE_H #include "lifetime/LifetimeDefinition.h" #include "protocol/Protocol.h" #include "scheduler/SimpleScheduler.h" #include "wire/SocketWire.h" namespace jetbrains { namespace renderdoc { template class PeerBase { protected: using printer_t = std::vector; rd::SimpleScheduler scheduler{}; rd::LifetimeDefinition definition{false}; rd::Lifetime model_lifetime = definition.lifetime; rd::LifetimeDefinition socket_definition{false}; rd::Lifetime socket_lifetime = definition.lifetime; std::shared_ptr wire; std::unique_ptr protocol; public: PeerBase() = default; virtual ~PeerBase() = default; protected: virtual int run() = 0; void terminate() { socket_definition.terminate(); definition.terminate(); } }; } // namespace renderdoc } // namespace jetbrains #endif // JETBRAINS_RENDERDOC_PEER_BASE_H