tangtaoit 7b0c1bc743 init
2023-05-25 10:32:00 +08:00

394 lines
10 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.

//
// WKChatManager.h
// WuKongIMSDK
//
// Created by tt on 2019/11/27.
//
#import <Foundation/Foundation.h>
#import "WKMessage.h"
#import "WKMessageContent.h"
#import "WKSendackPacket.h"
#import "WKRecvPacket.h"
#import "WKConversation.h"
#import "WKMessageStatusModel.h"
#import "WKSyncChannelMessageModel.h"
#import "WKSetting.h"
#import "WKMessageExtra.h"
#import "WKChatDataProvider.h"
@protocol WKChatManagerDelegate;
NS_ASSUME_NONNULL_BEGIN
typedef BOOL(^MessageStoreBeforeIntercept)(WKMessage*message);
@interface WKChatManager : NSObject
/**
发送消息 (发送并保存消息)
@param content 消息正文
@param channel 投递到那个频道
*/
-(WKMessage*) sendMessage:(WKMessageContent*)content channel:(WKChannel*)channel;
/**
发送消息 (发送并保存消息)
@param content 消息正文
@param channel 投递到那个频道
@param topic 话题
*/
-(WKMessage*) sendMessage:(WKMessageContent*)content channel:(WKChannel*)channel topic:(NSString*)topic;
/**
发送消息 (发送并保存消息)
@param content 消息正文
@param channel 投递到那个频道
@param setting 消息设置
*/
-(WKMessage*) sendMessage:(WKMessageContent*)content channel:(WKChannel*)channel setting:(WKSetting * __nullable)setting;
-(WKMessage*) sendMessage:(WKMessageContent*)content channel:(WKChannel*)channel setting:(WKSetting * __nullable)setting topic:(NSString*)topic;
/**
发送消息(仅仅发送,不保存)
@param message 消息
@return <#return value description#>
*/
-(WKMessage*) sendMessage:(WKMessage*)message;
/// 发送消息
/// @param message 消息对象
/// @param addRetryQueue 是否添加到重试队列如果是true消息发送失败将会进行指定次数的重试
-(WKMessage*) sendMessage:(WKMessage*)message addRetryQueue:(BOOL)addRetryQueue;
/**
消息重发
@param message 重发的消息
*/
-(WKMessage*) resendMessage:(WKMessage*)message;
/**
保存消息 (都为自己所发消息)
@param content 消息正文
@param channel 频道
*/
-(WKMessage*) saveMessage:(WKMessageContent*)content channel:(WKChannel*)channel;
/**
保存消息(可自定发送者)
@param content 消息正文
@param channel 频道
@param fromUid 发送者uid
@return <#return value description#>
*/
-(WKMessage*) saveMessage:(WKMessageContent*)content channel:(WKChannel*)channel fromUid:( NSString* __nullable)fromUid;
-(WKMessage*) saveMessage:(WKMessageContent*)content channel:(WKChannel*)channel fromUid:(NSString* __nullable)fromUid status:(WKMessageStatus)status;
/// 保存消息
-(void) saveMessages:(NSArray<WKMessage*>*)messages;
/**
转发消息
@param content 消息正文
@param channel 频道
@return <#return value description#>
*/
-(WKMessage*) forwardMessage:(WKMessageContent*)content channel:(WKChannel*)channel;
/**
编辑消息
@param message 需要编辑的消息
@param newContent 编辑后的正文
*/
-(WKMessage*) editMessage:(WKMessage*)message newContent:(WKMessageContent*)newContent;
/**
删除消息
@param message 消息对象
*/
-(void) deleteMessage:(WKMessage*)message;
/**
删除指定频道指定发送者的消息
*/
-(void) deleteMessage:(NSString*)fromUID channel:(WKChannel*)channel;
/**
清除指定频道的消息
@param channel 频道
*/
-(void) clearMessages:(WKChannel*)channel;
/// 清除当前用户的所有消息
-(void) clearAllMessages;
/**
清除指定maxMsgSeq以前的所有消息
@param channel 频道
@param maxMsgSeq 指定的messageSeq
@param isContain 清除的消息是否包含指定的maxMsgSeq
*/
- (void) clearFromMsgSeq:(WKChannel*)channel maxMsgSeq:(uint32_t)maxMsgSeq isContain:(BOOL)isContain;
/**
查询某个频道最新的消息 (一般是第一次进入会话页面查询首屏消息时调用此方法)
@param channel 频道
@param limit 消息数量限制
@param complete 查询回调
*/
-(void) pullLastMessages:(WKChannel*)channel limit:(int)limit complete:(void(^)(NSArray<WKMessage*> *messages,NSError *error))complete;
/**
查询某个频道最新的消息 (一般是第一次进入会话页面查询首屏消息时调用此方法)
@param channel 频道
@param limit 消息数量限制
@param complete 查询回调
@param alwayRequest 是否总是从服务器请求最新的消息数据
*/
-(void) pullLastMessages:(WKChannel*)channel limit:(int)limit alwayRequest:(BOOL)alwayRequest complete:(void(^)(NSArray<WKMessage*> *messages,NSError *error))complete;
/**
下拉加载消息
@param channel 频道
@param startOrderSeq 起始的orderSeq 比如需要查询 100以上的10条消息 那么startOrderSeq就是100 查询出来的数据为 90 91 92 93 94 95 96 97 98 99
@param limit 消息数量限制
@param complete 查询回调
*/
-(void) pullDown:(WKChannel*)channel startOrderSeq:(uint32_t)startOrderSeq limit:(int)limit complete:(void(^)(NSArray<WKMessage*> *messages,NSError *error))complete;
/**
上拉加载消息
@param startOrderSeq 起始的orderSeq 比如需要查询 100以下的10条消息 那么startOrderSeq就是100 查询出来的数据为 101 102 103 104 105 106 107 108 109 110
@param limit 消息数量限制
@param complete 查询回调
*/
-(void) pullUp:(WKChannel*)channel startOrderSeq:(uint32_t)startOrderSeq limit:(int)limit complete:(void(^)(NSArray<WKMessage*> *messages,NSError *error))complete;
/**
查询指定orderSeq周围的消息 上5条下5条 ,比如 orderSeq 为 20 则查询 16 17 18 19 20 21 22 23 24 25 主要使用在定位消息
@param channel 频道
@param orderSeq 以此OrderSeq查询周围的消息
*/
-(void) pullAround:(WKChannel*)channel orderSeq:(uint32_t)orderSeq limit:(int)limit complete:(void(^)(NSArray<WKMessage*> *messages,NSError *error))complete;
/**
拉取历史消息
@param channel 频道
@param startOrderSeq 基准messageSeq 以此messageSeq为基准进行上下浮动查询
@param endOrderSeq 结束的messageSeq 查询到此messageSeq为终止 如果为 0 则不做限制 limit限制查询数量
@param limit 消息数量限制
@param pullMode 拉取方式
@param complete 查询回调
*/
-(void) pullMessages:(WKChannel*)channel startOrderSeq:(uint32_t)startOrderSeq endOrderSeq:(uint32_t)endOrderSeq limit:(int)limit pullMode:(WKPullMode)pullMode complete:(void(^)(NSArray<WKMessage*> *messages,NSError *error))complete DEPRECATED_MSG_ATTRIBUTE("use pullDown or pullUp");
/**
查询消息
@param channel 频道
@param aroundOrderSeq 以此OrderSeq查询周围的消息
*/
-(void) getMessages:(WKChannel*)channel aroundOrderSeq:(uint32_t)aroundOrderSeq limit:(int)limit complete:(void(^)(NSArray<WKMessage*> *messages,NSError *error))complete DEPRECATED_MSG_ATTRIBUTE("use pullAround");;
/**
更新语音消息已读状态
@param message 消息
*/
-(void) updateMessageVoiceReaded:(WKMessage*)message;
/**
更新本地扩展数据
@param message 消息对象
*/
-(void) updateMessageLocalExtra:(WKMessage*)message;
/**
更新消息远程扩展
*/
-(void) updateMessageRemoteExtra:(WKMessage*)message;
/// 撤回消息
/// @param message <#message description#>
-(void) revokeMessage:(WKMessage*)message;
/// 获取orderSeq
/// @param messageSeq <#messageSeq description#>
-(uint32_t) getOrderSeq:(uint32_t)messageSeq;
-(uint32_t) getMessageSeq:(uint32_t) orderSeq;
/**
获取最接近orderSeq的有效orderSeq
*/
-(uint32_t) getOrNearbyMessageSeq:(uint32_t)orderSeq;
/// 正文包装为消息
/// @param content 消息正文
/// @param channel 频道
/// @param fromUid 发送者UID
-(WKMessage*) contentToMessage:(WKMessageContent*)content channel:(WKChannel*)channel fromUid:(NSString * __nullable)fromUid;
/// 通过正文类型获取content
/// @param contentType 正文类型
-(WKMessageContent*) getMessageContent:(NSInteger)contentType;
/**
添加委托
@param delegate <#delegate description#>
*/
-(void) addDelegate:(id<WKChatManagerDelegate>) delegate;
/**
移除委托
@param delegate <#delegate description#>
*/
-(void)removeDelegate:(id<WKChatManagerDelegate>) delegate;
/// 添加消息存储之拦截器
/// @param sid 拦截器唯一ID
/// @param intercept 拦截器 返回true表示消息存储 返回false表示消息不存储
-(void) addMessageStoreBeforeIntercept:(NSString*)sid intercept:(MessageStoreBeforeIntercept)intercept;
/// 移除消息存储之前的拦截器
/// @param sid 拦截器唯一ID
-(void) removeMessageStoreBeforeIntercept:(NSString*)sid;
/// 调用拦截器获得消息是否需要存储
/// @param message <#message description#>
-(BOOL) needStoreOfIntercept:(WKMessage*)message;
/**
同步消息的扩展数据
*/
-(void) syncMessageExtra:(WKChannel*)channel complete:(void(^_Nullable)(NSError * _Nullable error))complete;
/**
标记消息为已读
*/
//-(void) markReaded:(WKChannel*)channel messages:(NSArray<WKMessage*>*)messages;
// 获取某个频道内最新的消息
-(WKMessage*) getLastMessage:(WKChannel*)channel;
// 通知UI消息更新
- (void)callMessageUpdateDelegate:(WKMessage*)message;
// 通知UI收到消息
- (void)callRecvMessagesDelegate:(NSArray<WKMessage*>*)messages;
/// 同步频道消息提供者(由第三方设置)
@property(nonatomic,copy) WKSyncChannelMessageProvider syncChannelMessageProvider;
@property(nonatomic,copy) WKSyncMessageExtraProvider syncMessageExtraProvider; // 同步消息扩展
@property(nonatomic,copy) WKUpdateMessageExtraProvider updateMessageExtraProvider; // 更新消息扩展
// 消息编辑提供者
@property(nonatomic,copy) WKMessageEditProvider messageEditProvider;
@end
/**
聊天管理委托
*/
@protocol WKChatManagerDelegate <NSObject>
@optional
/**
收到消息回调
@param message 收到的消息
@param left 消息剩余数量 可当left为0时再刷新UI
*/
- (void)onRecvMessages:(WKMessage*)message left:(NSInteger)left;
/**
消息更新
@param message <#message description#>
@param left 消息剩余数量 可当left为0时再刷新UI
*/
-(void) onMessageUpdate:(WKMessage*) message left:(NSInteger)left;
/**
消息更新
@param message <#message description#>
@param left 消息剩余数量 可当left为0时再刷新UI
@param total 消息总数量
*/
-(void) onMessageUpdate:(WKMessage*) message left:(NSInteger)left total:(NSInteger)total;
/**
发送消息回执回调
*/
-(void) onSendack:(WKSendackPacket*) sendackPacket left:(NSInteger)left;
/**
消息被删除
@param message 被删除的消息
*/
-(void) onMessageDeleted:(WKMessage*) message;
/**
指定频道的消息已清除
@param channel <#channel description#>
*/
-(void) onMessageCleared:(WKChannel*)channel;
/// 清除所有消息
-(void) onMessageAllCleared;
@end
NS_ASSUME_NONNULL_END