/*
* synergy -- mouse and keyboard sharing utility
* Copyright (C) 2012 Nick Bolton
*
* This package is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* found in the file COPYING that should have accompanied this file.
*
* This package is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#pragma once
#include "CTCPListenSocket.h"
#include "CNetworkAddress.h"
#include
class CEvent;
class CIpcClientProxy;
//! IPC server for communication between daemon and GUI.
/*!
The IPC server listens on localhost. The IPC client runs on both the
client/server process or the GUI. The IPC server runs on the daemon process.
This allows the GUI to send config changes to the daemon and client/server,
and allows the daemon and client/server to send log data to the GUI.
*/
class CIpcServer {
public:
CIpcServer();
virtual ~CIpcServer();
//! @name manipulators
//@{
//! Opens a TCP socket only allowing local connections.
void listen();
//@}
//! @name accessors
//@{
//! Raised when we have created the client proxy.
static CEvent::Type getClientConnectedEvent();
//@}
private:
void handleClientConnecting(const CEvent&, void*);
private:
typedef std::set CClientSet;
CTCPListenSocket m_socket;
CNetworkAddress m_address;
CClientSet m_clients;
static CEvent::Type s_clientConnectedEvent;
};