| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395 |
- // Copyright (c) 2023 Tencent. All rights reserved.
- #ifndef SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_SIGNALING_MANAGER_H_
- #define SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_SIGNALING_MANAGER_H_
- #include "TIMCloudDef.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- // 模块简介
- // - 信令接口,包含通话邀请相关功能
- //
- // 模块参数说明
- // - API 的参数采用 json 字符串格式,请使用文件中预先定义的 JsonKey 进行参数传递和解析
- // - 如果参数中包含非英文字符,请使用 UTF-8 编码
- //
- // 模块回调说明
- // 1. 回调的类型:
- // - 调用 API 时传入的 TIMCommCallback 回调,用于异步返回 API 的调用结果
- // - 调用 TIMSetXXXCallback 设置的全局回调,用于接收后台推送的通知
- // 2. 回调触发的线程:
- // - 对于 Windows 平台,当在主线程中调用 @ref TIMInit 接口时,SDK 会将所有回调抛到主线程,请确保主线程已创建消息循环;否则,回调将在 SDK 内部的逻辑线程触发
- // - 对于 Android 平台,当调用 @ref TIMInit 接口的线程支持消息循环时,SDK 会将所有回调抛到该线程;否则,回调将在 SDK 内部的逻辑线程触发
- // - 对于 iOS 和 MAC 平台,SDK 默认将所有回调抛到主线程
- // - 对于 Linux 平台,暂不支持将回调抛到主线程,回调将在 SDK 内部的逻辑线程触发
- /////////////////////////////////////////////////////////////////////////////////
- //
- // 一. 信令相关配置选项定义
- //
- /////////////////////////////////////////////////////////////////////////////////
- // 1.1 信令响应类型
- enum TIMSignalingActionType {
- // 未定义
- TIMSignalingActionType_Unknown,
- // 邀请方发起邀请
- TIMSignalingActionType_Invite,
- // 邀请方取消邀请
- TIMSignalingActionType_CancelInvite,
- // 被邀请方接受邀请
- TIMSignalingActionType_AcceptInvite,
- // 被邀请方拒绝邀请
- TIMSignalingActionType_RejectInvite,
- // 邀请超时
- TIMSignalingActionType_InviteTimeout,
- };
- /////////////////////////////////////////////////////////////////////////////////
- //
- // 二. 信令事件回调定义
- //
- /////////////////////////////////////////////////////////////////////////////////
- /**
- * 2.1 收到邀请的回调
- *
- * @param invite_id 邀请 ID
- * @param inviter 邀请者 userID
- * @param group_id 群组 ID
- * @param json_invitee_list 被邀请者 userID 列表,json 字符串类型
- * @param data 自定义字段
- * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
- */
- typedef void (*TIMSignalingReceiveNewInvitationCallback)(const char* invite_id, const char* inviter, const char* group_id,
- const char* json_invitee_list, const char* data, const void* user_data);
- /**
- * 2.2 邀请被取消的回调
- *
- * @param invite_id 邀请 ID
- * @param inviter 邀请者 userID
- * @param data 自定义字段
- * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
- */
- typedef void (*TIMSignalingInvitationCancelledCallback)(const char* invite_id, const char* inviter, const char* data, const void* user_data);
- /**
- * 2.3 被邀请者接受邀请的回调
- *
- * @param invite_id 邀请 ID
- * @param invitee 被邀请者 userID
- * @param data 自定义字段
- * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
- */
- typedef void (*TIMSignalingInviteeAcceptedCallback)(const char* invite_id, const char* invitee, const char* data, const void* user_data);
- /**
- * 2.4 被邀请者拒绝邀请的回调
- *
- * @param invite_id 邀请 ID
- * @param invitee 被邀请者 userID
- * @param data 自定义字段
- * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
- */
- typedef void (*TIMSignalingInviteeRejectedCallback)(const char* invite_id, const char* invitee, const char* data, const void* user_data);
- /**
- * 2.5 邀请超时的回调
- *
- * @param invite_id 邀请 ID
- * @param json_invitee_list 被邀请者 userID 列表,json 字符串类型
- * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
- */
- typedef void (*TIMSignalingInvitationTimeoutCallback)(const char* invite_id, const char* json_invitee_list, const void* user_data);
- /**
- * 2.6 邀请被修改的回调(6.7 及其以上版本支持)
- *
- * @param invite_id 邀请 ID
- * @param data 自定义字段
- * @param user_data ImSDK负责透传的用户自定义数据,未做任何处理
- */
- typedef void (*TIMSignalingInvitationModifiedCallback)(const char* invite_id, const char* data, const void* user_data);
- /////////////////////////////////////////////////////////////////////////////////
- //
- // 三. 注册信令事件回调 API
- //
- /////////////////////////////////////////////////////////////////////////////////
- /**
- * 3.1 设置收到信令邀请的回调
- *
- * @param cb 收到信令邀请的回调,请参考 @ref TIMSignalingReceiveNewInvitationCallback
- * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
- */
- TIM_API void TIMSetSignalingReceiveNewInvitationCallback(TIMSignalingReceiveNewInvitationCallback cb, const void *user_data);
- /**
- * 3.2 设置信令邀请被取消的回调
- *
- * @param cb 信令邀请被取消的回调,请参考 @ref TIMSignalingInvitationCancelledCallback
- * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
- */
- TIM_API void TIMSetSignalingInvitationCancelledCallback(TIMSignalingInvitationCancelledCallback cb, const void *user_data);
- /**
- * 3.3 设置信令邀请被接收者同意的回调
- *
- * @param cb 同意信令邀请的回调,请参考 @ref TIMSignalingInviteeAcceptedCallback
- * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
- */
- TIM_API void TIMSetSignalingInviteeAcceptedCallback(TIMSignalingInviteeAcceptedCallback cb, const void *user_data);
- /**
- * 3.4 设置信令邀请被接收者拒绝的回调
- *
- * @param cb 拒绝信令邀请的回调,请参考 @ref TIMSignalingInviteeRejectedCallback
- * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
- */
- TIM_API void TIMSetSignalingInviteeRejectedCallback(TIMSignalingInviteeRejectedCallback cb, const void *user_data);
- /**
- * 3.5 设置信令邀请超时的回调
- *
- * @param cb 信令邀请超时的回调,请参考 @ref TIMSignalingInvitationTimeoutCallback
- * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
- */
- TIM_API void TIMSetSignalingInvitationTimeoutCallback(TIMSignalingInvitationTimeoutCallback cb, const void *user_data);
- /**
- * 3.6 设置信令邀请被修改的回调
- *
- * @param cb 信令邀请被修改的回调,请参考 @ref TIMSignalingInvitationModifiedCallback
- * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
- */
- TIM_API void TIMSetSignalingInvitationModifiedCallback(TIMSignalingInvitationModifiedCallback cb, const void *user_data);
- /////////////////////////////////////////////////////////////////////////////////
- //
- // 四. 信令 API
- //
- /////////////////////////////////////////////////////////////////////////////////
- /**
- * 4.1 邀请某个人
- *
- * @param invitee 被邀请人的 userID
- * @param data 自定义数据
- * @param online_user_only 是否只有在线用户才能收到邀请,如果设置为 true,只有在线用户才能收到,并且 invite 操作也不会产生历史消息(针对该次 invite 的后续 cancel、accept、reject、timeout 操作也同样不会产生历史消息)
- * @param json_offline_push_info 离线推送时携带的标题和声音,其中 desc 为必填字段,推送的时候会默认展示 desc 信息,Json key 的定义请参考 @ref OfflinePushConfig
- * @param timeout 超时时间,单位 s,如果设置为 0,SDK 不会做超时检测,也不触发 @ref TIMSignalingInvitationTimeoutCallback 回调
- * @param invite_id_buffer 出参,邀请 ID,分配内存大小不能低于 128 字节,如果不需要,可传入 nullptr,调用接口后,可以读取到以 '\0' 结尾的字符串
- * @param cb 回调
- * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
- * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
- *
- * __示例__
- * @code{.cpp}
- * Json::Value json_offline_push_info;
- * json_offline_push_info[kTIMOfflinePushConfigDesc] = "push desc";
- *
- * const size_t kMessageIDLength = 128;
- * char invite_id_buffer[kMessageIDLength] = {0};
- * int ret = TIMSignalingInvite("user", "custom data", true, json_offline_push_info, 30, invite_id_buffer,
- * [](int32_t code, const char* desc, const char* json_params, const void* user_data){
- * if (ERR_SUCC == code) {
- * // 邀请成功
- * } else {
- * // 邀请失败
- * }
- * }, nullptr);
- * @endcode
- */
- TIM_API int TIMSignalingInvite(const char* invitee, const char* data, bool online_user_only, const char* json_offline_push_info, int timeout, char* invite_id_buffer, TIMCommCallback cb, const void* user_data);
- /**
- * 4.2 邀请群内的某些人
- *
- * @param group_id 发起邀请所在群组
- * @param json_invitee_array 被邀请人列表,且被邀请人必须已经在群组内,否则邀请无效
- * @param data 自定义字段
- * @param online_user_only 是否只有在线用户才能收到邀请,如果设置为 true,只有在线用户才能收到,并且 invite 操作也不会产生历史消息(针对该次 invite 的后续 cancel、accept、reject、timeout 操作也同样不会产生历史消息)
- * @param timeout 超时时间,单位 s,如果设置为 0,SDK 不会做超时检测,也不触发 @ref TIMSignalingInvitationTimeoutCallback 回调
- * @param invite_id_buffer 出参,邀请ID,分配内存大小不能低于 128 字节,如果不需要,可传入 nullptr,调用接口后,可以读取到以 '\0' 结尾的字符串
- * @param cb 回调
- * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
- * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
- *
- * __示例__
- * @code{.cpp}
- * Json::Value json_invitee_array(Json::arrayValue);
- * json_invitee_array.append("user1");
- * json_invitee_array.append("user2");
- *
- * const size_t kMessageIDLength = 128;
- * char invite_id_buffer[kMessageIDLength] = {0};
- * int ret = TIMSignalingInviteInGroup("group_id", json_invitee_array, "custom data", true, 30, invite_id_buffer,
- * [](int32_t code, const char* desc, const char* json_params, const void* user_data){
- * if (ERR_SUCC == code) {
- * // 邀请成功
- * } else {
- * // 邀请失败
- * }
- * }, nullptr);
- * @endcode
- */
- TIM_API int TIMSignalingInviteInGroup(const char* group_id, const char* json_invitee_array, const char* data, bool online_user_only, int timeout, char* invite_id_buffer, TIMCommCallback cb, const void* user_data);
- /**
- * 4.3 邀请方取消邀请
- *
- * @param invite_id 邀请 ID
- * @param data 自定义字段
- * @param cb 回调
- * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
- * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
- *
- * @note 如果所有被邀请人都已经处理了当前邀请(包含超时),不能再取消当前邀请。
- *
- * __示例__
- * @code{.cpp}
- * const char *invite_id = "XXX-XXX-XXX-XXX";
- * int ret = TIMSignalingCancel(invite_id, "",
- * [](int32_t code, const char* desc, const char* json_params, const void* user_data){
- * if (ERR_SUCC == code) {
- * // 取消成功
- * } else {
- * // 取消失败
- * }
- * }, nullptr);
- * @endcode
- */
- TIM_API int TIMSignalingCancel(const char* invite_id, const char* data, TIMCommCallback cb, const void* user_data);
- /**
- * 4.4 被邀请方接受邀请
- *
- * @param invite_id 邀请 ID
- * @param data 自定义字段
- * @param cb 回调
- * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
- * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
- *
- * @note 不能接受不是针对自己的邀请,请在收到 @ref TIMSignalingReceiveNewInvitation 回调的时候先判断 json_invitee_array 有没有自己,如果没有自己,不能 accept 邀请。
- *
- * __示例__
- * @code{.cpp}
- * const char *invite_id = "XXX-XXX-XXX-XXX";
- * int ret = TIMSignalingAccept(invite_id, "",
- * [](int32_t code, const char* desc, const char* json_params, const void* user_data){
- * if (ERR_SUCC == code) {
- * // 接受邀请成功
- * } else {
- * // 接受邀请失败
- * }
- * }, nullptr);
- * @endcode
- */
- TIM_API int TIMSignalingAccept(const char* invite_id, const char* data, TIMCommCallback cb, const void* user_data);
- /**
- * 4.5 被邀请方拒绝邀请
- *
- * @param invite_id 邀请 ID
- * @param data 自定义字段
- * @param cb 回调
- * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
- * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
- *
- * @note 不能拒绝不是针对自己的邀请,请在收到 @ref TIMSignalingReceiveNewInvitation 回调的时候先判断 json_invitee_array 有没有自己,如果没有自己,不能 reject 邀请。
- *
- * __示例__
- * @code{.cpp}
- * const char *invite_id = "XXX-XXX-XXX-XXX";
- * int ret = TIMSignalingReject(invite_id, "",
- * [](int32_t code, const char* desc, const char* json_params, const void* user_data){
- * if (ERR_SUCC == code) {
- * // 拒绝邀请成功
- * } else {
- * // 拒绝邀请失败
- * }
- * }, nullptr);
- * @endcode
- */
- TIM_API int TIMSignalingReject(const char* invite_id, const char* data, TIMCommCallback cb, const void* user_data);
- /**
- * 4.6 获取信令信息
- *
- * @param json_msg 消息 json 字符串
- * @param json_signaling_info_cb 获取信令消息的回调,您可以在该回调中根据 code == ERR_SUCC 来确定当前 json_msg 为信令消息
- * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
- * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
- *
- * @note
- * 如果 invite 设置 online_user_only 为 false,每次信令操作(包括 invite、cancel、accept、reject、timeout)都会产生一条自定义消息,该消息会通过 @ref TIMRecvNewMsgCallback 抛给用户,用户也可以通过历史消息拉取,如果需要根据信令信息做自定义化文本展示,可以调用下面接口获取信令信息。
- *
- * __示例__
- * @code{.cpp}
- * const char *json_msg = "";
- * int ret = TIMGetSignalingInfo(json_msg,
- * [](int32_t code, const char* desc, const char* json_params, const void* user_data){
- * if (ERR_SUCC == code) {
- * // 当前消息是信令消息
- * } else {
- * // 当前消息为普通消息
- * }
- * }, nullptr);
- * @endcode
- */
- TIM_API int TIMGetSignalingInfo(const char *json_msg, TIMCommCallback json_signaling_info_cb, const void* user_data);
- /**
- * 4.7 修改邀请信令(6.7 及其以上版本支持)
- *
- * @note 仅支持修改邀请信令的自定义字段 data。只有在线用户才能收到的邀请信令不能被修改。
- *
- * __示例__
- * @code{.cpp}
- * const char *invite_id = "XXX-XXX-XXX-XXX";
- * int ret = TIMSignalingModifyInvitation(invite_id, "",
- * [](int32_t code, const char* desc, const char* json_params, const void* user_data){
- * if (ERR_SUCC == code) {
- * // 修改邀请成功
- * } else {
- * // 修改邀请失败
- * }
- * }, nullptr);
- * @endcode
- */
- TIM_API int TIMSignalingModifyInvitation(const char* invite_id, const char* data, TIMCommCallback cb, const void* user_data);
- /////////////////////////////////////////////////////////////////////////////////
- //
- // 五. 信令 API 参数相关的 Json Key 定义
- //
- /////////////////////////////////////////////////////////////////////////////////
- //------------------------------------------------------------------------------
- // 5.1 SignalingInfo(信令基础信息定义)
- // string, 只读, 邀请 ID
- static const char* kTIMSignalingInfoInviteID = "signaling_info_invite_id";
- // string, 只读, 群组 ID
- static const char* kTIMSignalingInfoGroupID = "signaling_info_group_id";
- // string, 只读, 邀请方的 ID
- static const char* kTIMSignalingInfoInviter = "signaling_info_inviter";
- // string, 只读, 被邀请方列表
- static const char* kTIMSignalingInfoInviteeList = "signaling_info_invitee_list";
- // string, 只读, 信令自定义内容
- static const char* kTIMSignalingInfoData = "signaling_info_data";
- // int @ref TIMSignalingActionType, 只读, 信令响应类型
- static const char* kTIMSignalingInfoActionType = "signaling_info_action_type";
- // int, 只读, 超时时间
- static const char* kTIMSignalingInfoTimeout = "signaling_info_timeout";
- #ifdef __cplusplus
- }
- #endif // __cplusplus
- #endif // SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_SIGNALING_MANAGER_H_
|