| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #ifndef AGENT_H |
| | #define AGENT_H |
| |
|
| | #include <windows.h> |
| | #include <stdint.h> |
| |
|
| | #include <memory> |
| | #include <string> |
| |
|
| | #include "DsrSender.h" |
| | #include "EventLoop.h" |
| | #include "Win32Console.h" |
| |
|
| | class ConsoleInput; |
| | class NamedPipe; |
| | class ReadBuffer; |
| | class Scraper; |
| | class WriteBuffer; |
| | class Win32ConsoleBuffer; |
| |
|
| | class Agent : public EventLoop, public DsrSender |
| | { |
| | public: |
| | Agent(LPCWSTR controlPipeName, |
| | uint64_t agentFlags, |
| | int mouseMode, |
| | int initialCols, |
| | int initialRows); |
| | virtual ~Agent(); |
| | void sendDsr() override; |
| |
|
| | private: |
| | NamedPipe &connectToControlPipe(LPCWSTR pipeName); |
| | NamedPipe &createDataServerPipe(bool write, const wchar_t *kind); |
| |
|
| | private: |
| | void pollControlPipe(); |
| | void handlePacket(ReadBuffer &packet); |
| | void writePacket(WriteBuffer &packet); |
| | void handleStartProcessPacket(ReadBuffer &packet); |
| | void handleSetSizePacket(ReadBuffer &packet); |
| | void handleGetConsoleProcessListPacket(ReadBuffer &packet); |
| | void pollConinPipe(); |
| |
|
| | protected: |
| | virtual void onPollTimeout() override; |
| | virtual void onPipeIo(NamedPipe &namedPipe) override; |
| |
|
| | private: |
| | void autoClosePipesForShutdown(); |
| | std::unique_ptr<Win32ConsoleBuffer> openPrimaryBuffer(); |
| | void resizeWindow(int cols, int rows); |
| | void scrapeBuffers(); |
| | void syncConsoleTitle(); |
| |
|
| | private: |
| | const bool m_useConerr; |
| | const bool m_plainMode; |
| | const int m_mouseMode; |
| | Win32Console m_console; |
| | std::unique_ptr<Scraper> m_primaryScraper; |
| | std::unique_ptr<Scraper> m_errorScraper; |
| | std::unique_ptr<Win32ConsoleBuffer> m_errorBuffer; |
| | NamedPipe *m_controlPipe = nullptr; |
| | NamedPipe *m_coninPipe = nullptr; |
| | NamedPipe *m_conoutPipe = nullptr; |
| | NamedPipe *m_conerrPipe = nullptr; |
| | bool m_autoShutdown = false; |
| | bool m_exitAfterShutdown = false; |
| | bool m_closingOutputPipes = false; |
| | std::unique_ptr<ConsoleInput> m_consoleInput; |
| | HANDLE m_childProcess = nullptr; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | std::wstring m_currentTitle = L" "; |
| | }; |
| |
|
| | #endif |
| |
|