XMPP-好友列表模块的注册和好友列表获取,添加,删除

///////////////////////////AppDelegate中///////////////////////////

注册花名模块:

/**
 *  链接到 xmpp 服务器
 */
- (void)connect{

    if (self.xmppStream == nil) {
        // 1.初始化 xmppstream
        self.xmppStream = [[XMPPStream alloc] init];

        // 2.添加电子名片模块
        // 2.1创建电子名片的数据存储
        self.vCardStorage = [XMPPvCardCoreDataStorage sharedInstance];
        // 2.2根据名片的数据存储创建电子名片模块
        self.vCard = [[XMPPvCardTempModule alloc] initWithvCardStorage:self.vCardStorage];
        // 2.3用 xmppstream 激活名片
        [self.vCard activate:self.xmppStream];

        // 电子名片配和头像模块一起使用
        // 3.添加头像模块
        // 3.1根据电子名片创建头像模块
        self.avatar = [[XMPPvCardAvatarModule alloc] initWithvCardTempModule:self.vCard];
        // 激活头像模块
        [self.avatar activate:self.xmppStream];


        // 4.添加花名册模块
        self.rosterStorage = [XMPPRosterCoreDataStorage sharedInstance];
        self.roster = [[XMPPRoster alloc] initWithRosterStorage:self.rosterStorage];
        [self.roster activate:self.xmppStream];

        // 设置代理,发到子线程中执行
        [self.xmppStream addDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
    }
    // 链接之前要判断是都链接成功,否则会出现用上一次的 jid 重复链接的错误
    if (![self.xmppStream isConnected]) {
        // 设置 xmppstream 的 myJID hostName hostPort 默认的5222可以不用设置
        self.xmppStream.myJID = [XMPPJID jidWithUser:@"zhangsan" domain:@"127.0.0.1" resource:nil];
        self.xmppStream.hostName = @"127.0.0.1";

        // 开始链接
        NSError * error = nil;
        if (![self.xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error]) {
            NSLog(@"%@",[error userInfo].description);
        }

    }
}

释放资源

// 在 dealloc 中调用
- (void)teardownStream
{
    // 移除代理
    [self.xmppStream removeDelegate:self];

    // 取消模块
    [self.vCard deactivate];
    [self.avatar deactivate];
    [self.roster deactivate];

    // 断开链接
    [self.xmppStream disconnect];

    // 清空资源
    self.roster = nil;
    self.rosterStorage = nil;
    self.vCardStorage = nil;
    self.vCard = nil;
    self.avatar = nil;
    self.xmppStream = nil;
}
///////////////////////////MeTableViewController///////////////////////////

好友列表的获取,添加,删除

@interface MeTableViewController ()<NSFetchedResultsControllerDelegate>

@property (strong,nonatomic) NSFetchedResultsController * resultsController;

@end

/**
 *  获取好友的结果集
 */
- (void)loadUser
{
    // 1.上下文
    NSManagedObjectContext *rosterContext = [[AppDelegate alloc] init].rosterStorage.mainThreadManagedObjectContext;

    // 2.请求查询
    NSFetchRequest * request = [NSFetchRequest fetchRequestWithEntityName:@"XMPPUserCoreDataStorageObject"];

    // 3.设置排序
    NSSortDescriptor * sort = [NSSortDescriptor sortDescriptorWithKey:@"displayName" ascending:YES];
    request.sortDescriptors = @[sort];

    self.resultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:rosterContext sectionNameKeyPath:nil cacheName:nil];
    self.resultsController.delegate = self;

    NSError * error = nil;
    [self.resultsController performFetch:&error];
    NSLog(@"%@",[[error userInfo] description]);

}
/**
 *  添加好友
 */
- (void)addRoster:(NSString*)userName
{
    // 不能添加自己为好友

    // 不能添加已经存在的好友
    XMPPJID * userJid = [XMPPJID jidWithUser:userName domain:@"127.0.0.1" resource:nil];
    AppDelegate * delegate = [[AppDelegate alloc] init];
    // 判断是否已经存的好友
    BOOL userExits = [delegate.rosterStorage userExistsWithJID:userJid xmppStream:delegate.xmppStream];
    if (!userExits) {
        // 添加好友(订阅)
        [delegate.roster subscribePresenceToUser:userJid];
    }

}

#pragma mark -结果控制器的代理
#pragma mark -数据库内容改变
-(void)controllerDidChangeContent:(NSFetchedResultsController *)controller{
    [self.tableView reloadData];
}


#pragma mark - Table view data source

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    // 结果集数组中的元素
    return self.resultsController.fetchedObjects.count;
}

/**
 *  获取好友列表
 */
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString * ID = @"cell";
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:ID];

    if (cell==nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    }
    // 获取好友列表
    XMPPUserCoreDataStorageObject *user = self.resultsController.fetchedObjects[indexPath.row];
    cell.textLabel.text= user.displayName;

    if (user.photo) { // 先从本地数据库中取数据
        cell.imageView.image = user.photo;
    }else{ // 从服务器上取数据
        NSData * imagedata = [[[AppDelegate alloc] init].avatar photoDataForJID:user.jid];
        cell.imageView.image = [UIImage imageWithData:imagedata];
    }

    return cell;
}

/**
 *  删除好友
 */
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    XMPPUserCoreDataStorageObject *user = self.resultsController.fetchedObjects[indexPath.row];
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // 删除好友列表
        [[[AppDelegate alloc] init].roster removeUser:user.jid];
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值