jetbrains/rd-host/Server.cpp (36 lines of code) (raw):
#include "Server.h"
#include "wire/SocketWire.h"
#include "RenderDocModel/RenderDocModel.Generated.h"
/**
* \brief RenderDoc Host
*/
namespace jetbrains::renderdoc::rdhost
{
Server::Server() : service(std::make_unique<RenderDocService>())
{
wire = std::make_shared<rd::SocketWire::Server>(socket_lifetime, &scheduler, 0, "RenderDocServer");
protocol = std::make_unique<rd::Protocol>(rd::Identities::SERVER, &scheduler, wire, socket_lifetime);
}
int Server::run()
{
model::RenderDocModel model;
scheduler.queue([this, &model] { set_up_model(model); });
{
std::unique_lock lock(terminationMutex);
while (!shouldTerminate)
terminationCondition.wait(lock);
}
terminate();
return 0;
}
void Server::request_termination()
{
std::unique_lock lock(terminationMutex);
shouldTerminate = true;
terminationCondition.notify_one();
}
void Server::set_up_model(model::RenderDocModel& model)
{
model.connect(model_lifetime, protocol.get());
model.get_openCaptureFile().set([this](const auto &req) {
return this->service->open_capture_file(req);
});
}
}