From 824eeee6f5089326e541dc41e26a31bbebfc960a Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Tue, 24 Dec 2019 14:24:32 +0800 Subject: [PATCH] =?UTF-8?q?c=20api=20=E5=9B=9E=E8=B0=83invoker=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=BC=82=E6=AD=A5=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/include/events_objects.h | 62 ++++++++++++++++++++++++++++ api/source/events_objects.cpp | 76 ++++++++++++++++++++++++++++++++++- 2 files changed, 136 insertions(+), 2 deletions(-) diff --git a/api/include/events_objects.h b/api/include/events_objects.h index aca46ed2..9c3b9e42 100644 --- a/api/include/events_objects.h +++ b/api/include/events_objects.h @@ -161,7 +161,16 @@ API_EXPORT void API_CALL mk_http_response_invoker_do_file(const mk_http_response const mk_parser request_parser, const char *response_header[], const char *response_file_path); +/** +* 克隆mk_http_response_invoker对象,通过克隆对象为堆对象,可以实现跨线程异步执行mk_http_response_invoker_do +* 如果是同步执行mk_http_response_invoker_do,那么没必要克隆对象 +*/ +API_EXPORT mk_http_response_invoker API_CALL mk_http_response_invoker_clone(const mk_http_response_invoker ctx); +/** + * 销毁堆上的克隆对象 + */ +API_EXPORT void API_CALL mk_http_response_invoker_clone_release(const mk_http_response_invoker ctx); ///////////////////////////////////////////HttpAccessPathInvoker///////////////////////////////////////////// //HttpSession::HttpAccessPathInvoker对象的C映射 @@ -177,6 +186,17 @@ API_EXPORT void API_CALL mk_http_access_path_invoker_do(const mk_http_access_pat const char *access_path, int cookie_life_second); +/** +* 克隆mk_http_access_path_invoker对象,通过克隆对象为堆对象,可以实现跨线程异步执行mk_http_access_path_invoker_do +* 如果是同步执行mk_http_access_path_invoker_do,那么没必要克隆对象 +*/ +API_EXPORT mk_http_access_path_invoker API_CALL mk_http_access_path_invoker_clone(const mk_http_access_path_invoker ctx); + +/** + * 销毁堆上的克隆对象 + */ +API_EXPORT void API_CALL mk_http_access_path_invoker_clone_release(const mk_http_access_path_invoker ctx); + ///////////////////////////////////////////RtspSession::onGetRealm///////////////////////////////////////////// //RtspSession::onGetRealm对象的C映射 typedef void* mk_rtsp_get_realm_invoker; @@ -187,6 +207,17 @@ typedef void* mk_rtsp_get_realm_invoker; API_EXPORT void API_CALL mk_rtsp_get_realm_invoker_do(const mk_rtsp_get_realm_invoker ctx, const char *realm); +/** +* 克隆mk_rtsp_get_realm_invoker对象,通过克隆对象为堆对象,可以实现跨线程异步执行mk_rtsp_get_realm_invoker_do +* 如果是同步执行mk_rtsp_get_realm_invoker_do,那么没必要克隆对象 +*/ +API_EXPORT mk_rtsp_get_realm_invoker API_CALL mk_rtsp_get_realm_invoker_clone(const mk_rtsp_get_realm_invoker ctx); + +/** + * 销毁堆上的克隆对象 + */ +API_EXPORT void API_CALL mk_rtsp_get_realm_invoker_clone_release(const mk_rtsp_get_realm_invoker ctx); + ///////////////////////////////////////////RtspSession::onAuth///////////////////////////////////////////// //RtspSession::onAuth对象的C映射 typedef void* mk_rtsp_auth_invoker; @@ -200,6 +231,16 @@ API_EXPORT void API_CALL mk_rtsp_auth_invoker_do(const mk_rtsp_auth_invoker ctx, int encrypted, const char *pwd_or_md5); +/** + * 克隆mk_rtsp_auth_invoker对象,通过克隆对象为堆对象,可以实现跨线程异步执行mk_rtsp_auth_invoker_do + * 如果是同步执行mk_rtsp_auth_invoker_do,那么没必要克隆对象 + */ +API_EXPORT mk_rtsp_auth_invoker API_CALL mk_rtsp_auth_invoker_clone(const mk_rtsp_auth_invoker ctx); + +/** + * 销毁堆上的克隆对象 + */ +API_EXPORT void API_CALL mk_rtsp_auth_invoker_clone_release(const mk_rtsp_auth_invoker ctx); ///////////////////////////////////////////Broadcast::PublishAuthInvoker///////////////////////////////////////////// //Broadcast::PublishAuthInvoker对象的C映射 @@ -218,6 +259,17 @@ API_EXPORT void API_CALL mk_publish_auth_invoker_do(const mk_publish_auth_invoke int enable_hls, int enable_mp4); +/** + * 克隆mk_publish_auth_invoker对象,通过克隆对象为堆对象,可以实现跨线程异步执行mk_publish_auth_invoker_do + * 如果是同步执行mk_publish_auth_invoker_do,那么没必要克隆对象 + */ +API_EXPORT mk_publish_auth_invoker API_CALL mk_publish_auth_invoker_clone(const mk_publish_auth_invoker ctx); + +/** + * 销毁堆上的克隆对象 + */ +API_EXPORT void API_CALL mk_publish_auth_invoker_clone_release(const mk_publish_auth_invoker ctx); + ///////////////////////////////////////////Broadcast::AuthInvoker///////////////////////////////////////////// //Broadcast::AuthInvoker对象的C映射 typedef void* mk_auth_invoker; @@ -228,6 +280,16 @@ typedef void* mk_auth_invoker; */ API_EXPORT void API_CALL mk_auth_invoker_do(const mk_auth_invoker ctx, const char *err_msg); +/** + * 克隆mk_auth_invoker对象,通过克隆对象为堆对象,可以实现跨线程异步执行mk_auth_invoker_do + * 如果是同步执行mk_auth_invoker_do,那么没必要克隆对象 + */ +API_EXPORT mk_auth_invoker API_CALL mk_auth_invoker_clone(const mk_auth_invoker ctx); + +/** + * 销毁堆上的克隆对象 + */ +API_EXPORT void API_CALL mk_auth_invoker_clone_relase(const mk_auth_invoker ctx); #ifdef __cplusplus } diff --git a/api/source/events_objects.cpp b/api/source/events_objects.cpp index 7fe24418..0a22566d 100644 --- a/api/source/events_objects.cpp +++ b/api/source/events_objects.cpp @@ -285,17 +285,42 @@ API_EXPORT void API_CALL mk_http_response_invoker_do_file(const mk_http_response (*invoker).responseFile(((Parser*)(request_parser))->getValues(),header,response_file_path); } +API_EXPORT mk_http_response_invoker API_CALL mk_http_response_invoker_clone(const mk_http_response_invoker ctx){ + assert(ctx); + HttpSession::HttpResponseInvoker *invoker = (HttpSession::HttpResponseInvoker *)ctx; + return new HttpSession::HttpResponseInvoker (*invoker); +} + +API_EXPORT void API_CALL mk_http_response_invoker_clone_release(const mk_http_response_invoker ctx){ + assert(ctx); + HttpSession::HttpResponseInvoker *invoker = (HttpSession::HttpResponseInvoker *)ctx; + delete invoker; +} + ///////////////////////////////////////////HttpAccessPathInvoker///////////////////////////////////////////// API_EXPORT void API_CALL mk_http_access_path_invoker_do(const mk_http_access_path_invoker ctx, const char *err_msg, const char *access_path, int cookie_life_second){ assert(ctx); - HttpSession::HttpAccessPathInvoker *invoer = (HttpSession::HttpAccessPathInvoker *)ctx; - (*invoer)(err_msg ? err_msg : "", + HttpSession::HttpAccessPathInvoker *invoker = (HttpSession::HttpAccessPathInvoker *)ctx; + (*invoker)(err_msg ? err_msg : "", access_path? access_path : "", cookie_life_second); } + +API_EXPORT mk_http_access_path_invoker API_CALL mk_http_access_path_invoker_clone(const mk_http_access_path_invoker ctx){ + assert(ctx); + HttpSession::HttpAccessPathInvoker *invoker = (HttpSession::HttpAccessPathInvoker *)ctx; + return new HttpSession::HttpAccessPathInvoker(*invoker); +} + +API_EXPORT void API_CALL mk_http_access_path_invoker_clone_release(const mk_http_access_path_invoker ctx){ + assert(ctx); + HttpSession::HttpAccessPathInvoker *invoker = (HttpSession::HttpAccessPathInvoker *)ctx; + delete invoker; +} + ///////////////////////////////////////////RtspSession::onGetRealm///////////////////////////////////////////// API_EXPORT void API_CALL mk_rtsp_get_realm_invoker_do(const mk_rtsp_get_realm_invoker ctx, const char *realm){ @@ -304,6 +329,18 @@ API_EXPORT void API_CALL mk_rtsp_get_realm_invoker_do(const mk_rtsp_get_realm_in (*invoker)(realm ? realm : ""); } +API_EXPORT mk_rtsp_get_realm_invoker API_CALL mk_rtsp_get_realm_invoker_clone(const mk_rtsp_get_realm_invoker ctx){ + assert(ctx); + RtspSession::onGetRealm *invoker = (RtspSession::onGetRealm *)ctx; + return new RtspSession::onGetRealm (*invoker); +} + +API_EXPORT void API_CALL mk_rtsp_get_realm_invoker_clone_release(const mk_rtsp_get_realm_invoker ctx){ + assert(ctx); + RtspSession::onGetRealm *invoker = (RtspSession::onGetRealm *)ctx; + delete invoker; +} + ///////////////////////////////////////////RtspSession::onAuth///////////////////////////////////////////// API_EXPORT void API_CALL mk_rtsp_auth_invoker_do(const mk_rtsp_auth_invoker ctx, int encrypted, @@ -313,6 +350,18 @@ API_EXPORT void API_CALL mk_rtsp_auth_invoker_do(const mk_rtsp_auth_invoker ctx, (*invoker)(encrypted, pwd_or_md5 ? pwd_or_md5 : ""); } +API_EXPORT mk_rtsp_auth_invoker API_CALL mk_rtsp_auth_invoker_clone(const mk_rtsp_auth_invoker ctx){ + assert(ctx); + RtspSession::onAuth *invoker = (RtspSession::onAuth *)ctx; + return new RtspSession::onAuth(*invoker); +} + +API_EXPORT void API_CALL mk_rtsp_auth_invoker_clone_release(const mk_rtsp_auth_invoker ctx){ + assert(ctx); + RtspSession::onAuth *invoker = (RtspSession::onAuth *)ctx; + delete invoker; +} + ///////////////////////////////////////////Broadcast::PublishAuthInvoker///////////////////////////////////////////// API_EXPORT void API_CALL mk_publish_auth_invoker_do(const mk_publish_auth_invoker ctx, const char *err_msg, @@ -324,6 +373,18 @@ API_EXPORT void API_CALL mk_publish_auth_invoker_do(const mk_publish_auth_invoke (*invoker)(err_msg ? err_msg : "", enable_rtxp, enable_hls, enable_mp4); } +API_EXPORT mk_publish_auth_invoker API_CALL mk_publish_auth_invoker_clone(const mk_publish_auth_invoker ctx){ + assert(ctx); + Broadcast::PublishAuthInvoker *invoker = (Broadcast::PublishAuthInvoker *)ctx; + return new Broadcast::PublishAuthInvoker(*invoker); +} + +API_EXPORT void API_CALL mk_publish_auth_invoker_clone_release(const mk_publish_auth_invoker ctx){ + assert(ctx); + Broadcast::PublishAuthInvoker *invoker = (Broadcast::PublishAuthInvoker *)ctx; + delete invoker; +} + ///////////////////////////////////////////Broadcast::AuthInvoker///////////////////////////////////////////// API_EXPORT void API_CALL mk_auth_invoker_do(const mk_auth_invoker ctx, const char *err_msg){ assert(ctx); @@ -331,3 +392,14 @@ API_EXPORT void API_CALL mk_auth_invoker_do(const mk_auth_invoker ctx, const cha (*invoker)(err_msg ? err_msg : ""); } +API_EXPORT mk_auth_invoker API_CALL mk_auth_invoker_clone(const mk_auth_invoker ctx){ + assert(ctx); + Broadcast::AuthInvoker *invoker = (Broadcast::AuthInvoker *)ctx; + return new Broadcast::AuthInvoker(*invoker); +} + +API_EXPORT void API_CALL mk_auth_invoker_clone_relase(const mk_auth_invoker ctx){ + assert(ctx); + Broadcast::AuthInvoker *invoker = (Broadcast::AuthInvoker *)ctx; + delete invoker; +} \ No newline at end of file