CNLiveChatManager.h 7.16 KB
//
//  CNLiveChatManager.h
//  CNLiveChatManager
//
//  Created by cnliveJunBo on 17/2/27.
//  Copyright © 2017年 cnlive. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "CNLiveChatUserInfo.h"
#import "CNLiveChatStatusDefine.h"
#import "CNLiveChatMessage.h"

@protocol CNLiveChatManagerDelegate <NSObject>

@optional
/**
 连接状态的的监听器
 
 @param status 网络连接状态码
 */
- (void)onConnectionStatusChanged:(CNLiveConnectionStatus)status;


/**
 加入聊天室成功的监听
 @param chatroomId 聊天室ID
 */
- (void)onChatRoomJoined:(NSString *)chatroomId;


/*!
 加入聊天室失败的监听
 
 @param chatroomId 聊天室ID
 @param errorCode  加入失败的错误码
 
 @discussion 如果错误码是CNLive_KICKED_FROM_CHATROOM或CNLive_CHATROOM_NOT_EXIST,则不会自动重新加入聊天室,App需要按照自己的逻辑处理。
 */
- (void)onChatRoomJoinFailed:(NSString *)chatroomId
                   errorCode:(CNLiveChatErrorCode)errorCode;

/**
 接收消息监听

 @param message 消息实体类型对象
 */
- (void)onReceived:(CNLiveChatMessage *)message;


/**
 当前用户在其他设备上登录,此设备被踢下线。
 */
- (void)kickedByAnotherDevice;

@end

@interface CNLiveChatManager : NSObject

/**
 聊天SDK代理,设置代理后,实现代理方法。
 */
@property (nonatomic, weak) id<CNLiveChatManagerDelegate> delegate;

/**
 当前登录用户的用户信息
 
 @discussion 用于与融云服务器建立连接之后,获取&设置当前用户的用户信息。
 用户ID不允许重新设置,只能设置昵称&头像。
 */
@property(nonatomic, strong) CNLiveChatUserInfo *currentUserInfo;

/**
 获取SDK版本号
 
 @return SDK版本号
 */
+ (NSString *)getVersion;


/**
 获取视讯聊天核心类单例
 
 @return 视讯聊天核心类单例
 
 @discussion 您可以通过此方法,获取视讯聊天的单例,访问对象中的属性和方法。
 */
+ (instancetype)sharedCNLiveChatManager;


/**
 初始化SDK方法

 @param appKey 从视讯云平台获取到的appKey
 @param appId  从视讯云平台获取到的appId
 @warning      必传参数
 @discussion   您在使用聊天SDK所有功能之前,您必须先调用此方法初始化SDK。
               在App整个生命周期中,您只需要执行一次初始化。
 */
- (void)initWithAppKey:(NSString *)appKey appId:(NSString *)appId;


/**
 连接到视讯云服务器

 @param successBlock 连接建立成功的回调。
 @param errorBlock   连接建立成功的回调,返回错误码。
 注:连接服务器成功后才能使用聊天功能(如:单聊、加入聊天室、聊天室内 聊天);
 */
- (void)connectServerSuccess:(void (^)())successBlock
                       error:(void (^)(CNLiveChatConnectErrorCode errors))errorBlock;

/**
 以用户信息登陆到视讯云服务器

 @param userInfo     用户信息
 @param successBlock 登陆成功的回调,返回登陆成功的用户ID。
 @param errorBlock   登陆失败的回调,返回错误码。
 注:连接服务器成功后才能使用聊天功能(如:单聊、加入聊天室、聊天室内 聊天);
 */
- (void)loginServer:(CNLiveChatUserInfo *)userInfo
                       success:(void (^)(NSString *userId))successBlock
                         error:(void (^)(CNLiveChatConnectErrorCode errors))errorBlock;


/**
 当前用户登出服务器
 */
- (void)logoutServer;


/**
 断开与服务器的连接

 @param isReceivePush 与服务器断开后,是否还接收远程推送
 */
- (void)disconnectServer:(BOOL)isReceivePush;


/**
 加入已经存在的聊天室(如果不存在或超限会返回聊天室不存在错误23410 或 人数超限23411)

 @param targetId     要加入的聊天室ID
 @param messageCount 进入聊天室时获取历史消息的数量,-1<=messageCount<=50
 -1表示不获取任何历史消息,0表示不特殊设置而使用SDK默认的设置(默认为获取10条),0<messageCount<=50为具体获取的消息数量,最大值为50。
 @param successBlock 加入聊天室成功的回调,返回成功加入的聊天室ID。
 @param errorBlock   加入聊天室失败的回调,返回错误码以及加入失败的聊天室ID。
 */
- (void)joinExistChatRoom:(NSString *)targetId
          messageCount:(int)messageCount
               success:(void (^)(NSString *targetId))successBlock
                 error:(void (^)(CNLiveChatErrorCode errors, NSString *targetId))errorBlock;


/**
 加入聊天室,若不存在自动创建聊天室

 @param targetId     要加入的聊天室ID
 @param messageCount 进入聊天室时获取历史消息的数量,-1<=messageCount<=50
 -1表示不获取任何历史消息,0表示不特殊设置而使用SDK默认的设置(默认为获取10条),0<messageCount<=50为具体获取的消息数量,最大值为50。
 @param successBlock 加入聊天室成功的回调,返回成功加入的聊天室ID
 @param errorBlock   加入聊天室失败的回调,返回错误码以及加入失败的聊天室ID
 */
- (void)joinChatRoom:(NSString *)targetId
        messageCount:(int)messageCount
             success:(void (^)(NSString *targetId))successBlock
               error:(void (^)(CNLiveChatErrorCode errors, NSString *targetId))errorBlock;


/**
 退出聊天室

 @param targetId     要退出的聊天室ID
 @param successBlock 退出聊天室成功的回调,返回成功退出的聊天室ID
 @param errorBlock   退出聊天室失败的回调,返回失败的错误码以及退出失败的聊天室的ID
 */
- (void)quitChatRoom:(NSString *)targetId
         success:(void (^)(NSString *targetId))successBlock
           error:(void (^)(CNLiveChatErrorCode errors, NSString *targetId))errorBlock;


/**
 发送消息

 @param message      消息内容
 @param type         会话类型(私聊 / 聊天室)
 @param targetId     会话目标ID(私聊:用户ID / 聊天室:聊天室ID)
 @param successBlock 发送消息成功的回调,返回目标ID,消息实体类型对象(包括消息内容,会话类型,目标ID,发送者的用户信息)
 @param errorBlock   发送消息失败的回调,返回错误码,目标ID,会话类型
 */
- (void)sendMessage:(NSString *)message
               type:(CNLiveConversationType)type
           targetId:(NSString *)targetId
            success:(void (^)(NSString *targetId, CNLiveChatMessage *message))successBlock
              error:(void (^)(CNLiveChatErrorCode errors, NSString *targetId, CNLiveConversationType type))errorBlock;


/**
 获取当前SDK的连接状态

 @return 当前SDK的连接状态
 */
- (CNLiveConnectionStatus)getConnectionStatus;


/**
 获取某个会话中指定数量的最新消息

 @param conversationType 会话类型(私聊 / 聊天室)
 @param targetId         会话目标ID(私聊:用户ID / 聊天室:聊天室ID)
 @param count            所要获取的消息数量

 @return 消息数组(CNLiveChatMessage类型)
 @discussion
 此方法会获取该会话中指定数量的最新消息实体,返回的消息实体按照时间从新到旧排列。
 如果会话中的消息数量小于参数count的值,会将该会话中的所有消息返回。
 */
- (NSArray *)getLatestMessages:(CNLiveConversationType)conversationType
                      targetId:(NSString *)targetId
                         count:(int)count;


@end