// // V2NIMConversationServiceProtocol.h // NIMLib // // Created by Netease. // Copyright (c) 2023 Netease. All rights reserved. // #import #import "V2NIMBase.h" #import "V2NIMConversationEnum.h" NS_ASSUME_NONNULL_BEGIN @class V2NIMLastMessage; @class V2NIMConversation; @class V2NIMConversationGroup; @class V2NIMConversationOption; @class V2NIMConversationResult; @class V2NIMConversationOperationResult; @class V2NIMConversationUpdate; @class V2NIMConversationFilter; @class V2NIMConversationGroupResult; @protocol V2NIMConversationListener; @protocol V2NIMConversationGroupListener; /// 成功接收会话结果回调 typedef void (^V2NIMConversationResultCallback)(V2NIMConversationResult *result); /// 成功接收会话回调 typedef void (^V2NIMConversationCallback)(V2NIMConversation *conversation); /// 成功接收会话列表回调 typedef void (^V2NIMConversationListCallback)(NSArray *conversationList); /// 接收会话操作结果列表回调 typedef void (^V2NIMConversationOperationResultListCallback)(NSArray *resultList); /// 成功接收未读数回调 typedef void (^V2NIMConversationUnreadCountCallback)(NSInteger unreadCount); /// 会话协议 @protocol V2NIMConversationService /** * 获取会话列表 * * @param offset 获取会话偏移量 * @param limit 分页拉取数量 * @param success 成功回调 * @param failure 失败回调 */ - (void)getConversationList:(long long)offset limit:(NSInteger)limit success:(nullable V2NIMConversationResultCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 根据查询参数获取会话列表 * * @param offset 获取会话偏移量 * @param count 分页拉取数量 * @param option 查询参数 * @param success 成功回调 * @param failure 失败回调 */ - (void)getConversationListByOption:(long long)offset limit:(NSInteger)limit option:(V2NIMConversationOption *)option success:(nullable V2NIMConversationResultCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 获取会话列表,通过会话id列表 * * @param conversationIds 会话id列表 * @param success 成功回调 * @param failure 失败回调 */ - (void)getConversationListByIds:(NSArray *)conversationIds success:(nullable V2NIMConversationListCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 获取会话 * * @param conversationId 会话id * @param success 成功回调 * @param failure 失败回调 */ - (void)getConversation:(NSString *)conversationId success:(nullable V2NIMConversationCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 创建会话 * * @param conversationId 会话id * @param success 成功回调 * @param failure 失败回调 */ - (void)createConversation:(NSString *)conversationId success:(nullable V2NIMConversationCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 删除会话 * * @param conversationId 会话id * @param clearMessage 是否同步删除会话对应的历史消息 * @param success 成功回调 * @param failure 失败回调 */ - (void)deleteConversation:(NSString *)conversationId clearMessage:(BOOL)clearMessage success:(nullable V2NIMSuccessCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 批量删除会话 * * @param conversationIds 会话id列表 * @param clearMessage 是否同步删除会话对应的历史消息 * @param success 成功回调 * @param failure 失败回调 */ - (void)deleteConversationListByIds:(NSArray *)conversationIds clearMessage:(BOOL)clearMessage success:(nullable V2NIMConversationOperationResultListCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 置顶会话 * * @param conversationId 会话id * @param stickTop 是否置顶会话 * @param success 成功回调 * @param failure 失败回调 */ - (void)stickTopConversation:(NSString *)conversationId stickTop:(BOOL)stickTop success:(nullable V2NIMSuccessCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 静音会话 * * @param conversationId 会话id * @param mute 是否静音会话 * @param success 成功回调 * @param failure 失败回调 */ - (void)muteConversation:(NSString *)conversationId mute:(BOOL)mute success:(nullable V2NIMSuccessCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 更新会话 * * @param conversationId 会话id * @param updateInfo 会话更新内容 * @param success 成功回调 * @param failure 失败回调 */ - (void)updateConversation:(NSString *)conversationId updateInfo:(V2NIMConversationUpdate *)updateInfo success:(nullable V2NIMSuccessCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 更新会话本地扩展字段 * * @param conversationId 会话id * @param localExtension 会话本地扩展字段 * @param success 成功回调 * @param failure 失败回调 */ - (void)updateConversationLocalExtension:(NSString *)conversationId localExtension:(nullable NSString *)localExtension success:(nullable V2NIMSuccessCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 获取全部会话的总的未读数 * * @return 全部会话的的总未读数 */ - (NSInteger)getTotalUnreadCount; /** * 根据会话id列表获取相应的未读数 * * @param conversationIds 会话id列表 * @param success 成功回调 * @param failure 失败回调 */ - (void)getUnreadCountByIds:(NSArray *)conversationIds success:(nullable V2NIMConversationUnreadCountCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 根据过滤条件获取相应的未读数 * * @param filter 过滤条件 * @param success 成功回调 * @param failure 失败回调 */ - (void)getUnreadCountByFilter:(V2NIMConversationFilter *)filter success:(nullable V2NIMConversationUnreadCountCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 清空所有会话的总未读数 * * @param success 成功回调 * @param failure 失败回调 */ - (void)clearTotalUnreadCount:(nullable V2NIMSuccessCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 根据会话id列表清空相应会话的未读数 * * @param conversationIds 会话id列表 * @param success 成功回调 * @param failure 失败回调 */ - (void)clearUnreadCountByIds:(NSArray *)conversationIds success:(nullable V2NIMConversationOperationResultListCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 根据会话类型列表清空相应会话的未读数 * * @param conversationTypes 会话类型列表,输入为V2NIMConversationType * @param success 成功回调 * @param failure 失败回调 */ - (void)clearUnreadCountByTypes:(NSArray *)conversationTypes success:(nullable V2NIMSuccessCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 根据会话分组清空相应会话的未读数 * * @param groupId 会话分组id * @param success 成功回调 * @param failure 失败回调 */ - (void)clearUnreadCountByGroupId:(NSString *)groupId success:(nullable V2NIMSuccessCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 订阅指定过滤条件的会话未读数 * * @param filter 过滤条件 * @return 返回nil表示成功,否则返回错误 */ - (V2NIMError *)subscribeUnreadCountByFilter:(V2NIMConversationFilter *)filter; /** * 取消订阅指定过滤条件的会话未读数 * * @param filter 过滤条件 * @return 返回nil表示成功,否则返回错误 */ - (V2NIMError *)unsubscribeUnreadCountByFilter:(V2NIMConversationFilter *)filter; /** * 添加会话监听 * * @param listener */ - (void)addConversationListener:(id)listener; /** * 移除会话监听 * * @param listener */ - (void)removeConversationListener:(id)listener; @end /// 会话回调协议 @protocol V2NIMConversationListener @optional /** * 同步开始 */ - (void)onSyncStarted; /** * 同步完成 */ - (void)onSyncFinished; /** * 同步失败 * * @param error 错误 */ - (void)onSyncFailed:(V2NIMError *)error; /** * 会话创建回调 * * @param conversation 会话 */ - (void)onConversationCreated:(V2NIMConversation *)conversation; /** * 会话删除回调 * * @param conversationIds 会话id列表 */ - (void)onConversationDeleted:(NSArray *)conversationIds; /** * 会话变更回调 * * @param conversations 会话列表 */ - (void)onConversationChanged:(NSArray *)conversations; /** * 总未读数变更回调 * * @param unreadCount 未读数 */ - (void)onTotalUnreadCountChanged:(NSInteger)unreadCount; /** * 过滤器对应的未读数变更回调 * * @param filter 过滤器 * @param unreadCount 未读数 */ - (void)onUnreadCountChangedByFilter:(V2NIMConversationFilter *)filter unreadCount:(NSInteger)unreadCount; @end /// 成功接收会话分组结果回调 typedef void (^V2NIMConversationGroupResultCallback)(V2NIMConversationGroupResult *result); /// 成功接收会话分组回调 typedef void (^V2NIMConversationGroupCallback)(V2NIMConversationGroup *group); /// 成功接收会话分组列表回调 typedef void (^V2NIMConversationGroupListCallback)(NSArray *groups); /// 会话分组协议 @protocol V2NIMConversationGroupService /** * 创建会话分组 * * @param name 分组名 * @param serverExtension 服务器扩展字段 * @param conversationIds 会话id列表 * @param success 成功回调 * @param failure 失败回调 */ - (void)createConversationGroup:(NSString *)name serverExtension:(nullable NSString *)serverExtension conversationIds:(nullable NSArray *)conversationIds success:(nullable V2NIMConversationGroupResultCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 删除会话分组 * * @param groupId 分组id * @param success 成功回调 * @param failure 失败回调 */ - (void)deleteConversationGroup:(NSString *)groupId success:(nullable V2NIMSuccessCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 更新会话分组 * * @param groupId 分组id * @param name 分组名 * @param serverExtension 服务器扩展字段 * @param success 成功回调 * @param failure 失败回调 */ - (void)updateConversationGroup:(NSString *)groupId name:(nullable NSString *)name serverExtension:(nullable NSString *)serverExtension success:(nullable V2NIMSuccessCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 添加会话到分组 * * @param groupId 分组id * @param conversationIds 会话id列表 * @param success 成功回调 * @param failure 失败回调 */ - (void)addConversationsToGroup:(NSString *)groupId conversationIds:(NSArray *)conversationIds success:(nullable V2NIMConversationOperationResultListCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 从会话分组移除会话 * * @param groupId 分组id * @param conversationIds 会话id列表 * @param success 成功回调 * @param failure 失败回调 */ - (void)removeConversationsFromGroup:(NSString *)groupId conversationIds:(NSArray *)conversationIds success:(nullable V2NIMConversationOperationResultListCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 获取会话分组列表 * * @param success 成功回调 * @param failure 失败回调 */ - (void)getConversationGroupList:(nullable V2NIMConversationGroupListCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 获取会话分组 * * @param groupId 分组Id * @param success 成功回调 * @param failure 失败回调 */ - (void)getConversationGroup:(NSString *)groupId success:(nullable V2NIMConversationGroupCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 获取会话分组列表 * * @param groupIds 分组Id列表 * @param success 成功回调 * @param failure 失败回调 */ - (void)getConversationGroupListByIds:(NSArray *)groupIds success:(nullable V2NIMConversationGroupListCallback)success failure:(nullable V2NIMFailureCallback)failure; /** * 添加会话分组监听 * * @param listener */ - (void)addConversationGroupListener:(id)listener; /** * 移除会话分组监听 * * @param listener */ - (void)removeConversationGroupListener:(id)listener; @end /// 会话分组回调协议 @protocol V2NIMConversationGroupListener @optional /** * 会话分组创建回调 * * @param conversationGroup 会话分组 */ - (void)onConversationGroupCreated:(V2NIMConversationGroup *)conversationGroup; /** * 会话分组删除回调 * * @param groupId 分组id */ - (void)onConversationGroupDeleted:(NSString *)groupId; /** * 会话分组变更回调 * * @param conversationGroup 会话分组 */ - (void)onConversationGroupChanged:(V2NIMConversationGroup *)conversationGroup; /** * 会话分组删除回调 * * @param groupId 分组id * @param conversations 会话列表 */ - (void)onConversationsAddedToGroup:(NSString *)groupId conversations:(NSArray *)conversations; /** * 会话分组删除回调 * * @param groupId 分组id * @param conversationIds 会话id列表 */ - (void)onConversationsRemovedFromGroup:(NSString *)groupId conversationIds:(NSArray *)conversationIds; @end /// 会话 @interface V2NIMConversation : NSObject /// 会话id @property(nonatomic,copy,readonly) NSString *conversationId; /// 会话类型 @property(nonatomic,assign,readonly) V2NIMConversationType type; /// 会话名称 @property(nullable,nonatomic,copy,readonly) NSString *name; /// 会话头像 @property(nullable,nonatomic,copy,readonly) NSString *avatar; /// 免打扰。YES:开启,NO:关闭,默认NO:关闭 @property(nonatomic,assign,readonly) BOOL mute; /// 置顶。YES:已置顶,NO:未置顶,默认NO:未置顶 @property(nonatomic,assign,readonly) BOOL stickTop; /// 会话分组id @property(nullable,nonatomic,copy,readonly) NSArray *groupIds; /// 本地扩展字段 @property(nonatomic,copy,readonly) NSString *localExtension; /// 服务端扩展字段1024字节 @property(nullable,nonatomic,copy,readonly) NSString *serverExtension; /// 会话所属的最近一条消息 @property(nullable,nonatomic,copy,readonly) V2NIMLastMessage *lastMessage; /// 会话的未读消息计数 @property(nonatomic,assign,readonly) NSInteger unreadCount; /// 会话创建时间 @property(nonatomic,assign,readonly) NSTimeInterval createTime; /// 会话更新时间 @property(nonatomic,assign,readonly) NSTimeInterval updateTime; /// 会话排序字段 @property(nonatomic,assign,readonly) long long sortOrder; @end /// 会话分组 @interface V2NIMConversationGroup : NSObject /// 会话分组id @property(nullable,nonatomic,copy,readonly) NSString *groupId; /// 会话分组名称 @property(nullable,nonatomic,copy,readonly) NSString *name; /// 服务端扩展字段1024字节 @property(nullable,nonatomic,copy,readonly) NSString *serverExtension; /// 会话分组创建时间 @property(nonatomic,assign,readonly) NSTimeInterval createTime; /// 会话分组更新时间 @property(nonatomic,assign,readonly) NSTimeInterval updateTime; @end /// 会话查询相关参数 @interface V2NIMConversationOption : NSObject /// 指定查询的会话类型数组,空表示不指定,查询所有类型、注意输入为V2NIMConversationType @property(nullable,nonatomic,copy,readwrite) NSArray *conversationTypes; /// 是否仅查询包含未读的会话。YES:查询包含未读的会话,NO:查询所有会话,默认NO @property(nonatomic,assign,readwrite) BOOL onlyUnread; /// 指定查询的会话分组数组,空表示不指定,查询所有分组 @property(nullable,nonatomic,copy,readwrite) NSArray *conversationGroupIds; @end /// 获取会话结果 @interface V2NIMConversationResult : NSObject /// 下次获取偏移量 @property(nonatomic,assign,readonly) long long offset; /// 数据是否拉取完毕 @property(nonatomic,assign,readonly) BOOL finished; /// 会话列表 @property(nullable,nonatomic,copy,readonly) NSArray *conversationList; @end /// 会话操作结果 @interface V2NIMConversationOperationResult : NSObject /// 会话id @property(nonatomic,copy,readonly) NSString *conversationId; /// 操作失败错误,nil表示成功 @property(nonatomic,copy,readonly) V2NIMError *error; @end /// 更新会话相关字段 @interface V2NIMConversationUpdate : NSObject /// 服务端扩展字段1024字节 @property(nullable,nonatomic,copy,readwrite) NSString *serverExtension; @end /// 会话过滤器 @interface V2NIMConversationFilter : NSObject /// 输入为V2NIMConversationType @property(nullable,nonatomic,copy,readwrite) NSArray *conversationTypes; /// @property(nullable,nonatomic,copy,readwrite) NSString *conversationGroupId; /// @property(nonatomic,assign,readwrite) BOOL ignoreMuted; @end /// 会话分组结果 @interface V2NIMConversationGroupResult : NSObject /// 会话分组 @property(nullable,nonatomic,copy,readonly) V2NIMConversationGroup *group; /// 失败的会话操作结果列表 @property(nullable,nonatomic,copy,readonly) NSArray *failedList; @end NS_ASSUME_NONNULL_END