全局函数 | 函数名 |
---|---|
HMRState | HMRGetState() |
void | HMRInit(uint64_t appId) |
void | HMROpen(uint64_t uid, const char *region, const char *token, HMRCompletion completion) |
void | HMRClose() |
void | HMRRefreshToken(const char *token) |
void | HMRSetLogger(HMRLogFunction logFunction) |
void | HMRAddStateListener(HMRStateListener *listener) |
void | HMRRemoveStateListener(HMRStateListener *listener) |
const char * | HMRGetVersion() |
函数 | 函数名 |
---|---|
void | HMRCreateChatRoom(HMRCompletion completion) |
void | HMRCreateChatRoomWithInfo(HMRKvArray *info, HMRCompletion completion) |
void | HMRJoinChatRoom(uint64_t roomId, HMRCompletion completion) |
void | HMRJoinChatRoomWithMultiCheck(uint64_t roomId, bool isCheckMultiJoin, HMRCompletion completion) |
void | HMRJoinChatRoomWithConfigs(uint64_t roomId, const HMRKvItem *joinProps, int numerOfProperty, HMRCompletion completion) |
void | HMRLeaveChatRoom(uint64_t roomId, HMRCompletion completion) |
void | HMRChatRoomFetchBasicInfo:(uint64_t roomId, HMRCompletion completion) |
void | HMRChatRoomChangeBasicInfo(uint64_t roomId, HMRKvArray *info, HMRCompletion completion) |
void | HMRChatRoomFetchMembers(uint64_t roomId, int32_t num, int32_t offset, HMRCompletion completion) |
void | HMRChatRoomSetUserInfo(uint64_t roomId, HMRKvArray *infos, HMRCompletion completion) |
void | HMRChatRoomFetchOnLineUserInfoList(uint64_t roomId, HMRCompletion completion) |
void | HMRAddChatRoomListener(HMRChatRoomListener *listener) |
void | HMRRemoveChatRoomListener(HMRChatRoomListener *listener) |
void | HMRAddMemberListener(HMRChatRoomMemberListener *listener) |
void | HMRRemoveMemberListener(HMRChatRoomMemberListener *listener) |
HMRIdentity | HMRMakeChatRoomIdentity(uint64_t roomId) |
HMRCode | HMRExtractChatRoomId(HMRIdentity identity, uint64_t *roomId) |
bool | HMRIsChatRoom(HMRIdentity identity) |
HMRIdentity | HMRMakeChatRoomUser(uint64_t roomId, uint64_t userId) |
HMRCode | HMRExtractChatRoomUser(HMRIdentity identity, uint64_t *roomId, uint64_t *userId) |
bool | HMRIsChatRoomUser(HMRIdentity identity) |
全局函数 | 函数名 |
---|---|
void | HMRSendMessasge(HMRMessage *message, HMRCompletion completion) |
void | HMRAddMessageListener(HMRMessageListener *listener) |
void | HMRRemoveMessageListener(HMRMessageListener *listener) |
HMRMessage * | HMRCreateMessage(HMRIdentity receiver, HMRMessageContent content, HMRMessageExtra extra) |
void | HMRRetainMessage(HMRMessage *message) |
void | HMRReleaseMessage(HMRMessage *message) |
HMRMessageExtra | HMRMakeMessageExtra(const char *extra, int32_t length) |
bool | HMRIsMessageFailed(HMRMessage *message) |
HMRIdentity | HMRGetConversationTarget(HMRMessage *message) |
获取SDK当前状态,详见HMRState
HMR_API void HMRInit(uint64_t appId);
初始化 Hummer 实例并初始化
注意:
- 目前 SDK 只支持一个 Hummer 实例,每个应用程序仅应创建一个 Hummer 对象。
- Hummer 类的所有接口函数,如无特殊说明,都是异步调用,对接口的调用建议在同一个线程进行。
- 对于所有操作的回调,如无特殊说明,返回的HMRResult为 0 代表成功,否则为操作失败,具体的错误码及含义参见 HMRCode中的错误码定义。
参数 | 描述 |
---|---|
appId | 用于标识具体业务, 详见 获取AppID |
HMR_API void HMROpen(uint64_t uid, const char *region, const char *token, HMRCompletion completion);
登录SDK
参数 | 描述 |
---|---|
uid | 用户id, uid 不能为0 |
region | 需要连接服务器所处的环境参数,详情咨询相关SDK开发人员 |
token | 用于服务初始化时所需的用户凭证 |
completion | 完成后的处理回调 |
HMR_API void HMRClose();
登出SDK
HMR_API void HMRRefreshToken(const char *token);
刷新用户凭证
参数 | 描述 |
---|---|
token | 待刷新用户凭证 |
HMR_API void HMRSetLogger(HMRLogFunction logFunction);
设置 SDK 日志输出托管回调
注意:
- 业务可以通过该方法进行设置对应的 Logger,那么 SDK 则会将日志的输出和打印交给业务来处理
- 业务则需要保证日志的上报等,用于后期出现问题时可以查到具体的信息
参数 | 描述 |
---|---|
logFunction | SDK 日志输出回调, 详见HMRLogFunction |
HMR_API void HMRAddStateListener(HMRStateListener *listener);
添加 SDK 状态变更监听器
参数 | 描述 |
---|---|
listener | 待添加监听器, 详见 HMRStateListener |
HMR_API void HMRRemoveStateListener(HMRStateListener *listener);
移除 SDK 状态变更监听器
参数 | 描述 |
---|---|
listener | 待移除监听器, 详见 HMRStateListener |
HMR_API const char *HMRGetVersion();
获取 SDK 版本信息
HMR_API void HMRCreateChatRoom(HMRCompletion completion);
创建聊天室
注意:
- 由于聊天室模块的所需的聊天室必须要通过创建才能使用,故需要对应的创建聊天室接口。
- 在创建聊天室完成后,服务器会返回对应的聊天室标识,用于后续在使用聊天室时的标识。
- 同时在创建聊天室时需要提供对应的聊天室信息,如名称、描述、公告以及扩展信息等。
- 默认容量上限:
一个AppId创建聊天室个数:100w个
单个聊天室对应人数:10w个- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
completion | 创建完成后的回调,其中创建成功后会携带对应的 聊天室标识 返回给业务,用于后面聊天室操作中使用;同时在创建失败后,回调中也携带了对应的失败原因 |
HMR_API void HMRCreateChatRoomWithInfo(HMRKvArray *info, HMRCompletion completion);
创建聊天室,并配置聊天室信息
注意:
- 由于聊天室模块的所需的聊天室必须要通过创建才能使用,故需要对应的创建聊天室接口。
- 在创建聊天室完成后,服务器会返回对应的聊天室标识,用于后续在使用聊天室时的标识。
参数 | 描述 |
---|---|
info | 聊天室信息对象,包含名称、描述、公告以及扩展信息 ,详见HMRChatRoomBasicInfoType |
completion | 创建完成后的回调,其中创建成功后会携带对应的 聊天室标识 返回给业务,用于后面聊天室操作中使用;同时在创建失败后,回调中也携带了对应的失败原因 |
HMR_API void HMRJoinChatRoom(uint64_t roomId, HMRCompletion completion);
加入聊天室
注意:
- 对应聊天室操作都需要进入聊天室之后才能正常的操作,如发公屏、发信令以及接受信令都要进入聊天室之后才能正常处理。
- 加入聊天室会涉及多端互踢的逻辑,相关互踢逻辑请咨询后台配置。
- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
roomId | 聊天室标识符 |
completion | 加入聊天室完成后的回调,业务可以根据对应的加入结果做不同的业务处理,加入失败时也会携带对应的错误原因 |
HMR_API void HMRJoinChatRoomWithMultiCheck(uint64_t roomId, bool isCheckMultiJoin, HMRCompletion completion);
加入聊天室,并检测当前用户是否重复登陆
注意:
- 由于目前聊天室只支持单端以及多端进入聊天室,对应具体的配置可以找后台的相关同学进行对应的配置。对于单端进入聊天室则第二个进入聊天室的用户会将第一个进入聊天室的用户踢出聊天室。在加入聊天室之后,希望离开聊天室可以调用 HMRLeaveChatRoom 离开聊天室的接口。
- 并且需要操作都需要进入聊天室之后才能正常的操作,如发公屏、发信令以及接受信令都要进入聊天室之后才能正常处理。
- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
roomId | 聊天室标识符 |
isCheckMultiJoin | 是否检测重复登陆 |
completion | 加入聊天室完成后的回调,业务可以根据对应的加入结果做不同的业务处理,加入失败时也会携带对应的错误原因 |
HMR_API void HMRJoinChatRoomWithConfigs(uint64_t roomId, const HMRKvItem *joinProps, int numerOfProperty, HMRCompletion completion);
加入聊天室,并指定扩展信息
注意:
- 由于目前聊天室只支持单端以及多端进入聊天室,对应具体的配置可以找后台的相关同学进行对应的配置。对于单端进入聊天室则第二个进入聊天室的用户会将第一个进入聊天室的用户踢出聊天室。在加入聊天室之后,希望离开聊天室可以调用 HMRLeaveChatRoom 离开聊天室的接口。
- 并且需要操作都需要进入聊天室之后才能正常的操作,如发公屏、发信令以及接受信令都要进入聊天室之后才能正常处理。
- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
roomId | 聊天室标识符 |
joinProps | 扩展字段,用于业务扩展,SDK 只负责透传 |
numerOfProperty | 扩展字段数量 |
completion | 加入聊天室完成后的回调,业务可以根据对应的加入结果做不同的业务处理,加入失败时也会携带对应的错误原因 |
HMR_API void HMRLeaveChatRoom(uint64_t roomId, HMRCompletion completion);
退出聊天室
注意:
- 在进入聊天室后处理完所有需要处理的逻辑后,可以通过离开聊天室来结束跟聊天室之间的交互,同时也会停止监听聊天室的公屏、信令消息和对应的回调通知。
参数 | 描述 |
---|---|
roomId | 聊天室标识符 |
completion | 离开聊天室完成后的回调,业务可以根据对应的离开结果做不同的业务处理,离开失败时也会携带对应的错误原因 |
HMR_API void HMRChatRoomFetchBasicInfo(uint64_t roomId, HMRCompletion completion);
获取聊天室基本属性信息
注意:
- 获取聊天室信息可以获取到对应聊天室的名称、描述、公告以及对应的扩展字段信息。
- 获取聊天室信息无需进入聊天室也可以获取。
参数 | 描述 |
---|---|
roomId | 聊天室标识符 |
completion | 获取完成后的回调,业务可以根据对应的获取结果做不同的业务逻辑处理,聊天室信息会通过completion回调方法的var参数回传(HMRKvArray*)(var.ptrValue) ,详见HMRKvArray |
HMR_API void HMRChatRoomChangeBasicInfo(uint64_t roomId, HMRKvArray *info, HMRCompletion completion);
变更聊天室基本属性信息
注意:
- 可以修改一个或多个属性,只需要在参数中指定需要修改的聊天室信息的键值对即可。
- 需要
房主
或者管理员
的角色。- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
roomId | 聊天室标识符 |
info | 修改的属性值,其中key值参见枚举详见:HMRChatRoomBasicInfoType |
completion | 改完成后的回调,业务可以根据对应的修改结果做不同的业务处理 |
HMR_API void HMRChatRoomFetchMembers(uint64_t roomId, int32_t num, int32_t offset, HMRCompletion completion);
获取聊天室在线成员列表
注意:
- 由于一些场景下,一个聊天室的内的成员可能有十几万,故聊天室 SDK 提供了对应的按需分页获取成员的结果。同时也会按照一定的默认规则来进行排序对应的成员列表。
- 获取成员列表的接口,可以在不进入聊天室时也可以获取。
- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
chatRoom | 聊天室标识符 |
offset | 第几页 (第一页从0开始) |
num | 设置每页的返回成员数(建议不超过200) |
completion | 获取完成后的回调,业务可以根据对应的获取的结果来做不同的业务处理,成员列表会通过completion回调方法的var参数回传(HMRIdArray*)(var.ptrValue) ,详见HMRIdArray |
HMR_API void HMRChatRoomSetUserInfo(uint64_t roomId, HMRKvArray *infos, HMRCompletion completion);
设置自己的用户信息
注意:
- 容量上限:
设置用户属性,最大支持属性个数:32个
单个用户属性的最大值:8k- 单个用户调用频率限制:10次/5s
参数 | 描述 |
---|---|
roomId | 成员所在的聊天室 |
infos | 用户信息:最大个数为32个 |
completion | 设置信息返回的回调,可以根据错误码进行处理 |
HMR_API void HMRChatRoomFetchOnLineUserInfoList(uint64_t roomId, HMRCompletion completion);
获取聊天室已设置用户信息的在线成员列表
注意:
- 获取的人员列表最多返回100个,超过100个的随机返回100个
参数 | 描述 |
---|---|
roomId | 待查询聊天室 |
completion | 完成后的回调,业务可以根据对应判断结果来做不同的业务处理 聊天室用户信息列表会通过completion回调方法的var参数回传(HMRChatRoomOnLineUserInfoList*)(var.ptrValue) ,详见HMRChatRoomOnLineUserInfoList |
HMR_API void HMRAddChatRoomListener(HMRChatRoomListener *listener);
添加聊天室回调监听器
参数 | 描述 |
---|---|
listener | 监听器对象, 详见 HMRChatRoomListener |
HMR_API void HMRRemoveChatRoomListener(HMRChatRoomListener *listener);
移除聊天室回调监听器
参数 | 描述 |
---|---|
listener | 监听器对象, 详见 HMRChatRoomListener |
HMR_API void HMRAddMemberListener(HMRChatRoomMemberListener *listener);
添加聊天室成员回调监听器
参数 | 描述 |
---|---|
listener | 监听器对象. 详见 HMRChatRoomMemberListener |
HMR_API void HMRRemoveMemberListener(HMRChatRoomMemberListener *listener);
移除聊天室成员的回调监听器
参数 | 描述 |
---|---|
listener | 监听器对象, 详见 HMRChatRoomMemberListener |
HMR_API HMRIdentity HMRMakeChatRoomIdentity(uint64_t roomId);
构造一个聊天室Identity对象
参数 | 描述 |
---|---|
roomId | 聊天室标识 |
HMR_API HMRCode HMRExtractChatRoomId(HMRIdentity identity, uint64_t *roomId);
从聊天室Identity对象中抽取聊天室Id值
参数 | 描述 |
---|---|
identity | 聊天室标识 |
roomId | 解析的聊天室id |
HMR_API bool HMRIsChatRoom(HMRIdentity identity);
判断一个identity对象是否表示一个聊天室
参数 | 描述 |
---|---|
identity | 聊天室标识 |
HMR_API HMRIdentity HMRMakeChatRoomUser(uint64_t roomId, uint64_t userId);
构造一个聊天室用户Identity对象
参数 | 描述 |
---|---|
roomId | 聊天室标识 |
userId | 用户标识 |
HMR_API HMRCode HMRExtractChatRoomUser(HMRIdentity identity, uint64_t *roomId, uint64_t *userId);
从聊天室用户Identity对象中抽取用户Id值
参数 | 描述 |
---|---|
identity | 聊天室标识 |
roomId | 解析的聊天室id |
userId | 解析的用户id |
HMR_API bool HMRIsChatRoomUser(HMRIdentity identity);
判断一个identity对象是否表示一个聊天室用户
参数 | 描述 |
---|---|
identity | 聊天室标识 |
HMR_API void HMRSendMessasge(HMRMessage *message, HMRCompletion completion);
发送消息接口:支持发送公屏消息(只支持文本消息)、单播、广播
注意:
- 业务可以通过自己构造消息体,并且填写对应的消息内容将该消息发送出去
- 该接口也可以在消息发送失败的情况下进行重发消息
- 单个用户调用频率限制:
发送公屏消息:10次/5s
发送自定义单播消息:50次/5s
发送自定义广播消息:50次/5s- 容量上限:
单播单条消息最大长度:2k
广播单条消息最大长度:2k
参数 | 描述 |
---|---|
message | 消息实例, 详见HMRMessage |
completion | 发送操作的完成回调 |
completion
回调只处理了最终完成回调,但消息发送过程中可能会有多个阶段/状态。可以通过监听HMRMessageListener来得到相应的回调。
HMR_API void HMRAddMessageListener(HMRMessageListener *listener);
添加一个消息收发监听器
参数 | 描述 |
---|---|
listener | 欲增加的listener对象,如果此前该listener已经添加,则addListener相当于空操作, 详见HMRMessageListener |
HMR_API void HMRRemoveMessageListener(HMRMessageListener *listener);
移除一个消息收发监听器
参数 | 描述 |
---|---|
listener | 欲移除的listener对象,如果该listener不存在,则什么都不会发生, 详见HMRMessageListener |
HMR_API HMRMessage *HMRCreateMessage(HMRIdentity receiver, HMRMessageContent content, HMRMessageExtra extra);
创建一条消息
参数 | 描述 |
---|---|
receiver | 消息接收者,详见HMRIdentity |
content | 消息内容,详见HMRMessageContent |
extra | 消息扩展内容,详见HMRMessageExtra |
HMR_API void HMRRetainMessage(HMRMessage *message);
持有一条消息的引用
参数 | 描述 |
---|---|
message | 待持有消息实例,详见HMRMessage |
HMR_API void HMRReleaseMessage(HMRMessage *message);
释放一条消息的引用
参数 | 描述 |
---|---|
message | 待持有消息实例,详见HMRMessage |
HMR_API HMRMessageExtra HMRMakeMessageExtra(const char *extra, int32_t length);
构造消息扩展内容
参数 | 描述 |
---|---|
extra | 扩展内容 |
length | 扩展内容长度 |
HMR_API bool HMRIsMessageFailed(HMRMessage *message);
判断消息是否为失败状态
参数 | 描述 |
---|---|
message | 消息实例,详见HMRMessage |
HMR_API HMRIdentity HMRGetConversationTarget(HMRMessage *message);
根据消息对象获取其对应的会话目标
参数 | 描述 |
---|---|
message | 消息实例,详见HMRMessage |
enum HMRState
SDK 状态
枚举值 | 含义 |
---|---|
HMRStateUnavailable(-1) | 不可用状态, 当 SDK 未初始化时则处于该状态 |
HMRStateClosed(0) | 已关闭 |
HMRStateOpening(1) | 正在打开 |
HMRStateOpened(2) | 已打开 |
enum HMRConnectionState
SDK 状态
typedef void(*HMRLogFunction)(const char *message);
日志输出回调方法指针
参数 | 描述 |
---|---|
message | 待输出日志 |
struct HMRCompletion {
// 异步请求的上下文对象指针,一般为发起异步操作的对象指针
void *context;
// 业务在构造completion时自行传入的请求id标示。该id的唯一性由业务自行保证。通常用于帮助业务进行异步请求上下文映射和恢复
uint64_t requestId;
// 用于实际执行回调的函数指针
HMROnComplete onComplete;
// Hummer内部辅助数据,业务方请勿修改或使用
void *reserved;
};
请求操作异步回调
成员 | 含义 |
---|---|
context | 异步请求的上下文对象指针 |
requestId | 业务在构造completion时自行传入的请求id标示 |
onComplete | 用于实际执行回调的函数指针 |
reserved | 内部预留字段 |
typedef void (*HMROnComplete)(void* context, uint64_t requestId, HMRResult result, HMRVariant var);
异步操作回调的函数指针
参数 | 描述 |
---|---|
context | 异步请求的上下文对象指针 |
requestId | 业务在构造completion时自行传入的请求id标示 |
result | 异步操作的操作结果对象,一般用于表示该操作是否成功,以及具体的错误原因等 |
var | 一个多态的简单数据结构,其取值视不同的异步API而不同,该值有不同的解释 |
struct HMRResult {
// 请查看上面的错误码表定义
HMRCode code;
// 对code的可读文本解释,ANSI编码
char msg[256];
};
操作结果
参数 | 描述 |
---|---|
code | 错误码 |
msg | 对code的可读文本解释,ANSI编码 |
union HMRVariant {
void *ptrValue;
char *stringValue;
uint32_t intValue;
uint64_t longValue;
};
一个多态的简单数据结构,其取值视不同的异步API而不同,该值有不同的解释,具体解读,应参照对应上下文的API文档
参数 | 描述 |
---|---|
ptrValue | 指针数据 |
stringValue | 字符串数据 |
intValue | 整形数据 |
longValue | 长整形数据 |
struct HMRKvItem {
const char* key;
const char* value;
};
键值对信息
struct HMRKvArray {
uint32_t len;
HMRKvItem *items;
};
键值对数组
struct HMRIdArray
{
uint32_t len;
uint64_t* ids;
};
ID数组
struct HMRIdentity {
// string用于存放多种id类型的字符串表示
// 例如表示:
// 用户1234: user_1234
// 聊天室8876: chatroom_8876
// 具体內容的构造、解析,应始终使用HMRMakeXXXIdentity系列/HMRExtractXXXId类型的工厂方法,而不是认为直接生成。例如HMRMakeUserIdentity
char string[128];
};
Hummer内部实体标识
参数 | 描述 |
---|---|
string | 实体标识 |
static const char *HMRChatRoomBasicInfoTypeName = "Name";
static const char *HMRChatRoomBasicInfoTypeDescription = "Description";
static const char *HMRChatRoomBasicInfoTypeBulletin = "Bulletin";
static const char *HMRChatRoomBasicInfoTypeAppExtra = "AppExtra";
聊天室基础信息的常量字段:主要用来修改聊天室信息和监听聊天室信息时候,可以标识那个字段发生变化/需要修改
常量值 | 含义 |
---|---|
HMRChatRoomBasicInfoTypeName | 聊天室名字 |
HMRChatRoomBasicInfoTypeDescription | 聊天室描述 |
HMRChatRoomBasicInfoTypeBulletin | 聊天室公告 |
HMRChatRoomBasicInfoTypeExtention | 聊天室扩展字段(最大1K) |
struct HMRChatRoomOnLineUserInfo {
uint64_t uid;
HMRKvArray *info;
};
聊天室在线用户信息
参数 | 描述 |
---|---|
[uid] | 用户标识 |
[info] | 用户信息,详见HMRKvArray |
struct HMRChatRoomOnLineUserInfoList {
uint32_t len;
HMRChatRoomOnLineUserInfo *users;
};
聊天室在线用户信息数组
参数 | 描述 |
---|---|
[len] | 用户数量 |
[users] | 用户信息,详见HMRChatRoomOnLineUserInfo |
struct HMRUUID {
// 有效长度为36字节:16 * 2 (bytes) + 4 (delimiters) + 1 (terminator),但考虑到内存对齐问题,使用40字节
char string[40];
};
消息唯一标识
参数 | 描述 |
---|---|
string | 消息标识 |
const int32_t HMRMessageStateInit = 0;
const int32_t HRMMessageStateDelivering = 2;
const int32_t HMRMessageStateArchived = 3;
常量值 | 含义 |
---|---|
HMRMessageStateInit(0) | 初始化状态,该状态下的消息可被发送 |
HRMMessageStateDelivering(2) | 发送中,该状态下的消息当前不可再被发送、转发 |
HMRMessageStateArchived(3) | 归档状态,表示该消息已被成功发送,或者是一条接收自其它端的消息,可以被重发、转发 |
struct HMRMessage {
// if (state <= HMRMessageStateArchived && state >= 0)
// 表示确定的非失败状态,否则state值应表示发送失败,具体值为HMRCode的错误码一致
int32_t state;
// 消息的唯一标识符,该标识符通常是由消息发送方产生的,可帮助进行消息去重、定位等
HMRUUID uuid;
// 消息时间戳,对聊天室消息来说,取值都以本地时间为准。则意味着需要避免用它来进行
// 严格的消息排序,否则可能因为恶意篡改导致排序异常
uint64_t timestamp;
// 消息发送方标识,大部分情况下是一个User,也可能是业务自定义的类型,如系统服务官方号等
HMRIdentity sender;
// 消息接收目标标识,虽然是当前设备接收到消息,但也有可能是ChatRoom等群关系消息
HMRIdentity receiver;
// 消息内容的完整负载,在实际处理时,应该通过不同的Content类型提供的来进行
// 动态判别(例如HMRIsTextContent)。除非是业务自身拓展的类型,否则应避免直接手工解析和构造
HMRMessageContent content;
// 每条消息都可以携带一定的业务透传信息,以便实现如“消息发送方头像、昵称”等数据的传递,帮助
// 降低业务服务器的访问压力
HMRMessageExtra extra;
// Hummer SDK 内部使用的保留字段,业务方应禁止访问、修改该数据
void *reserved;
};
消息实例定义
注意:
HMRMessage对象的资源管理使用引用计数方式来实现。 因此,对于发送的消息来说,业务应自行管理其释放
- 如果希望持有Hummer接收到的消息,应该通过调用HMRRetainMessage来保持其引用
- 如果不再需要使用,应调用HMRReleaseMessage来解除对该消息的引用
参数 | 描述 |
---|---|
state | 消息状态,详见HMRMessageState |
uuid | 消息的唯一标识符,详见HMRUUID |
timestamp | 消息时间戳 |
sender | 消息发送方标识,详见HMRIdentity |
receiver | 消息接收方标识,详见HMRIdentity |
content | 消息内容,详见HMRMessageContent |
extra | 消息扩展内容,详见HMRMessageExtra |
reserved | SDK预留字段 |
const int32_t HMRMessageContentSize = 2048;
struct HMRMessageContent {
char data[HMRMessageContentSize]; // 消息内容缓冲区
uint16_t availableSize; // 缓冲区中有效数据的数量
};
消息内容定义
注意:
- 消息内容结构,每个消息携带的内容是多态的,有可能是文本、信令等。
- 应尽可能使用内容定义模块(如ContentText, ContentSignal)的构造、解析方法来进行内容的处理,而不是手动解析和构造
- 虽然data是char数组,但并不意味它一定是一个ANSI文本“字符串”。很多时候,它可能存放utf-8编码的字符串,例如HMRTextContent
- 应谨慎处理消息最大长度问题,避免访问越界
参数 | 描述 |
---|---|
data | 内容缓冲区 |
availableSize | 缓冲区中有效数据的数量 |
const int32_t HMRMessageExtraSize = 1024; // 消息业务携带数据的缓冲区大小
struct HMRMessageExtra {
// Extra数据缓冲区
char data[HMRMessageExtraSize];
// Extra数据的有效字节数
uint16_t availableSize;
};
消息扩展内容定义
参数 | 描述 |
---|---|
data | 内容缓冲区 |
availableSize | 缓冲区中有效数据的数量 |