35 lines
967 B
C
35 lines
967 B
C
|
#ifndef NULLSOFT_SYSCALLBACKSH
|
||
|
#define NULLSOFT_SYSCALLBACKSH
|
||
|
|
||
|
#include <api/syscb/api_syscb.h>
|
||
|
#include "../nu/AutoLock.h"
|
||
|
#include <map>
|
||
|
#include <vector>
|
||
|
|
||
|
class SysCallbacks : public api_syscb
|
||
|
{
|
||
|
public:
|
||
|
static const char *getServiceName() { return "System Callback API"; }
|
||
|
static const GUID getServiceGuid() { return syscbApiServiceGuid; }
|
||
|
public:
|
||
|
SysCallbacks();
|
||
|
int syscb_registerCallback(SysCallback *cb, void *param = NULL);
|
||
|
int syscb_deregisterCallback(SysCallback *cb);
|
||
|
int syscb_issueCallback(int eventtype, int msg, intptr_t param1 = 0, intptr_t param2 = 0);
|
||
|
SysCallback *syscb_enum(int eventtype, size_t n);
|
||
|
|
||
|
protected:
|
||
|
RECVS_DISPATCH;
|
||
|
private:
|
||
|
Nullsoft::Utility::LockGuard callbackGuard;
|
||
|
typedef std::vector<SysCallback*> CallbackList;
|
||
|
typedef std::map<int, CallbackList*> EventMap;
|
||
|
EventMap callback_map;
|
||
|
CallbackList deleteMeAfterCallbacks;
|
||
|
bool inCallback;
|
||
|
volatile int reentry;
|
||
|
};
|
||
|
|
||
|
extern SysCallbacks *sysCallbacks;
|
||
|
|
||
|
#endif
|