Deskflow 1.22.0.197
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 "base/Event.h"
12#include "base/EventTypes.h"
13#include "net/SecurityLevel.h"
14#include "server/Config.h"
15
16#include <deque>
17#include <memory>
18#include <set>
19
20class ClientProxy;
22class NetworkAddress;
23class IListenSocket;
24class ISocketFactory;
25class Server;
26class IEventQueue;
27class IDataSocket;
28
30{
31public:
32 // The factories are adopted.
34 const NetworkAddress &, std::unique_ptr<ISocketFactory> socketFactory, IEventQueue *events,
35 SecurityLevel securityLevel
36 );
37 ClientListener(ClientListener const &) = delete;
40
43
45
46
47 void setServer(Server *server);
48
50
52
53
55
61
64 {
65 return m_server;
66 }
67
68
69private:
70 // client connection event handlers
71 void handleClientConnecting();
72 void handleClientAccepted(IDataSocket *socket);
73 void handleUnknownClient(ClientProxyUnknown *unknownClient);
74 void handleClientDisconnected(ClientProxy *client);
75
76 void cleanupListenSocket();
77 void cleanupClientSockets();
78 void start();
79 void stop();
80 void removeUnknownClient(ClientProxyUnknown *unknownClient);
81
82private:
83 using NewClients = std::set<ClientProxyUnknown *>;
84 using WaitingClients = std::deque<ClientProxy *>;
85 using ClientSockets = std::set<IDataSocket *>;
86
87 IListenSocket *m_listen;
88 std::unique_ptr<ISocketFactory> m_socketFactory;
89 NewClients m_newClients;
90 WaitingClients m_waitingClients;
91 Server *m_server = nullptr;
92 IEventQueue *m_events;
93 SecurityLevel m_securityLevel;
94 ClientSockets m_clientSockets;
95 NetworkAddress m_address;
96};
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:63
ClientListener(ClientListener &&)=delete
ClientListener(const NetworkAddress &, std::unique_ptr< ISocketFactory > socketFactory, IEventQueue *events, SecurityLevel securityLevel)
Definition ClientListener.cpp:26
ClientListener & operator=(ClientListener &&)=delete
void setServer(Server *server)
Definition ClientListener.cpp:57
Server * getServer()
Get server which owns this listener.
Definition ClientListener.h:63
~ClientListener()
Definition ClientListener.cpp:51
ClientListener(ClientListener const &)=delete
Definition ClientProxyUnknown.h:26
Generic proxy for client.
Definition ClientProxy.h:20
Data stream socket interface.
Definition IDataSocket.h:20
Event queue interface.
Definition IEventQueue.h:32
Listen socket interface.
Definition IListenSocket.h:23
Socket factory.
Definition ISocketFactory.h:24
Network address type.
Definition NetworkAddress.h:18
Deskflow server.
Definition Server.h:44