aboutsummaryrefslogtreecommitdiff
path: root/Src/replicant/Wasabi/SysCallbacks.h
blob: e570b2bea5891d5b2256cebb8c71ada99a076fc2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#pragma once

#include "syscb/api_syscb.h"
#include <vector>
#include "nu/AutoLock.h"
#include "service/types.h"
#include "nx/nxstring.h"
#include "nswasabi/ServiceName.h"

class SysCallbacks : public api_syscb
{
public:
	WASABI_SERVICE_NAME("System Callbacks API");

public:
	SysCallbacks();
    int WASABICALL SysCallbacks_RegisterCallback(ifc_sysCallback *cb);
    int WASABICALL SysCallbacks_UnregisterCallback(ifc_sysCallback *cb);
    int WASABICALL SysCallbacks_IssueCallback(GUID eventtype, int msg, intptr_t param1 = 0, intptr_t param2 = 0);
		ifc_sysCallback *WASABICALL SysCallbacks_Enum(GUID eventtype, size_t n); 

private:
	nu::LockGuard callbackGuard;
	std::vector<ifc_sysCallback*> callbacks;
	std::vector<ifc_sysCallback*> deleteMeAfterCallbacks;
	bool inCallback;
	volatile int reentry;
};

extern SysCallbacks system_callbacks;