#ifndef NULLSOFT_SYSCALLBACKSH #define NULLSOFT_SYSCALLBACKSH #include #include "../nu/AutoLock.h" #include #include 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 CallbackList; typedef std::map EventMap; EventMap callback_map; CallbackList deleteMeAfterCallbacks; bool inCallback; volatile int reentry; }; extern SysCallbacks *sysCallbacks; #endif