Deskflow 1.24.0.365
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
ClientListener.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
4 * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd.
5 * SPDX-FileCopyrightText: (C) 2004 Chris Schoeneman
6 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
7 */
8
9#pragma once
10
11#include "net/SecurityLevel.h"
12#include "server/Config.h"
13
14#include <deque>
15#include <memory>
16#include <set>
17
18class ClientProxy;
20class NetworkAddress;
21class IListenSocket;
22class ISocketFactory;
23class Server;
24class IEventQueue;
25class IDataSocket;
26
28{
29public:
30 // The factories are adopted.
32 const NetworkAddress &, std::unique_ptr<ISocketFactory> socketFactory, IEventQueue *events,
33 SecurityLevel securityLevel
34 );
35 ClientListener(ClientListener const &) = delete;
38
41
43
44
45 void setServer(Server *server);
46
48
50
51
53
59
62 {
63 return m_server;
64 }
65
66
67private:
68 // client connection event handlers
69 void handleClientConnecting();
70 void handleClientAccepted(IDataSocket *socket);
71 void handleUnknownClient(ClientProxyUnknown *unknownClient);
72 void handleClientDisconnected(ClientProxy *client);
73
74 void cleanupListenSocket();
75 void cleanupClientSockets();
76 void start();
77 void stop();
78 void removeUnknownClient(ClientProxyUnknown *unknownClient);
79
80private:
81 using NewClients = std::set<ClientProxyUnknown *>;
82 using WaitingClients = std::deque<ClientProxy *>;
83 using ClientSockets = std::set<IDataSocket *>;
84
85 IListenSocket *m_listen;
86 std::unique_ptr<ISocketFactory> m_socketFactory;
87 NewClients m_newClients;
88 WaitingClients m_waitingClients;
89 Server *m_server = nullptr;
90 IEventQueue *m_events;
91 SecurityLevel m_securityLevel;
92 ClientSockets m_clientSockets;
93 NetworkAddress m_address;
94};
SecurityLevel
This enum is used to set how the client and server will communicate.
Definition SecurityLevel.h:14
ClientListener & operator=(ClientListener const &)=delete
ClientProxy * getNextClient()
Get next connected client.
Definition ClientListener.cpp:64
ClientListener(ClientListener &&)=delete
ClientListener(const NetworkAddress &, std::unique_ptr< ISocketFactory > socketFactory, IEventQueue *events, SecurityLevel securityLevel)
Definition ClientListener.cpp:27
ClientListener & operator=(ClientListener &&)=delete
void setServer(Server *server)
Definition ClientListener.cpp:58
Server * getServer()
Get server which owns this listener.
Definition ClientListener.h:61
~ClientListener()
Definition ClientListener.cpp:52
ClientListener(ClientListener const &)=delete
Definition ClientProxyUnknown.h:22
Generic proxy for client.
Definition ClientProxy.h:18
Data stream socket interface.
Definition IDataSocket.h:21
Event queue interface.
Definition IEventQueue.h:29
Listen socket interface.
Definition IListenSocket.h:22
Socket factory.
Definition ISocketFactory.h:23
Network address type.
Definition NetworkAddress.h:17
Deskflow server.
Definition Server.h:41