HMR

HMR.getState

获取SDK当前状态,详见HMR.State

public static State getState()
返回

SDK当前状态


HMR.init

public static void init(@NonNull final Context appContext, final long appId) 

初始化Hummer

注意:

Hummer 类的所有接口函数,如无特殊说明,都是异步调用,对接口的调用建议在同一个线程进行。

参数
参数描述
appContext上下文环境
appId用于标识具体业务, 目前需要和 Hummer 服务提供方通过人工申请

HMR.open

public static void open(final long uid,
                  @NonNull final String region,
                  @Nullable final Set<String> tags,
                  @NonNull final String token,
                  @Nullable final HMR.Completion completion)

登录SDK,同时开始监听服务器消息以及拉取对应消息数据

参数
参数描述
uid用户id, uid 不能为0
region需要连接服务器所处的环境参数,详情咨询相关SDK开发人员
tags保留字段,暂时可以填空集合
token用于服务初始化时所需的用户凭证
completion完成后的处理回调

HMR.close

public static void close(@Nullable final Completion completion)

登出SDK

注意:

  • 登出SDK是一个异步操作
  • 应该在completion回调中处理错误的情况
参数
参数描述
completion完成后的处理回调

HMR.refreshToken

public static void refreshToken(@NonNull final String token)

废弃

注意:

该方法已弃用,请改用 refreshToken(String token, HMR.Completion completion)

刷新用户凭证

参数
参数描述
token待刷新的用户凭证

[New]HMR.refreshToken

public static void refreshToken(@NonNull final String token,
																@Nullable final HMR.Completion completion)

刷新用户凭证

参数
参数描述
token待刷新的用户凭证
completion回调,会返回对应错误码,业务需要对错误码进行处理

HMR.addStateListener

public static void addStateListener(@NonNull final StateListener listener)

添加 SDK 状态变更监听器

参数
参数描述
listener待添加的监听器, 详见 StateListener

HMR.removeStateListener

public static void removeStateListener(@NonNull final StateListener listener)

移除 SDK 状态变更监听器

参数
参数描述
listener待移除的监听器, 详见 StateListener

HMR.addTokenInvalidListener

public static void addTokenInvalidListener(@NonNull final TokenInvalidListener listener)

添加 token过期监听器

参数
参数描述
listener待添加的监听器, 详见 TokenInvalidListener

HMR.removeTokenInvalidListener

public static void removeTokenInvalidListener(@NonNull final TokenInvalidListener listener)

移除 token 过期监听器

参数
参数描述
listener待移除的监听器, 详见TokenInvalidListener

HMR.getVersion

public static String getVersion()

获取 SDK 版本信息

返回
  • SDK版本信息

HMR.getService

public static <Service> Service getService(@NonNull Class<Service> serviceClass)

获取服务实例

返回

服务实例


HMR.State

public enum State { }

SDK 当前状态

枚举值含义
Unavailable不可用状态, 当 SDK 未初始化时则处于该状态
Opening正在打开
Opened已打开
Closing正在关闭
Closed已关闭

ChannelStateService

ChannelStateService.getState

public ChannelState getState()

获取当前连接状态,详见ChannelStateService.ChannelState

返回

SDK当前连接状态


ChannelStateService.addChannelStateListener

public void addChannelStateListener(@NonNull ChannelStateListener listener)

添加 连接 状态变更监听器

参数
参数描述
listener待添加的监听器, 详见 ChannelStateListener

ChannelStateService.removeChannelStateListener

public void removeChannelStateListener(@NonNull ChannelStateListener listener)

移除 连接 状态变更监听器

参数
参数描述
listener待移除的监听器, 详见 ChannelStateListener

ChatRoomService

ChatRoomService.setRegion

void setRegion(String region);

设置聊天室区域

注意:

  • 需要在使用聊天室相关功能之前调用设置
  • 未设置将默认中国区域
参数
参数描述
region聊天室区域

ChatRoomService.createChatRoom

void createChatRoom(@NonNull ChatRoomInfo chatRoomInfo,
                    @NonNull HMR.CompletionArg<ChatRoom> completion);

创建聊天室

注意:

  • 由于聊天室模块的所需的聊天室必须要通过创建才能使用,故需要对应的创建聊天室接口。
  • 在创建聊天室完成后,服务器会返回对应的聊天室标识,用于后续在使用聊天室时的标识。
  • 同时在创建聊天室时需要提供对应的聊天室信息,如名称、描述、公告以及扩展信息等。
参数
参数描述
chatRoomInfo聊天室信息对象,包含名称、描述、公告以及扩展信息 ,详见ChatRoomInfo
completion一个 CompletionArg 对象
- 方法调用成功:本地用户收到回调 onSuccess。
- 方法调用失败:本地用户收到回调 onFailed。错误码详见Code

ChatRoomService.dismissChatRoom

void dismissChatRoom(@NonNull ChatRoom chatRoom,
                     @Nullable HMR.Completion completion);

解散聊天室

注意:

  • 销毁时需要提供对应的聊天室标识用于服务器识别对应的聊天室,并正常销毁。
  • 销毁需要 Owner 权限
  • 单个用户调用频率限制:10次/5s
参数
参数描述
chatRoom聊天室标识符
completion一个 Completion 对象
- 方法调用成功:本地用户收到回调 onSuccess。
- 方法调用失败:本地用户收到回调 onFailed。错误码详见Code

ChatRoomService.join

void join(@NonNull ChatRoom chatRoom,
          @NonNull Map<String, String> joinProps,
          @NonNull Challenges.JoiningCompletion completion);

加入聊天室

注意:

  • 对应聊天室操作都需要进入聊天室之后才能正常的操作,如发公屏、发信令以及接受信令都要进入聊天室之后才能正常处理。

  • 加入聊天室会涉及多端互踢的逻辑,相关互踢逻辑请咨询后台配置。

  • 单个用户进入聊天室:10次/5s

参数
参数描述
chatRoom聊天室标识符
joinProps扩展字段,用于业务扩展,SDK 只负责透传
completion一个 JoiningCompletion 对象
- 方法调用成功:本地用户收到回调 onSucceed。
- 方法调用失败:本地用户收到回调 onFailure。错误码详见Code

ChatRoomService.leave

void leave(@NonNull ChatRoom chatRoom, @Nullable HMR.Completion completion);

退出聊天室

注意:

在进入聊天室后处理完所有需要处理的逻辑后,可以通过离开聊天室来结束跟聊天室之间的交互,同时也会停止监听聊天室的公屏、信令消息和对应的回调通知。

参数
参数描述
chatRoom聊天室标识符
completion一个 Completion 对象
- 方法调用成功:本地用户收到回调 onSuccess。
- 方法调用失败:本地用户收到回调 onFailed。错误码详见Code

ChatRoomService.kick

void kick(@NonNull ChatRoom chatRoom,
          @NonNull User member,
          @Nullable Map<EKickInfo, String> extraInfo,
          @NonNull HMR.Completion completion);

将用户踢出聊天室

注意:

  • 踢出成员需要对应的角色(Admin 和 Owner) 才可以踢出对应的成员,并且 Admin 不可以踢出 Admin 和 Owner, 而 Owner 可以踢出聊天室内所有成员。角色定义详见:Roles

  • 并且踢出成员以及被踢出的成员都需要在聊天室内可以操作。

  • 踢出成功后,SDK 后台并不会限制该成员无法进入,但是 SDK 会透传给业务服务器,由业务服务器做决定是否允许进入聊天室。

  • 单个用户调用频率限制:10次/5s

参数
参数描述
chatRoom聊天室标识符
member踢出的聊天室成员
extraInfo踢人的额外信息。key值详见EKickInfo
目前支持的Key主要是两个:
1. Reason, 用于携带踢人原因的 Key, 其 Key 对应的 Value 只需填写对应的踢人原因的字符串即可;
2. Time 用于携带限制时长的 Key(单位:秒), 其 Key 对应的 Value 只需要填写踢人限制时长的秒数转换成字符串即可, 这些字段都是透传字段,服务器不做处理
completion一个 Completion 对象
- 方法调用成功:本地用户收到回调 onSuccess。
- 方法调用失败:本地用户收到回调 onFailed。错误码详见Code

ChatRoomService.addRole

void addRole(@NonNull ChatRoom chatRoom,
             @NonNull User member,
             @NonNull String role,
             @NonNull HMR.Completion completion);

添加聊天室权限角色

注意:

  • 聊天室的 Owner 可以给对应的成员添加 Admin 的角色,但是 Admin 没办法给普通成员添加 Admin 的角色。角色定义详见:Roles
  • 单个用户调用频率限制:10次/5s
参数
参数描述
chatRoom聊天室标识符
member被添加角色的聊天室成员
role角色类型,目前只能填写 Admin,详情见ChatRoomService.Roles
completion一个 Completion 对象
- 方法调用成功:本地用户收到回调 onSuccess。
- 方法调用失败:本地用户收到回调 onFailed。错误码详见Code

ChatRoomService.removeRole

void removeRole(@NonNull ChatRoom chatRoom,
                @NonNull User member,
                @NonNull String role,
                @NonNull HMR.Completion completion);

移除聊天室权限角色

注意:

  • 聊天室的 Owner 才可以移除对应的 Admin 角色,但是 Admin 没办法给 Admin 移除角色。角色定义详见:Roles
  • 单个用户调用频率限制:10次/5s
参数
参数描述
chatRoom聊天室标识符
member被移除角色的聊天室成员
role角色类型, 目前只能填写 Admin,详情见ChatRoomService.Roles
completion一个 Completion 对象
- 方法调用成功:本地用户收到回调 onSuccess。
- 方法调用失败:本地用户收到回调 onFailed。错误码详见Code

ChatRoomService.fetchMembers

void fetchMembers(@NonNull ChatRoom chatRoom, 
                  int num, 
                  int offset,
                  @NonNull HMR.CompletionArg<List<User>> completion);

获取聊天室在线成员列表

注意:

  • 由于一些场景下,一个聊天室的内的成员可能有十几万,故聊天室 SDK 提供了对应的按需分页获取成员的结果。同时也会按照一定的默认规则来进行排序对应的成员列表。
  • 获取成员列表的接口,可以在不进入聊天室时也可以获取。
  • 单个用户调用频率限制:10次/5s
参数
参数描述
chatRoom聊天室标识符
num设置每页的返回成员数(建议不超过200)
offset第几页 (第一页从0开始)
completion一个 CompletionArg 对象
- 方法调用成功:本地用户收到回调 onSuccess。
- 方法调用失败:本地用户收到回调 onFailed。错误码详见Code

ChatRoomService.fetchRoleMembers

void fetchRoleMembers(@NonNull ChatRoom chatRoom, 
                      boolean online,
                      @NonNull HMR.CompletionArg<Map<String, List<User>>> completion);

获取聊天室带有角色的成员列表

注意:

  • 获取可以根据需要拉取对应的角色列表,业务可以根据对应的角色列表在界面上展示不同的UI界面以及赋予对应角色权限。

  • 获取角色列表无需进入聊天室后获取,进入聊天室前即可获取。

  • 单个用户调用频率限制:10次/5s

参数
参数描述
chatRoom聊天室标识符
online是否只获取在线的成员:
true:只获取在线的、有角色的列表
false:获取所有带有角色的成员列表
completion一个 Completion 对象
- 方法调用成功:本地用户收到回调 onSuccess。
- 方法调用失败:本地用户收到回调 onFailed。错误码详见Code

ChatRoomService.fetchBasicInfo

void fetchBasicInfo(@NonNull ChatRoom chatRoom,
                    @NonNull HMR.CompletionArg<ChatRoomInfo> completion);

获取聊天室基本属性信息

注意:

  • 获取聊天室信息可以获取到对应聊天室的名称、描述、公告以及对应的扩展字段信息。
  • 获取聊天室信息无需进入聊天室也可以获取。
  • 单个用户调用频率限制:10次/5s
参数
参数描述
chatRoom聊天室标识符
completion一个 CompletionArg 对象
- 方法调用成功:本地用户收到回调 onSuccess。
- 方法调用失败:本地用户收到回调 onFailed。错误码详见Code

ChatRoomService.fetchChatRoomInfo

void fetchChatRoomInfo(@NonNull ChatRoom chatRoom,
                       @Nullable HMR.CompletionArg<Map<String, String>> completion);

获取聊天室全部属性信息

参数
参数描述
chatRoom聊天室标识符
completion获取完成后的回调,业务可以根据对应的获取结果做不同的业务逻辑处理,在获取成功后可以从对应的参数中获取到对应的聊天室信息

ChatRoomService.fetchMemberCount

void fetchMemberCount(@NonNull ChatRoom chatRoom,
                      @NonNull HMR.CompletionArg<Integer> completion);

获取聊天室人数

参数
参数描述
chatRoom聊天室标识符
completion获取完成后的回调

ChatRoomService.changeBasicInfo

void changeBasicInfo(@NonNull ChatRoom chatRoom,
                     @NonNull Map<ChatRoomInfo.BasicInfoType, String> propInfo,
                     @NonNull HMR.Completion completion);

变更聊天室基本属性信息

注意:

  • 可以修改一个或多个属性,只需要在参数中指定需要修改的聊天室信息的键值对即可。
  • 需要 Admin 或者 Owner 的角色。角色定义详见:Roles
  • 单个用户调用频率限制:10次/5s
参数
参数描述
chatRoom聊天室标识符
propInfo修改的属性值,其中key值参见枚举详见:ChatRoomInfo.BasicInfoType
completion一个 Completion 对象
- 方法调用成功:本地用户收到回调 onSuccess。
- 方法调用失败:本地用户收到回调 onFailed。错误码详见Code

ChatRoomService.addOrUpdateChatRoomInfo

void addOrUpdateChatRoomInfo(@NonNull ChatRoom chatRoom,
                             @NonNull Map<String, String> infoMap,
                             @Nullable HMR.Completion completion);

更新指定聊天室的属性信息

注意:

属性信息存在则更新;不存在则添加

参数
参数描述
chatRoom聊天室标识符
infoMap修改的属性值,可自定义
completion改完成后的回调,业务可以根据对应的修改结果做不同的业务处理

ChatRoomService.muteMember

void muteMember(@NonNull ChatRoom chatRoom,
                @NonNull User member,
                @Nullable String reason,
                @NonNull HMR.Completion completion);

禁言聊天室内的成员

注意:

  • 业务可以根据对应的需要禁言某个成员,目前后台默认的禁言时间为三天,到期自动解禁。
  • 禁言需要 Admin 或者 Owner 的角色, Owner 可以禁言聊天室内的所有人包括 Admin, 而 Admin 则只可以禁言普通成员。角色定义详见:Roles
  • 禁言的成员需要在聊天室内。
  • 单个用户调用频率限制:10次/5s
参数
参数描述
chatRoom成员所在的聊天室
member需要禁言的成员
reason禁言的原因
completion一个 Completion 对象
- 方法调用成功:本地用户收到回调 onSuccess。
- 方法调用失败:本地用户收到回调 onFailed。错误码详见Code

ChatRoomService.unmuteMember

void unmuteMember(@NonNull ChatRoom chatRoom,
                  @NonNull User member,
                  @Nullable String reason,
                  @NonNull HMR.Completion completion);

解禁聊天室内的成员

注意:

  • 解禁的成员需要在聊天室内
  • 解除禁言需要 Admin 或者 Owner 的角色, Owner 可以解禁聊天室内的所有人包括 Admin, 而 Admin 则只可以解禁普通成员。角色定义详见:Roles
  • 单个用户调用频率限制:10次/5s
参数
参数描述
chatRoom成员所在的聊天室
member需要解禁言的成员
reason解禁言的原因
completion一个 Completion 对象
- 方法调用成功:本地用户收到回调 onSuccess。
- 方法调用失败:本地用户收到回调 onFailed。错误码详见[Code](

ChatRoomService.fetchMutedUsers

void fetchMutedUsers(@NonNull ChatRoom chatRoom, 
                     @NonNull HMR.CompletionArg<Set<User>> completion);

获取聊天室内的禁言列表

注意:

  • 获取的禁言列表里面的有些用户可能不存在聊天室内
  • 单个用户调用频率限制:10次/5s
参数
参数描述
chatRoom需要获取禁言列表的聊天室
completion一个 CompletionArg 对象
- 方法调用成功:本地用户收到回调 onSuccess。
- 方法调用失败:本地用户收到回调 onFailed。错误码详见Code

ChatRoomService.isMuted

void isMuted(@NonNull ChatRoom chatRoom,
             @NonNull User member,
             @NonNull HMR.CompletionArg<Boolean> completion);

判别某一个用户是否在聊天室的禁言列表里

注意:

单个用户调用频率限制:10次/5s

参数
参数描述
chatRoom需要判别的聊天室
member需要判别的用户
completion一个 CompletionArg 对象
- 方法调用成功:本地用户收到回调 onSuccess。
- 方法调用失败:本地用户收到回调 onFailed。错误码详见Code

ChatRoomService.setUserInfo

void setUserInfo(@NonNull final ChatRoom chatRoom,
                 @NonNull final Map<String, String> infoMap,
                 @Nullable final HMR.Completion completion);

设置自己的用户信息

注意:

  • 容量上限:
    设置用户属性,最大支持属性个数:32个
    单个用户属性的最大值:8k
  • 单个用户调用频率限制:10次/5s
参数
参数描述
chatRoom成员所在的聊天室
infoMap待设置用户信息
completion一个 CompletionArg 对象
- 方法调用成功:本地用户收到回调 onSuccess。
- 方法调用失败:本地用户收到回调 onFailed。错误码详见Code

ChatRoomService.deleteUserInfoByKeys

void deleteUserInfoByKeys(@NonNull ChatRoom chatRoom,
                          @NonNull Set<String> keys,
                          @Nullable HMR.Completion completion);

删除自己的用户信息

注意:

  • 容量上限:
    用户属性,最大支持属性个数:32个
    单个用户属性的最大值:8k
  • 单个用户调用频率限制:10次/5s
参数
参数描述
chatRoom成员所在的聊天室
keys待删除信息的key
completion一个 Completion 对象
- 方法调用成功:本地用户收到回调 onSuccess。
- 方法调用失败:本地用户收到回调 onFailed。错误码详见Code

ChatRoomService.addOrUpdateUserInfo

void addOrUpdateUserInfo(@NonNull ChatRoom chatRoom,
                         @NonNull Map<String, String> infoMap,
                         @Nullable HMR.Completion completion);

添加或更新指定用户信息。

注意:

属性信息存在则更新;不存在则添加。

参数
参数描述
chatRoom成员所在的聊天室
infoMap属性信息
completion设置信息返回的回调,可以根据错误码进行处理

ChatRoomService.fetchUserInfo

void fetchUserInfo(@NonNull ChatRoom chatRoom,
                   @NonNull User member,
                   @NonNull HMR.CompletionArg<Map<String, String>> completion

获取指定用户的用户信息

参数
参数描述
chatRoom成员所在的聊天室
member目标用户
completion一个 CompletionArg 对象
- 方法调用成功:本地用户收到回调 onSuccess。
- 方法调用失败:本地用户收到回调 onFailed。错误码详见Code

ChatRoomService.batchFetchUserInfos

void batchFetchUserInfos(@NonNull ChatRoom chatRoom,
                         @NonNull Set<User> users,
                         @Nullable HMR.CompletionArg<Map<User, Map<String, String>>> completion);

批量获取指定用户的用户信息

参数
参数描述
chatRoom成员所在的聊天室
users目标用户(批量)
completion设置信息返回的回调,可以根据错误码进行处理

ChatRoomService.fetchOnlineUserInfoList

void fetchOnlineUserInfoList(@NonNull ChatRoom chatRoom,
                             @NonNull HMR.CompletionArg<Map<User, Map<String, String>>> completion);

获取聊天室已设置用户信息的在线成员列表

注意:

获取的人员列表最多返回100个,超过100个的随机返回100个

参数
参数描述
chatRoom待查询聊天室
completion一个 CompletionArg 对象
- 方法调用成功:本地用户收到回调 onSuccess。
- 方法调用失败:本地用户收到回调 onFailed。错误码详见Code

ChatRoomService.addListener

void addListener(@NonNull final ChatRoomListener listener);

添加聊天室回调监听器

参数
参数描述
listener监听器对象, 详见 ChatRoomListener

ChatRoomService.removeListener

void removeListener(@NonNull final ChatRoomListener listener);

移除聊天室回调监听器

参数
参数描述
listener监听器对象, 详见 ChatRoomListener

ChatRoomService.addMemberListener

void addMemberListener(@NonNull final MemberListener listener);

添加聊天室成员回调监听器

参数
参数描述
listener监听器对象, 详见 MemberListener

ChatRoomService.removeMemberListener

void removeMemberListener(@NonNull final MemberListener listener);

移除聊天室成员的回调监听器

参数
参数描述
listener监听器对象, 详见 MemberListener

ChatService

ChatService.send

void send(@NonNull Message message, @Nullable HMR.Completion completion);

发送公屏(仅支持文本)、单播、广播消息,消息内容详情见 Content

说明:

  • 业务可以通过自己构造消息体,并且填写对应的消息内容将该消息发送出去。
  • 该接口也可以在消息发送失败的情况下进行重发消息。
  • 单个用户调用频率限制:
    发送公屏消息:10次/5s
    发送自定义单播消息:50次/5s
    发送自定义广播消息:50次/5s
  • 单条消息最大长度:
    单播:2k
    广播:2k
    公屏:1200字节
  • 消息的拓展字段kvExtra最多32个
  • 对于单播、广播,如果message的appExtra填了值,会默认加入到kvExtra中作为一个单独的key-value,即自定义的kvExtra的最大个数变为31个
参数
参数描述
message消息实例
completion发送操作的完成回调

回调

completion回调只处理了最终完成回调,但消息发送过程中可能会有多个阶段/状态。可以通过监听MessageListener来得到相应的回调。

ChatService.addMessageListener

void addMessageListener(@Nullable Identifiable target, @NonNull MessageListener listener);

添加一个消息收发监听器

参数
参数描述
target欲监听消息收发的消息对象
listener欲增加的listener对象

ChatService.removeMessageListener

void removeMessageListener(@Nullable Identifiable target, @NonNull MessageListener listener);

移除一个消息收发监听器

参数
参数描述
target欲取消监听消息收发的消息对象
listener欲移除的listener对象

参数类

HMR

HMR.Completion

public interface Completion {
		// 成功回调
    void onSuccess();
		// 失败回调
    void onFailed(Error err);
}

HMR.CompletionArg

异步结果回调

public interface CompletionArg<Argument> {
  	// 成功回调,
    void onSuccess(Argument arg);
		// 失败回调
    void onFailed(Error err);
}

ChannelStateService

ChannelStateService.ChannelState

enum ChannelState {
    Unavailable,
    Disconnected,
    Connecting,
    Connected,
}
枚举值含义
Unavailable通道还未初始化
Disconnected通道处于断开连接的状态
Connecting通道处于连接中的状态
Connected通道处于连接成功的状态

ChatRoomService

ChatRoomInfo

public final class ChatRoomInfo {
    public enum BasicInfoType {
        Name,
        Description,
        Bulletin,
        AppExtra,
    }

    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }

    public String getBulletin() {
        return bulletin;
    }


    public String getAppExtra() {
        return appExtra;
    }

    public ChatRoomInfo(@NonNull String name, @Nullable String description,
                        @Nullable String bulletin, @Nullable String appExtra) {
        this.name = name;
        this.description = description;
        this.bulletin = bulletin;
        this.appExtra = appExtra;
    }

    private final String name;
    private final String description;
    private final String bulletin;
    private final String appExtra;
}

ChatRoomInfo.BasicInfoType

public enum BasicInfoType {
    Name,
    Description,
    Bulletin,
    AppExtra,
}

聊天室基础信息的枚举字段:主要用来修改聊天室信息和监听聊天室信息时候,可以标识那个字段发生变化/需要修改

枚举值含义
Name聊天室名字
Description聊天室描述
Bulletin聊天室公告
AppExtra聊天室扩展字段(最大1K)

ChatRoomService.Signal

final class Signal extends Content {
    public final User   user;
    public final String content;

    public static Signal unicast(@NonNull User user, @NonNull String content) {
        return new Signal(user, content);
    }

    public static Signal broadcast(@NonNull String content) {
        return new Signal(null, content);
    }

    private Signal(User user, @NonNull String content) {
        this.user    = user;
        this.content = content;
    }

    @Override
    public String toString() {
        return "ChatRoom.Signal{" + content + "}";
    }
}

Challenges.JoiningCompletion

public interface JoiningCompletion {
    void onSucceed();
    void onFailure(@NonNull Error error);

  	// 预留
    void onReceiveChallenge(Challenges.Password challenge);
  	// 预留
    void onReceiveChallenge(Challenges.AppChallenge challenge);
}

ChatRoomService.EKickInfo

enum EKickInfo {
    Time,
    Reason,
}

ChatRoomService.Roles

final class Roles {
  	// 管理员
    public static final String Admin = "admin";
  	// 房主
    public static final String Owner = "owner";
}

ChatRoomService.KickOff

public class KickOff {

    /**
     * 踢人原因
     */
    private String reason;

    /**
     * 踢人类型
     */
    private KickOffEnum kickOffEnum;

    public KickOff(String reason, KickOffEnum kickOffEnum) {
        this.reason = reason;
        this.kickOffEnum = kickOffEnum;
    }

    public String getReason() {
        return reason;
    }

    public KickOffEnum getKickOffEnum() {
        return kickOffEnum;
    }
}

KickOffEnum

public enum KickOffEnum {

    /**
     * 被踢
     */
    KICK_OFF(0),

    /**
     * 多端互踢
     */
    MULTIJOIN_KICK_OFF(1),

    /**
     * 未定义
     */
    UNDEFINED(-1);

    private int type;

    KickOffEnum(int type) {
        this.type = type;
    }

    public int getType() {
        return type;
    }
}

ChatService

Message

public final class Message {
    /**
     * 构造一个空的ChatMessage对象
     */
    public Message() {
    }

    /**
     * 构造一个预设了消息接收者和消息内容的ChatMessage对象
     *
     * @param receiver 消息接收的目标
     * @param content  消息内容
     */
    public Message(Identifiable receiver, Content content) {
        this.chatContent = content;
        this.receiver = receiver;
        this.timestamp = 0L;
    }
  
    /**
     * ChatMessage的状态抽象概念
     */
    public interface State {
    }

    /**
     * 获取消息内容
     */
    public Content getContent() {
        return this.chatContent;
    }

    /**
     * 设置消息内容
     */
    public void setContent(Content content) {
        this.chatContent = content;
    }

    /**
     * 消息的发送者,由于是聊天消息(Message),其产生源一定是用户,因此其类型只可能是User
     * 如果是user实例,在进行会话界面渲染时,可以通过HMR.isMe()来快速判断该消息是否由当前用户所发送。
     */
    public Identifiable getSender() {
        return sender;
    }

    /**
     * 设置消息的发送方。如果是本地发送出去的消息,会在调用ChatService.send方法时被自动覆盖为本地用户(Me)
     *
     * @param sender 消息的发送者
     */
    public void setSender(Identifiable sender) {
        this.sender = sender;
    }

    /**
     * 消息的接收者,具体类型是多态的,可能为Person(用户聊天会话),Group(群组聊天会话)……
     */
    public Identifiable getReceiver() {
        return receiver;
    }

    /**
     * 设置消息接收者。对于本地发出的消息,业务必须显示为ChatMessage显示设置Receiver属性。
     *
     * @param receiver 消息接收者
     */
    public void setReceiver(Identifiable receiver) {
        this.receiver = receiver;
    }

    /**
     * 对于当前用户来说,该方法用于返回聊天对应的目标对象。
     *
     * @return 如果是P2P消息,返回当前用户以外的用户对象。如果是群、聊天室、官方号等消息,返回receiver作为target
     */
    public Identifiable getTarget() {
        // 对于P2P聊天消息,判断会话目标的逻辑表如下:
        // 1. sender: me,     receiver: me          <- receiver
        // 2. sender: me,     receiver: fellow      <- receiver
        // 3. sender: fellow, receiver: me          <- sender
        // 4. sender: fellow, receiver: fellow      <- N/A 我方不该收到该消息
        if (sender instanceof User && receiver instanceof User) {
            if (HMR.isMe(sender)) {
                return receiver;
            } else if (HMR.isMe(receiver)) {
                return sender;
            } else {
                return null;
            }
        }
        // 对于如群消息、聊天室消息、公众号消息等非P2P消息,receiver一定是该关系对象本身
        // sender为发送消息到该关系的人,因此可以直接返回receiver
        return receiver;
    }

    /**
     * timestamp属性为消息时间戳,在消息发送(将发送)时,该时间戳为设备本地的时间戳,当发送完成时,该时间戳为Hummer服务器
     * 返回的时间戳。考虑到本地时间和服务器时间可能存在时差,以及服务器集群中,各服务器间的时间存在时间差等原因,该时间戳
     * 只能作为近似(绝大部分情况下)判别消息先后顺序的依据。
     */
    public long getTimestamp() {
        return this.timestamp;
    }

    /**
     * 设置消息的时间戳
     */
    public void setTimestamp(long ts) {
        this.timestamp = ts;
    }

    /**
     * uuid为消息的(近似)唯一标识id,由于uuid是在各个客户端本地独立产生的,因此理论上存在碰撞的可能性。但由于这
     * 种概率极其低,因此可以用作消息的唯一识别标识,对消息进行去重等操作。
     */
    public String getUuid() {
        return this.uuid;
    }

    /**
     * 设置消息唯一标识符,该标识符通常是由Hummer内部产生并设置的,业务一般不调用该方法
     */
    public void setUuid(String id) {
        this.uuid = id;
    }

    /**
     * 每个ChatMessage对象都可以附带一个业务扩展信息。该信息可以帮助业务透传例如用户头像等业务逻辑紧密相关的数据。Hummer只
     * 对该数据进行透传,不做具体解释和处理。
     */
    public String getAppExtra() {
        return appExtra;
    }

    /**
     * 设置消息的业务透传数据
     */
    public void setAppExtra(String appExtra) {
        this.appExtra = appExtra;
    }

    private String uuid;
    private Identifiable sender;
    private Identifiable receiver;
    private PushContent pushContent;
    private Long timestamp;
    private String appExtra;
    private Content chatContent;
}
属性(值)说明
uuid消息的唯一标识
sender消息的发送者。详情见Identifiable
receiver消息的接收者。详情见Identifiable
timestamp消息时间戳
appExtra消息附加信息。业务可以解析该属性,做特殊处理
chatContent消息内容:文本、单播、广播。详见Content

Identifiable

唯一标识抽象类

public abstract class Identifiable {
    /**
     * 无论是User,还是Chatroom,都必须具备唯一标识符,getId用于返回该标识符。
     * 但是User和Chatroom可能会拥有相同的id值。
     * 因此,必须谨记,无法通过id值的特征来判断不同的消息sender, receiver。
     */
    public abstract long getId();
}
实现类说明
User用户唯一标识类,详见User
ChatRoom聊天室唯一标识类,详见ChatRoom

User

标识Hummer系统的一个用户对象标识

public final class User extends Identifiable {
    /**
     * 构造用户标识对象
     * @param uid 用户uid,对Hummer来说,当uid为0时,表示匿名用户
     */
    public User(long uid) {
        this.uid = uid;
    }

    /**
     * 获取用户标识的id数值
     */
    @Override
    public long getId() {
        return uid;
    }

    private final long uid;
}

ChatRoom

聊天室唯一标识类

public final class ChatRoom extends Identifiable {
		public ChatRoom(long id) {
        this.roomId = id;
    }

    @Override
    public long getId() {
        return roomId;
    }

    private final long roomId;
}

Content

用于表示一个聊天内容类型,具体类型应该由其子类来实现。例如Text, Signal等

public class Content {}
继承类说明
Text文本消息内容类型。详情见Text
Signal聊天室的信令消息(单播、广播)。详情见ChatRoomService.Signal

Text

文本消息内容类型

public final class Text extends Content {
    /**
     * 构造一个文本消息
     * @param text 消息的文本内容
     */
    public Text(String text) {
        this.text = text;
    }

    /**
     * 获取消息的文本
     */
    public String getText() {
        return text;
    }

    private String text;
}

Error

Hummer中用于表示通用错误的类型,常见于消息收发等需要网络通讯的请求中。Error.code的枚举详见:Code

public final class Error {
    /**
     * code属性主要用于进行机器判别、日志快速定位等作用
     */
    public final int code;

    /**
     * reason属性通过人可读的文本形式对mCode进行了描述
     */
    public final String desc;

    /**
     * 构造Error实例,
     *
     * @param code 处理结果的代码
     * @param desc 处理结果的文本描述
     */
    public Error(int code, String desc) {
        this.code = code;
      	this.desc = desc;
    }
}

文档是否有解决您的问题?

有帮助 没帮助
提交成功,非常感谢您的反馈!

反馈

TOP