Deskflow 1.22.0.197
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
TSocketMultiplexerMethodJob.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd.
4 * SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman
5 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
6 */
7
8#pragma once
9
10#include "arch/Arch.h"
12
14
17template <class T> class TSocketMultiplexerMethodJob : public ISocketMultiplexerJob
18{
19public:
20 using Method = ISocketMultiplexerJob *(T::*)(ISocketMultiplexerJob *, bool, bool, bool);
21
23 TSocketMultiplexerMethodJob(T *object, Method method, ArchSocket socket, bool readable, bool writeable);
27
30
31 // IJob overrides
32 ISocketMultiplexerJob *run(bool readable, bool writable, bool error) override;
33 ArchSocket getSocket() const override;
34 bool isReadable() const override;
35 bool isWritable() const override;
36
37private:
38 T *m_object;
39 Method m_method;
40 ArchSocket m_socket;
41 bool m_readable;
42 bool m_writable;
43 void *m_arg;
44};
45
46template <class T>
48 T *object, Method method, ArchSocket socket, bool readable, bool writable
49)
50 : m_object(object),
51 m_method(method),
52 m_socket(ARCH->copySocket(socket)),
53 m_readable(readable),
54 m_writable(writable)
55{
56 // do nothing
57}
58
60{
61 ARCH->closeSocket(m_socket);
62}
63
64template <class T> inline ISocketMultiplexerJob *TSocketMultiplexerMethodJob<T>::run(bool read, bool write, bool error)
65{
66 if (m_object != nullptr) {
67 return (m_object->*m_method)(this, read, write, error);
68 }
69 return nullptr;
70}
71
73{
74 return m_socket;
75}
76
77template <class T> inline bool TSocketMultiplexerMethodJob<T>::isReadable() const
78{
79 return m_readable;
80}
81
82template <class T> inline bool TSocketMultiplexerMethodJob<T>::isWritable() const
83{
84 return m_writable;
85}
#define ARCH
Definition Arch.h:50
ArchSocketImpl * ArchSocket
Opaque socket type. An opaque type representing a socket.
Definition IArchNetwork.h:30
Socket multiplexer job.
Definition ISocketMultiplexerJob.h:18
bool isWritable() const override
Check for interest in writability.
Definition TSocketMultiplexerMethodJob.h:82
ISocketMultiplexerJob *(T::*)(ISocketMultiplexerJob *, bool, bool, bool) Method
Definition TSocketMultiplexerMethodJob.h:20
TSocketMultiplexerMethodJob(TSocketMultiplexerMethodJob const &)=delete
ArchSocket getSocket() const override
Get the socket.
Definition TSocketMultiplexerMethodJob.h:72
TSocketMultiplexerMethodJob(T *object, Method method, ArchSocket socket, bool readable, bool writeable)
run() invokes object->method(arg)
Definition TSocketMultiplexerMethodJob.h:47
~TSocketMultiplexerMethodJob() override
Definition TSocketMultiplexerMethodJob.h:59
TSocketMultiplexerMethodJob(TSocketMultiplexerMethodJob &&)=delete
TSocketMultiplexerMethodJob & operator=(TSocketMultiplexerMethodJob &&)=delete
bool isReadable() const override
Check for interest in readability.
Definition TSocketMultiplexerMethodJob.h:77
ISocketMultiplexerJob * run(bool readable, bool writable, bool error) override
Handle socket event.
Definition TSocketMultiplexerMethodJob.h:64
TSocketMultiplexerMethodJob & operator=(TSocketMultiplexerMethodJob const &)=delete