From bb952e431866d131bae95c08e579ec8a00f00343 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Mon, 8 Jul 2013 22:10:14 +0000 Subject: core protocol helpers for creating protocol evengs, services & threads git-svn-id: http://svn.miranda-ng.org/main/trunk@5286 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- src/mir_core/mir_core.def | 6 ++++++ src/mir_core/protos.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 49 insertions(+), 2 deletions(-) (limited to 'src/mir_core') diff --git a/src/mir_core/mir_core.def b/src/mir_core/mir_core.def index 0e4103229a..a601d34b0b 100644 --- a/src/mir_core/mir_core.def +++ b/src/mir_core/mir_core.def @@ -168,3 +168,9 @@ db_set_resident @165 db_set @166 ProtoConstructor @167 ProtoDestructor @168 +ProtoCreateService @169 +ProtoCreateServiceParam @170 +ProtoHookEvent @171 +ProtoCreateHookableEvent @172 +ProtoForkThread @173 +ProtoForkThreadEx @174 diff --git a/src/mir_core/protos.cpp b/src/mir_core/protos.cpp index 291b7a0fa4..098bf280d4 100644 --- a/src/mir_core/protos.cpp +++ b/src/mir_core/protos.cpp @@ -79,8 +79,8 @@ MIR_CORE_DLL(int) ProtoServiceExists(const char *szModule, const char *szService return false; char str[MAXMODULELABELLENGTH * 2]; - strncpy_s(str,szModule,strlen(szModule)); - strncat_s(str,szService,strlen(szService)); + strncpy_s(str, szModule, strlen(szModule)); + strncat_s(str, szService, strlen(szService)); return ServiceExists(str); } @@ -100,3 +100,44 @@ MIR_CORE_DLL(void) ProtoDestructor(PROTO_INTERFACE *pThis) mir_free(pThis->m_szModuleName); mir_free(pThis->m_tszUserName); } + +MIR_CORE_DLL(void) ProtoCreateService(PROTO_INTERFACE *pThis, const char* szService, ProtoServiceFunc serviceProc) +{ + char str[MAXMODULELABELLENGTH * 2]; + strncpy_s(str, pThis->m_szModuleName, strlen(pThis->m_szModuleName)); + strncat_s(str, szService, strlen(szService)); + ::CreateServiceFunctionObj(str, (MIRANDASERVICEOBJ)*(void**)&serviceProc, pThis); +} + +MIR_CORE_DLL(void) ProtoCreateServiceParam(PROTO_INTERFACE *pThis, const char* szService, ProtoServiceFuncParam serviceProc, LPARAM lParam) +{ + char str[MAXMODULELABELLENGTH * 2]; + strncpy_s(str, pThis->m_szModuleName, strlen(pThis->m_szModuleName)); + strncat_s(str, szService, strlen(szService)); + ::CreateServiceFunctionObjParam(str, (MIRANDASERVICEOBJPARAM)*(void**)&serviceProc, pThis, lParam); +} + +MIR_CORE_DLL(void) ProtoHookEvent(PROTO_INTERFACE *pThis, const char* szEvent, ProtoEventFunc handler) +{ + ::HookEventObj(szEvent, (MIRANDAHOOKOBJ)*(void**)&handler, pThis); +} + +MIR_CORE_DLL(HANDLE) ProtoCreateHookableEvent(PROTO_INTERFACE *pThis, const char* szName) +{ + char str[MAXMODULELABELLENGTH * 2]; + strncpy_s(str, pThis->m_szModuleName, strlen(pThis->m_szModuleName)); + strncat_s(str, szName, strlen(szName)); + return CreateHookableEvent(str); +} + +MIR_CORE_DLL(void) ProtoForkThread(PROTO_INTERFACE *pThis, ProtoThreadFunc pFunc, void *param) +{ + UINT threadID; + CloseHandle((HANDLE)::mir_forkthreadowner((pThreadFuncOwner) *(void**)&pFunc, pThis, param, &threadID)); +} + +MIR_CORE_DLL(HANDLE) ProtoForkThreadEx(PROTO_INTERFACE *pThis, ProtoThreadFunc pFunc, void *param, UINT* threadID) +{ + UINT lthreadID; + return (HANDLE)::mir_forkthreadowner((pThreadFuncOwner) *(void**)&pFunc, pThis, param, threadID ? threadID : <hreadID); +} -- cgit v1.2.3