cmServerProtocol.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /*============================================================================
  2. CMake - Cross Platform Makefile Generator
  3. Copyright 2016 Tobias Hunger <[email protected]>
  4. Distributed under the OSI-approved BSD License (the "License");
  5. see accompanying file Copyright.txt for details.
  6. This software is distributed WITHOUT ANY WARRANTY; without even the
  7. implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  8. See the License for more information.
  9. ============================================================================*/
  10. #pragma once
  11. #include "cmListFileCache.h"
  12. #include "cmake.h"
  13. #if defined(CMAKE_BUILD_WITH_CMAKE)
  14. #include "cm_jsoncpp_writer.h"
  15. #endif
  16. #include <memory>
  17. #include <string>
  18. class cmake;
  19. class cmServer;
  20. class cmServerRequest;
  21. class cmServerResponse
  22. {
  23. public:
  24. explicit cmServerResponse(const cmServerRequest& request);
  25. void SetData(const Json::Value& data);
  26. void SetError(const std::string& message);
  27. bool IsComplete() const;
  28. bool IsError() const;
  29. std::string ErrorMessage() const;
  30. Json::Value Data() const;
  31. const std::string Type;
  32. const std::string Cookie;
  33. private:
  34. enum PayLoad
  35. {
  36. PAYLOAD_UNKNOWN,
  37. PAYLOAD_ERROR,
  38. PAYLOAD_DATA
  39. };
  40. PayLoad m_Payload = PAYLOAD_UNKNOWN;
  41. std::string m_ErrorMessage;
  42. Json::Value m_Data;
  43. };
  44. class cmServerRequest
  45. {
  46. public:
  47. cmServerResponse Reply(const Json::Value& data) const;
  48. cmServerResponse ReportError(const std::string& message) const;
  49. const std::string Type;
  50. const std::string Cookie;
  51. const Json::Value Data;
  52. private:
  53. cmServerRequest(cmServer* server, const std::string& t, const std::string& c,
  54. const Json::Value& d);
  55. void ReportProgress(int min, int current, int max,
  56. const std::string& message) const;
  57. void ReportMessage(const std::string& message,
  58. const std::string& title) const;
  59. cmServer* m_Server;
  60. friend class cmServer;
  61. };
  62. class cmServerProtocol
  63. {
  64. public:
  65. virtual ~cmServerProtocol() {}
  66. virtual std::pair<int, int> ProtocolVersion() const = 0;
  67. virtual bool IsExperimental() const = 0;
  68. virtual const cmServerResponse Process(const cmServerRequest& request) = 0;
  69. bool Activate(cmServer* server, const cmServerRequest& request,
  70. std::string* errorMessage);
  71. void SendSignal(const std::string& name, const Json::Value& data) const;
  72. protected:
  73. cmake* CMakeInstance() const;
  74. // Implement protocol specific activation tasks here. Called from Activate().
  75. virtual bool DoActivate(const cmServerRequest& request,
  76. std::string* errorMessage);
  77. private:
  78. std::unique_ptr<cmake> m_CMakeInstance;
  79. cmServer* m_Server = nullptr; // not owned!
  80. friend class cmServer;
  81. };
  82. class cmServerProtocol1_0 : public cmServerProtocol
  83. {
  84. public:
  85. std::pair<int, int> ProtocolVersion() const override;
  86. bool IsExperimental() const override;
  87. const cmServerResponse Process(const cmServerRequest& request) override;
  88. private:
  89. bool DoActivate(const cmServerRequest& request,
  90. std::string* errorMessage) override;
  91. // Handle requests:
  92. cmServerResponse ProcessCompute(const cmServerRequest& request);
  93. cmServerResponse ProcessConfigure(const cmServerRequest& request);
  94. cmServerResponse ProcessGlobalSettings(const cmServerRequest& request);
  95. cmServerResponse ProcessSetGlobalSettings(const cmServerRequest& request);
  96. enum State
  97. {
  98. STATE_INACTIVE,
  99. STATE_ACTIVE,
  100. STATE_CONFIGURED,
  101. STATE_COMPUTED
  102. };
  103. State m_State = STATE_INACTIVE;
  104. };