Просмотр исходного кода

server-mode: Automate progress reporting

Wire up cmake::SetProgressUpdate to do progress reporting via the
cmake server.
Tobias Hunger 9 лет назад
Родитель
Сommit
ca7799482c
3 измененных файлов с 25 добавлено и 5 удалено
  1. 18 2
      Source/cmServer.cxx
  2. 2 0
      Source/cmServer.h
  3. 5 3
      Source/cmServerProtocol.h

+ 18 - 2
Source/cmServer.cxx

@@ -134,8 +134,13 @@ void cmServer::PopOne()
     return;
     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)
 void cmServer::handleData(const std::string& data)
@@ -210,6 +215,17 @@ void cmServer::PrintHello() const
   this->WriteJsonObject(hello);
   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)
 cmServerResponse cmServer::SetProtocolVersion(const cmServerRequest& request)
 {
 {
   if (request.Type != "handshake")
   if (request.Type != "handshake")

+ 2 - 0
Source/cmServer.h

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

+ 5 - 3
Source/cmServerProtocol.h

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