27#include <wx/cmdline.h>
33std::string GetSocketPath();
38class IpcClientConnection :
public wxConnection {
39 friend class IpcClient;
43 IpcClientConnection() : wxConnection() {}
46class IpcClient :
public wxClient,
public LocalClientApi {
48 IpcClient(
const std::string& path);
50 IpcClient() : IpcClient(GetSocketPath()) {}
52 LocalApiResult SendRaise();
53 LocalApiResult SendOpen(
const char* path);
54 LocalApiResult SendQuit();
55 LocalApiResult GetRestEndpoint();
59 wxConnectionBase* connection;
67class IpcConnection :
public wxConnection {
68 friend class IpcServer;
72 static void ReleaseInstance();
74 IpcConnection(IpcConnection&) =
delete;
75 void operator=(
const IpcConnection&) =
delete;
80 bool OnExec(
const wxString&,
const wxString& data);
87 const void*
OnRequest(
const wxString& topic,
const wxString& item,
88 size_t* size, wxIPCFormat format);
91 IpcConnection(IpcServer& s) : server(s) {}
95 static IpcServer* s_instance;
101class IpcServer :
public wxServer,
public LocalServerApi {
103 const bool is_connected;
105 IpcServer(
const std::string& path) : wxServer(), is_connected(Create(path)) {}
107 IpcServer() : IpcServer(GetSocketPath()) {}
109 wxConnectionBase* OnAcceptConnection(
const wxString& topic) {
120class DummyIpcServer :
public LocalServerApi {
123 static DummyIpcServer server;
128 DummyIpcServer(
const std::string& path) {}
130 wxConnectionBase* OnAcceptConnection(
const wxString& topic) {
131 assert(
false &&
"OnAcceptConnection called in DummyIpcServer");
144class DummyIpcClient :
public LocalClientApi {
146 DummyIpcClient(
const std::string& path) {}
150 LocalApiResult SendRaise() {
151 return LocalApiResult(
false,
"raise command not implemented");
154 LocalApiResult SendOpen(
const char* path) {
155 return LocalApiResult(
false,
"open command not implemented");
158 LocalApiResult SendQuit() {
159 return LocalApiResult(
false,
"quit command not implemented");
162 LocalApiResult GetRestEndpoint() {
163 return LocalApiResult(
false,
"get_rest_endpoint command not implemented");
166 wxConnectionBase* OnMakeConnection() {
167 assert(
false &&
"OnMakeConnection called in DummyIpcServer");
~DummyIpcServer()=default
Destroy the Dummy Ipc Server object.
Implement LocalClientApi using a filesystem fifo/socket.
Started by IpcServer on filesystem fifo/socket connects.
bool OnExec(const wxString &, const wxString &data)
Handle commands without reply: quit and raise.
const void * OnRequest(const wxString &topic, const wxString &item, size_t *size, wxIPCFormat format)
Handle commands with a reply.
Implement LocalServerApi using a filesystem fifo/socket.
void Serve()
void, we are serving as long as there is a ServerFactory.
Base interface for local server command handling.
static LocalServerApi & GetInstance()
The local API has a server side handling commands and a client part issuing commands.