iOS聊天组件化

优质
小牛编辑
132浏览
2023-12-01

日期: 2019-11-19

创盛视联数码科技(北京)有限公司

聊天组件的核心类是CCChatManager;

//在工程需要的地方引入头文件
#import <CCChatLibrary/CCChatLibrary.h>

//1、类的实例化
+ (instancetype)sharedChat;

//2、与BaseSDK建立联系
- (void)addBasicClient:(CCStreamerBasic *)basic;

1 事件的监听(包括图片、以及表情、文本、禁言)

1.1 监听消息事件的回调通知

下面所有的场景都以demo为例,如场景:CCPlayViewController控制器,具体可参考demo实现; 在控制器添加监听,如下:

//#pragma mark -- 接收
-(void)addObserver
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveSocketEvent:) name:CCNotiReceiveSocketEvent object:nil];
}

在不需要使用的时候移除监听,如下

-(void)removeObserver
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

监听事件处理如下:

- (void)receiveSocketEvent:(NSNotification *)noti
{
    CCSocketEvent event = (CCSocketEvent)[noti.userInfo[@"event"] integerValue];
    id value = noti.userInfo[@"value"];

    if (event == CCSocketEvent_Chat)
    {
        NSLog(@"%d", __LINE__);
        //聊天信息
        [self chat_message:value];
    }
  else if (event == CCSocketEvent_GagOne)
    {
        //判断自己是否被禁言
        BOOL isSelfGag = [self.ccChatManager isUserGag];
    }
    else if (event == CCSocketEvent_GagAll)
    {
        //判断房间是否被禁言
        BOOL isSelfGag = [self.ccChatManager isRoomGag];
    }
}

//解析聊天信息
- (void)chat_message:(NSDictionary *)dic
{
    CCLog(@"chat_message_received:%@",dic);
    __unused NSString *role = dic[@"userrole"];
     //根据userid判断消息的发送者

    NSString *msg = dic[@"msg"];
    if ([msg isKindOfClass:[NSString class]] || [msg isKindOfClass:[NSMutableString class]])
    {
        [self showMessage:@"收到聊天message!"];
    }
    else
    {
        [self showMessage:@"收到聊天Pic!"];
    }
}

2 消息的发送

由发送端发起通知

/*!
 @method
 @abstract 发送公聊信息
 */
- (BOOL)sendMsg:(NSString *)message;

object 参数说明:

参数名称参数类型说明是否必须
messageNSString发送消息必选

3 图片的发送

由发送端发起通知

/*!
 @method
 @abstract 发送聊天图片
 @param image 图片
 @param completion 回调
 */
- (void)sendImage:(UIImage *)image completion:(CCComletionBlock)completion;

object 参数说明:

参数名称参数类型说明是否必须
imageUIImageimage数据必选

4 公有的方法

4.1 当前房间是否禁言

/*!
 @method
 @abstract 用户是否被禁言
 */
- (BOOL)isRoomGag;

4.2 当前用户是否被禁言


/*!
 @method
 @abstract 房间是否被禁言
 */
- (BOOL)isUserGag;

4.3 禁言单个用户

/*!
 @method
 @abstract 对某个学生禁言
 @param userID 学生ID

 @return 操作结果
 */
- (BOOL)gagUser:(NSString *)userID;

4.4 取消禁言某个用户

/*!
 @method
 @abstract 取消对某个学生禁言
 @param userID 学生ID

 @return 操作结果
 */
- (BOOL)recoveGagUser:(NSString *)userID;

4.5 全体禁言

/*!
 @method
 @abstract 全体禁言
 @param completion 回调闭包
 @return 操作结果
 */
- (BOOL)gagAll:(CCComletionBlock)completion;

4.6 取消全体禁言

/*!
 @method
 @abstract 取消全体禁言
 @param completion 回调闭包
 @return 操作结果
 */
- (BOOL)recoverGagAll:(CCComletionBlock)completion;