barrier/src/lib/ipc/CIpcServer.h

70 lines
1.8 KiB
C
Raw Normal View History

2012-06-28 07:29:06 +00:00
/*
* 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 <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "CTCPListenSocket.h"
#include "CNetworkAddress.h"
2012-07-01 21:18:21 +00:00
#include <set>
class CEvent;
class CIpcClientProxy;
2012-07-02 15:28:23 +00:00
class CIpcMessage;
2012-06-28 07:29:06 +00:00
//! IPC server for communication between daemon and GUI.
/*!
2012-07-01 21:18:21 +00:00
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.
*/
2012-06-28 07:29:06 +00:00
class CIpcServer {
public:
CIpcServer();
virtual ~CIpcServer();
2012-07-01 21:18:21 +00:00
//! @name manipulators
//@{
//! Opens a TCP socket only allowing local connections.
void listen();
2012-07-02 15:28:23 +00:00
//! Send a message to all clients.
void send(const CIpcMessage& message);
2012-07-01 21:18:21 +00:00
//@}
//! @name accessors
//@{
2012-07-02 13:45:52 +00:00
//! Raised when we have created the client proxy.
2012-07-01 21:18:21 +00:00
static CEvent::Type getClientConnectedEvent();
//@}
private:
void handleClientConnecting(const CEvent&, void*);
private:
2012-07-01 21:18:21 +00:00
typedef std::set<CIpcClientProxy*> CClientSet;
CTCPListenSocket m_socket;
CNetworkAddress m_address;
CClientSet m_clients;
static CEvent::Type s_clientConnectedEvent;
2012-06-28 07:29:06 +00:00
};