2025-10-09 16:48:46 +08:00

659 lines
19 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// V2NIMConversationServiceProtocol.h
// NIMLib
//
// Created by Netease.
// Copyright (c) 2023 Netease. All rights reserved.
//
#import <Foundation/Foundation.h>
#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<V2NIMConversation *> *conversationList);
/// 接收会话操作结果列表回调
typedef void (^V2NIMConversationOperationResultListCallback)(NSArray<V2NIMConversationOperationResult *> *resultList);
/// 成功接收未读数回调
typedef void (^V2NIMConversationUnreadCountCallback)(NSInteger unreadCount);
/// 会话协议
@protocol V2NIMConversationService <NSObject>
/**
* 获取会话列表
*
* @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<NSString *> *)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<NSString *> *)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<NSString *> *)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<NSString *> *)conversationIds
success:(nullable V2NIMConversationOperationResultListCallback)success
failure:(nullable V2NIMFailureCallback)failure;
/**
* 根据会话类型列表清空相应会话的未读数
*
* @param conversationTypes 会话类型列表输入为V2NIMConversationType
* @param success 成功回调
* @param failure 失败回调
*/
- (void)clearUnreadCountByTypes:(NSArray<NSNumber *> *)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<V2NIMConversationListener>)listener;
/**
* 移除会话监听
*
* @param listener
*/
- (void)removeConversationListener:(id<V2NIMConversationListener>)listener;
@end
/// 会话回调协议
@protocol V2NIMConversationListener <NSObject>
@optional
/**
* 同步开始
*/
- (void)onSyncStarted;
/**
* 同步完成
*/
- (void)onSyncFinished;
/**
* 同步失败
*
* @param error 错误
*/
- (void)onSyncFailed:(V2NIMError *)error;
/**
* 会话创建回调
*
* @param conversation 会话
*/
- (void)onConversationCreated:(V2NIMConversation *)conversation;
/**
* 会话删除回调
*
* @param conversationIds 会话id列表
*/
- (void)onConversationDeleted:(NSArray<NSString *> *)conversationIds;
/**
* 会话变更回调
*
* @param conversations 会话列表
*/
- (void)onConversationChanged:(NSArray<V2NIMConversation *> *)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<V2NIMConversationGroup *> *groups);
/// 会话分组协议
@protocol V2NIMConversationGroupService <NSObject>
/**
* 创建会话分组
*
* @param name 分组名
* @param serverExtension 服务器扩展字段
* @param conversationIds 会话id列表
* @param success 成功回调
* @param failure 失败回调
*/
- (void)createConversationGroup:(NSString *)name
serverExtension:(nullable NSString *)serverExtension
conversationIds:(nullable NSArray<NSString *> *)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<NSString *> *)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<NSString *> *)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<NSString *> *)groupIds
success:(nullable V2NIMConversationGroupListCallback)success
failure:(nullable V2NIMFailureCallback)failure;
/**
* 添加会话分组监听
*
* @param listener
*/
- (void)addConversationGroupListener:(id<V2NIMConversationGroupListener>)listener;
/**
* 移除会话分组监听
*
* @param listener
*/
- (void)removeConversationGroupListener:(id<V2NIMConversationGroupListener>)listener;
@end
/// 会话分组回调协议
@protocol V2NIMConversationGroupListener <NSObject>
@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<V2NIMConversation *> *)conversations;
/**
* 会话分组删除回调
*
* @param groupId 分组id
* @param conversationIds 会话id列表
*/
- (void)onConversationsRemovedFromGroup:(NSString *)groupId
conversationIds:(NSArray<NSString *> *)conversationIds;
@end
/// 会话
@interface V2NIMConversation : NSObject <NSCopying>
/// 会话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<NSString *> *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 <NSCopying>
/// 会话分组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<NSNumber *> *conversationTypes;
/// 是否仅查询包含未读的会话。YES查询包含未读的会话NO查询所有会话默认NO
@property(nonatomic,assign,readwrite) BOOL onlyUnread;
/// 指定查询的会话分组数组,空表示不指定,查询所有分组
@property(nullable,nonatomic,copy,readwrite) NSArray<NSString *> *conversationGroupIds;
@end
/// 获取会话结果
@interface V2NIMConversationResult : NSObject
/// 下次获取偏移量
@property(nonatomic,assign,readonly) long long offset;
/// 数据是否拉取完毕
@property(nonatomic,assign,readonly) BOOL finished;
/// 会话列表
@property(nullable,nonatomic,copy,readonly) NSArray<V2NIMConversation *> *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 <NSCopying>
/// 输入为V2NIMConversationType
@property(nullable,nonatomic,copy,readwrite) NSArray<NSNumber *> *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<V2NIMConversationOperationResult *> *failedList;
@end
NS_ASSUME_NONNULL_END