AusweisApp
Lade ...
Suche ...
Keine Treffer
SignalHandler.h
gehe zur Dokumentation dieser Datei
1
5#pragma once
6
7#include "Env.h"
8
9#include <QObject>
10#include <functional>
11
12#if defined(Q_OS_UNIX) && !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS)
13 #include <QSocketNotifier>
14 #include <csignal>
15#elif defined(Q_OS_WIN)
16 #include <QReadWriteLock>
17 #include <windows.h>
18#endif
19
20namespace governikus
21{
22
24 : public QObject
25 , private Env::ThreadSafe
26{
27 Q_OBJECT
28
29 Q_DISABLE_COPY(SignalHandler)
30 friend class Env;
31 friend void shutdownApp();
32
33 private:
34 bool mInit;
35 std::function<void()> mController;
36
37#ifdef Q_OS_WIN
38 SERVICE_STATUS_HANDLE mServiceStatusHandle;
39 QReadWriteLock mLock;
40#endif
41
43 ~SignalHandler() override;
44
45#if defined(Q_OS_UNIX) && !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS)
46
47 private:
48 QScopedPointer<QSocketNotifier> mSignalSocketNotifier;
49 static int cSignalSocketPair[2];
50
51 void initUnix();
52 static void sigHandler(int pSignal);
53#elif defined(Q_OS_WIN)
54
55 private:
56 static BOOL WINAPI ctrlHandler(DWORD pCtrlType);
57 static VOID WINAPI serviceMain(DWORD pArgc, LPTSTR* pArgv);
58 static VOID WINAPI serviceCtrlHandler(DWORD pCtrlCode);
59 static void registerService();
60 void setServiceStatus(DWORD pCurrentState);
61#endif
62
63 private Q_SLOTS:
64 void onSignalSocketActivated();
65#if defined(Q_OS_WIN)
66 void quit();
67#else
68 void quit() const;
69#endif
70
71 public:
72 void init();
73 void setController(const std::function<void()>& pController);
74};
75
76} // namespace governikus
Definition Env.h:40
Definition SignalHandler.h:26
void setController(const std::function< void()> &pController)
Definition SignalHandler.cpp:66
void init()
Definition SignalHandler.cpp:46
Defines the AccessRight and AccessRole enum.
Definition CommandApdu.h:17
VOID
Definition MsgTypes.h:18
Definition Env.h:45