You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

162 lines
5.3 KiB

//
// JCGroup.h
// JCSDKOC
//
// Created by maikireton on 2017/8/15.
// Copyright © 2017年 juphoon. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "JCGroupCallback.h"
#import "JCGroupConstants.h"
#import "JCGroupItem.h"
/**
* @defgroup 群组模块
* @{
* 用于管理群组
*/
/**
* 群操作类
*/
@interface JCGroup : NSObject
/**
* 创建 JCGroup 对象
*
* JCGroup 的所有接口函数,如无特殊说明,都建议在主线程调用
*
* @note
* - 调用此方法创建 JCGroup 对象后,期间没有调用过 {@link destroy} 方法销毁对象,然后又重复调用此方法,会直接返回第一次创建的 JCGroup 对象
* - 调用此方法前确保 JCClient 已完成初始化,即 @ref JCClient.state "state" 状态值不等于 @ref JCClientStateNotInit
*
* @param client JCClient 对象
* @param callback JCGroupCallback 回调接口,用于回调相关通知
* @return 返回 JCGroup 对象
* @exception "JCClient、JCGroupCallback 任意一个参数传空就会出现调用异常"
*/
+(JCGroup* __nullable)create:(JCClient* __nonnull)client callback:(id<JCGroupCallback> __nonnull)callback;
/**
* 销毁 JCGroup 对象
*
* 该方法为同步调用,需要等待 JCGroup 实例资源释放后才能执行其他操作,调用此方法后,你将无法再使用 JCGroup 的其它方法和回调。<br>
* 我们 **不建议** 在 JCSDK 的回调中调用此方法销毁 JCGroup 对象,否则会出现崩溃。<br>
* 如需在销毁后再次创建 JCGroup 实例,需要等待 @ref destroy 方法执行结束后再创建实例。
*/
+(void)destroy;
/**
* 获取当前用户加入的群列表
*
* @param updateTime 最新一次记录的群列表服务器更新时间
* @return
* - >0:操作id,结果通过 {@link JCGroupCallback#onFetchGroups:result:reason:groups:updateTime:baseTime:fullUpdate: onFetchGroups} 回调
* - -1:调用失败,不会收到回调
*/
-(int)fetchGroups:(long)updateTime;
/**
* 刷新群组信息
*
* @param groupId 群标识
* @param updateTime 最新一次记录的该群服务器更新时间
* @return
* - >0:操作id,结果通过 {@link JCGroupCallback#onFetchGroupInfo:result:reason:groupItem:members:updateTime:baseTime:fullUpdate: onFetchGroupInfo} 回调
* - -1:调用失败,不会收到回调
*/
-(int)fetchGroupInfo:(NSString* __nonnull)groupId updateTime:(long)updateTime;
/**
* 创建群
*
* @param members JCGroupMember 列表
* @param groupName 群名称
* @param type 群类型:
* - @ref JCGroupTypeDiscussion : 讨论组
* - @ref JCGroupTypeNormal : 普通群
* @param customProperties 自定义属性
* @return
* - >0:操作id,结果通过 {@link JCGroupCallback#onCreateGroup:result:reason:groupItem:updateTime:baseTime: onCreateGroup} 回调
* - -1:调用失败,不会收到回调
*/
-(int)createGroup:(NSArray<JCGroupMember*>* __nonnull)members groupName:(NSString* __nonnull)groupName type:(JCGroupType)type customProperties:(NSDictionary<NSString*, NSObject*>* __nullable)customProperties;
/**
* 更新群
*
* @param groupItem JCGroupItem 对象,其中 JCGroupItem 中 @ref JCGroupItem.changeState "changeState" 值不影响具体操作
* @return
* - >0:操作id,结果通过 {@link JCGroupCallback#onCreateGroup:result:reason:groupItem:updateTime:baseTime: onCreateGroup} 回调
* - -1:调用失败,不会收到回调
*/
-(int)updateGroup:(JCGroupItem* __nonnull)groupItem;
/**
* 解散群组
*
* @note 群拥有者才能解散群组
*
* @param groupId 群标识
* @return
* - >0:操作id,结果通过 {@link JCGroupCallback#onDissolve:result:reason:groupId: onDissolve} 回调
* - -1:调用异常,不会收到回调通知
*/
-(int)dissolve:(NSString* __nonnull)groupId;
/**
* 离开群组
*
* @param groupId 群标识
* @return
* - >0:操作id,结果通过 {@link JCGroupCallback#onLeave:result:reason:groupId: onLeave} 回调
* - -1:调用异常,不会收到回调通知
*/
-(int)leave:(NSString* __nonnull)groupId;
/**
* 操作成员
*
* @param groupId 群标识
* @param members JCGroupMember 对象列表,通过 @ref JCGroupItem.changeState "changeState" 值来表明增加,更新,删除成员操作
* @return
* - >0:操作id,结果通过 {@link JCGroupCallback#onDealMembers:result:reason:groupId: onDealMembers} 回调
* - -1:调用异常,不会收到回调通知
*/
-(int)dealMembers:(NSString* __nonnull)groupId members:(NSArray<JCGroupMember*>* __nonnull)members;
/**
* 更新群备注信息
*
* @note 仅自己可见
*
* @param groupId 群标识
* @param nickName 备注名
* @param tagMap 额外信息
* @return
* - >0:操作id,结果通过 {@link JCGroupCallback#onUpdateGroupComment:result:reason:groupId: onUpdateGroupComment} 回调
* - -1:调用异常,不会收到回调通知
*/
-(int)updateGroupComment:(NSString* __nonnull)groupId nickName:(NSString* __nonnull)nickName tag:(NSDictionary<NSString*, NSObject*>* __nullable)tag;
/**
* 设置免打扰
*
*
*
* @param groupId 群标识
* @param dnd 是否免打扰
* - true: 免打扰,
* - false: 取消免打扰
* @return
* - >0:操作id,结果通过 {@link JCGroupCallback#onSetGroupDnd:result:reason:groupId: onSetGroupDnd} 回调
* - -1:调用异常,不会收到回调通知
*/
-(int)setDnd:(NSString* __nonnull)groupId dnd:(bool)dnd;
@end
/**
* @}
*/