| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
- file Copyright.txt or https://cmake.org/licensing for details. */
- #pragma once
- #include <cmConfigure.h> // IWYU pragma: keep
- #include <string>
- #include <vector>
- #if defined(CMAKE_BUILD_WITH_CMAKE)
- #include "cm_uv.h"
- #endif
- class cmServer;
- class cmFileMonitor;
- class LoopGuard;
- class cmServerConnection
- {
- public:
- cmServerConnection();
- virtual ~cmServerConnection();
- void SetServer(cmServer* s);
- bool ProcessEvents(std::string* errorMessage);
- void ReadData(const std::string& data);
- void TriggerShutdown();
- void WriteData(const std::string& data);
- void ProcessNextRequest();
- virtual void Connect(uv_stream_t* server) { (void)(server); }
- cmFileMonitor* FileMonitor() const { return this->mFileMonitor; }
- protected:
- virtual bool DoSetup(std::string* errorMessage) = 0;
- virtual void TearDown() = 0;
- void SendGreetings();
- uv_loop_t* Loop() const { return mLoop; }
- protected:
- std::string RawReadBuffer;
- std::string RequestBuffer;
- uv_stream_t* ReadStream = nullptr;
- uv_stream_t* WriteStream = nullptr;
- private:
- uv_loop_t* mLoop = nullptr;
- cmFileMonitor* mFileMonitor = nullptr;
- cmServer* Server = nullptr;
- uv_signal_t* SIGINTHandler = nullptr;
- uv_signal_t* SIGHUPHandler = nullptr;
- friend class LoopGuard;
- };
- class cmServerStdIoConnection : public cmServerConnection
- {
- public:
- cmServerStdIoConnection();
- bool DoSetup(std::string* errorMessage) override;
- void TearDown() override;
- private:
- typedef union
- {
- uv_tty_t* tty;
- uv_pipe_t* pipe;
- } InOutUnion;
- bool usesTty = false;
- InOutUnion Input;
- InOutUnion Output;
- };
- class cmServerPipeConnection : public cmServerConnection
- {
- public:
- cmServerPipeConnection(const std::string& name);
- bool DoSetup(std::string* errorMessage) override;
- void TearDown() override;
- void Connect(uv_stream_t* server) override;
- private:
- const std::string PipeName;
- uv_pipe_t* ServerPipe = nullptr;
- uv_pipe_t* ClientPipe = nullptr;
- };
|