1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
/**********************************************************************
Audacity: A Digital Audio Editor
@file PluginHost.h
@author Vitaly Sverchinsky
Part of lib-module-manager library
**********************************************************************/
#pragma once
#include "IPCChannel.h"
#include <memory>
#include <mutex>
#include <optional>
#include <condition_variable>
#include <wx/string.h>
#include "IPCClient.h"
#include "PluginIPCUtils.h"
/**
* \brief Internal class, processes plugin validation requests
* from the main app. Request is a simple string formatted by
* detail::MakeRequestString. After connection is established
* host starts to wait for a request from server. Once request
* is successfully processed host sends a reply. Host is capable
* to handle only one request at a time, so it's not allowed to
* send another request until host hasn't finish processing
* previous request.
*/
class MODULE_MANAGER_API PluginHost final : public IPCChannelStatusCallback
{
static constexpr auto HostArgument = "--host";
std::unique_ptr<IPCClient> mClient;
IPCChannel* mChannel{nullptr};
detail::InputMessageReader mInputMessageReader;
std::mutex mSync;
std::condition_variable mRequestCondition;
std::optional<wxString> mRequest;
bool mRunning{true};
void Stop() noexcept;
public:
/**
* \brief Attempts to start a host application (should be called from
* the main application)
* \return true if host has started successfully
*/
static bool Start(int connectPort);
///Returns true if current process is considered to be a plugin host process
static bool IsHostProcess();
explicit PluginHost(int connectPort);
void OnConnect(IPCChannel& channel) noexcept override;
void OnDisconnect() noexcept override;
void OnConnectionError() noexcept override;
void OnDataAvailable(const void* data, size_t size) noexcept override;
bool Serve();
};
|