server-mode: Automate progress reporting

Wire up cmake::SetProgressUpdate to do progress reporting via the
cmake server.
This commit is contained in:
Tobias Hunger 2016-09-09 10:01:44 +02:00
parent 70b8ba9a0f
commit ca7799482c
3 changed files with 25 additions and 5 deletions

View File

@ -134,8 +134,13 @@ void cmServer::PopOne()
return;
}
this->WriteResponse(this->Protocol ? this->Protocol->Process(request)
: this->SetProtocolVersion(request));
if (this->Protocol) {
this->Protocol->CMakeInstance()->SetProgressCallback(
reportProgress, const_cast<cmServerRequest*>(&request));
this->WriteResponse(this->Protocol->Process(request));
} else {
this->WriteResponse(this->SetProtocolVersion(request));
}
}
void cmServer::handleData(const std::string& data)
@ -210,6 +215,17 @@ void cmServer::PrintHello() const
this->WriteJsonObject(hello);
}
void cmServer::reportProgress(const char* msg, float progress, void* data)
{
const cmServerRequest* request = static_cast<const cmServerRequest*>(data);
assert(request);
if (progress < 0.0 || progress > 1.0) {
request->ReportProgress(0, 0, 0, msg);
} else {
request->ReportProgress(0, static_cast<int>(progress * 1000), 1000, msg);
}
}
cmServerResponse cmServer::SetProtocolVersion(const cmServerRequest& request)
{
if (request.Type != "handshake")

View File

@ -43,6 +43,8 @@ public:
private:
void RegisterProtocol(cmServerProtocol* protocol);
static void reportProgress(const char* msg, float progress, void* data);
// Handle requests:
cmServerResponse SetProtocolVersion(const cmServerRequest& request);

View File

@ -57,9 +57,6 @@ private:
class cmServerRequest
{
public:
void ReportProgress(int min, int current, int max,
const std::string& message) const;
cmServerResponse Reply(const Json::Value& data) const;
cmServerResponse ReportError(const std::string& message) const;
@ -71,6 +68,9 @@ private:
cmServerRequest(cmServer* server, const std::string& t, const std::string& c,
const Json::Value& d);
void ReportProgress(int min, int current, int max,
const std::string& message) const;
cmServer* m_Server;
friend class cmServer;
@ -95,6 +95,8 @@ protected:
private:
std::unique_ptr<cmake> m_CMakeInstance;
friend class cmServer;
};
class cmServerProtocol1_0 : public cmServerProtocol