zoukankan      html  css  js  c++  java
  • iOS xmpp的使用

    #import "AppDelegate.h"



    //#import "DBAreaItem.h"


    #pragma mark -

    #pragma mark Private Interface

    @interface AppDelegate()

    typedef enum

    {

       AlertViewStyleConflict=10,//登陆冲突

       AlertViewStyleFailAuthenticate=11,//登陆失败

       AlertViewStyleDisconnect=12//server链接失败

    }AlertViewStyle;


    @property(nonatomic,assign) int AlertViewTag;


    @end



    #pragma markImplementation

    @implementation AppDelegate

    #pragma mark Properties

    @synthesize window =_window;

    @synthesizecacheinfo,settinginfo,serverInfo,userInfo;

    //xmpp

    @synthesize xmppStream;

    @synthesize xmppRoster;

    @synthesizexmppRosterStorage;

    @synthesize xmppReconnect;

    @synthesizexmppMessageArchivingCoreDataStorage;

    @synthesizexmppMessageArchivingModule;

    @synthesizejxlName,jxlNumber;

    @synthesizexmppvCardStorage,xmppvCardTempModule,xmppvCardAvatarModule,xmppCapabilitiesStorage,xmppCapabilities;


    #pragma mark UIApplicationDelegate

    - (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    {


       [selfmySetupStream];

        

       return YES;

    }



    #pragma mark - actions

    - (void)mySetupStream{

       self.messageRecordDic = [[NSMutableDictionary alloc]init];//聊天信息的读取写在认证通过里面

    //    self.myCardInfo =[[NSMutableDictionary alloc] init];

       self.rosterArray =[[NSMutableArray alloc] initWithCapacity:10];

       self.messageSenders=[[NSMutableDictionary alloc] initWithCapacity:10];

       self.allUsersDataDic=[[NSMutableDictionary alloc] initWithCapacity:10];;


       // 初始化xmppStream

       if(xmppStream) {

           return;

        }

       xmppStream =[[XMPPStream alloc]init];

       [xmppStreamaddDelegate:self delegateQueue:dispatch_get_main_queue()];

       //同意后台模式(注意ios模拟器上是不支持后台socket)

       xmppStream.enableBackgroundingOnSocket = YES;

        

       // 初始化xmppReconnect

       xmppReconnect = [[XMPPReconnect alloc]init];

        

       // 初始化xmppRosterStorage   roster

       xmppRosterStorage = [[XMPPRosterCoreDataStorage alloc]init];

       xmppRoster =[[XMPPRoster alloc]initWithRosterStorage:xmppRosterStorage];

       [xmppRosteraddDelegate:self delegateQueue:dispatch_get_main_queue()];

       xmppRoster.autoFetchRoster = YES;

       xmppRoster.autoAcceptKnownPresenceSubscriptionRequests= YES;

        

       // 初始化vCard support

       xmppvCardStorage = [XMPPvCardCoreDataStorage sharedInstance]; 

       xmppvCardTempModule = [[XMPPvCardTempModule alloc]initWithvCardStorage:xmppvCardStorage];

       xmppvCardAvatarModule = [[XMPPvCardAvatarModule alloc]initWithvCardTempModule:xmppvCardTempModule];

       [xmppvCardTempModuleaddDelegate:self delegateQueue:dispatch_get_main_queue()];

       [xmppvCardAvatarModuleaddDelegate:self delegateQueue:dispatch_get_main_queue()];

        

       // 初始化capabilities

       xmppCapabilitiesStorage = [XMPPCapabilitiesCoreDataStoragesharedInstance];

       xmppCapabilities = [[XMPPCapabilities alloc]initWithCapabilitiesStorage:xmppCapabilitiesStorage];

       xmppCapabilities.autoFetchHashedCapabilities = YES;

       xmppCapabilities.autoFetchNonHashedCapabilities= NO;

        

       // 初始化message

       xmppMessageArchivingCoreDataStorage=[XMPPMessageArchivingCoreDataStorage sharedInstance];

       xmppMessageArchivingModule = [[XMPPMessageArchiving alloc]initWithMessageArchivingStorage:xmppMessageArchivingCoreDataStorage];

       [xmppMessageArchivingModulesetClientSideMessageArchivingOnly:YES];

       [xmppMessageArchivingModule activate:xmppStream];

       [xmppMessageArchivingModule addDelegate:selfdelegateQueue:dispatch_get_main_queue()];

       // 激活xmpp的模块

       [xmppReconnect        activate:xmppStream];

        [xmppRoster          activate:xmppStream];

       [xmppvCardTempModule   activate:xmppStream];

       [xmppvCardAvatarModule activate:xmppStream];

       [xmppCapabilities     activate:xmppStream];

        

         //以下这两个依据你自己配置须要来设置

    //    allowSelfSignedCertificates= NO;

    //    allowSSLHostNameMismatch =NO;

        

    }

    - (void)myTeardownStream//

    {

    [xmppStream removeDelegate:self];

    [xmppRoster removeDelegate:self];

     

    [xmppReconnect       deactivate];

    [xmppRoster          deactivate];

    [xmppvCardTempModule  deactivate];

    [xmppvCardAvatarModuledeactivate];

    [xmppCapabilities     deactivate];

     

    [xmppStream disconnect];

    xmppStream = nil;

    xmppReconnect = nil;

       xmppRoster = nil;

    xmppRosterStorage =nil;

    xmppvCardStorage = nil;

       xmppvCardTempModule = nil;

    xmppvCardAvatarModule =nil;

    xmppCapabilities = nil;

    xmppCapabilitiesStorage =nil;

    }

    - (BOOL)myConnect//链接server,验证password并上线

    {

        if ([xmppStream isConnected]) {

           returnYES;

        }

       [self.rosterInfoDic removeAllObjects];

       [self.allUsersDataDicremoveAllObjects];

       [self.rosterArray removeAllObjects];

       NSString *strTransAite=[APPALL.cacheinfo.demailstringByReplacingOccurrencesOfString:@"@"withString:@"$"];

        NSLog(@"%@",strTransAite);

        XMPPJID *myjid = [XMPPJID jidWithUser:strTransAite domain:@"eim.abc.com.cn" resource:@"GIMI0.6"  ];

        [xmppStream setMyJID:myjid];

       [xmppStream setHostName:@"eim.abc.com.cn"];//设置server

       // [[self xmppStream]setHostPort:5222];

        NSError *error ;

       //NSLog(@"xmppStream=%@",xmppStream);

       [SVProgressHUDshowWithStatus:@"登录中..."];

       if(![xmppStream connectWithTimeout:1error:&error])//XMPPStreamTimeoutNone

        {

           NSLog(@"my connected error : %@",error.description);

           [SVProgressHUDshowErrorWithStatus:@"server连接失败"];

           returnNO;

        }

        else{

           returnYES;

        }

    }


    - (void)myDisconnect//断开连接

    {

    [self myGoOffline];

    [xmppStream disconnect];

    }

    - (void)myDeleteRecord//清楚聊天,信息记录

    {

       [self.messageRecordDic removeAllObjects];

       [self.messageSenders removeAllObjects];


    }

    - (void)getMyQueryRoster//Request FriendList

    {

       NSLog(@"request friendlist...");

       NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"jabber:iq:roster"];

       NSXMLElement *iq = [NSXMLElement elementWithName:@"iq"];

       XMPPJID *myJID = self.xmppStream.myJID;

       [iq addAttributeWithName:@"from" stringValue:myJID.description];

       [iq addAttributeWithName:@"to"stringValue:myJID.domain];

       [iq addAttributeWithName:@"id"stringValue:nil];

       [iq addAttributeWithName:@"type" stringValue:@"get"];

        [iq addChild:query];

        [self.xmppStream sendElement:iq];

        

    }

    - (void)myGoOnline//上线

    {

       //简单上线

       XMPPPresence *presence = [XMPPPresence presence];

       [[selfxmppStream]sendElement:presence];


    }


    - (void)myGoOffline//下线

    {

    XMPPPresence *presence =[XMPPPresence presenceWithType:@"unavailable"];

    [[self xmppStream] sendElement:presence];

    }

    - (NSString*)writeDateBase_64Image:(NSString *)photoString WithFileName:(NSString *)theImageName Size:(CGSize)theSize

    {

        if ([photoString isEqualToString:@""]) {

           NSLog(@"writeDateBase_64Image 没有头像");

           return@"";

        }

       //压缩data再写入本地

        NSData *data=[photoString base64DecodedData];

        UIImage *aimage=[self scaleImage:[UIImage imageWithData:data] toSize:theSize];

        NSData *dataAfterscale=UIImageJPEGRepresentation(aimage,1.0);

       return  [DataPlist writeData:dataAfterscale ToTMPWithSubFloderName:@"headImageCache" FileName:theImageName];

    }

    -(UIImage*)scaleImage:(UIImage *)imagetoSize:(CGSize)theTize//图片压缩到指定CGSize大小

    {

       UIGraphicsBeginImageContext(theTize);

        [image drawInRect:CGRectMake(0, 0,theTize.width,theTize.height)];

       UIImage *scaledImage =UIGraphicsGetImageFromCurrentImageContext();

       UIGraphicsEndImageContext();

        return scaledImage;

    }

    - (void)updateallUsersDataDic_Group_Presence//更新分组+在线、离线状态好友数据

    {

       [self.allUsersDataDicremoveAllObjects];

        for(inti = 0; i < self.rosterArray.count; i++)

        {

           NSMutableDictionary *adic = [self.rosterArray objectAtIndex:i];

           XMPPJID*ajid=[adic objectForKey:@"object"];

           if ([ajid.user isEqualToString:xmppStream.myJID.user])

           {

              continue;

           }

           NSString*groupName=[adic objectForKey:@"group"];//分组名

           NSString*presenceType=[adic objectForKey:@"presenceType"];//状态

           NSMutableArray*arrayWithgroupName=[self.allUsersDataDic objectForKey:groupName];//该keyword的数组

           if(arrayWithgroupName)//存在该keyword的数组

           {

              

              if ([presenceType isEqualToString:@"yes"])

               {

                  [arrayWithgroupNameinsertObject:[NSNumber numberWithInt:i] atIndex:0];//在线好友加到数组第一个

               }

              else

               {

                  [arrayWithgroupNameaddObject:[NSNumber numberWithInt:i]];//离线的好友,加到数组最后一个

               }

           }

           else//不存在该keyword的数组

           {

              NSMutableArray*newArray=[[NSMutableArrayalloc]init];

               [newArrayaddObject:[NSNumber numberWithInt:i]];//在线或者离线的好友。加到空白数组里面

              [self.allUsersDataDic setObject:newArray forKey:groupName];//groupName=newArray,加入到allUsersDataDic

           }

           


        }

    }

    #pragma mark - XMPPStreamDelegate


    - (void)xmppStreamDidConnect:(XMPPStream *)sender

    {

       //验证password

        NSError *error;

        NSString *md5password= [APPALL.cacheinfo.dpassword MD5Digest];

        NSLog(@"%s-- md5password=%@",__func__,md5password);

       [xmppStreamauthenticateWithPassword:md5password error:&error];

    }

    - (void)xmppStreamDidAuthenticate:(XMPPStream*)sender

    {

       NSLog(@"验证通过%s-- sender.hostName=%@remoteJID.description=%@  sender.keepAliveInterval=%f",__func__,sender.hostName,sender.remoteJID.description,sender.keepAliveInterval);

       XMPPPresence *presence = [XMPPPresence presence];

       [[selfxmppStream]sendElement:presence];

        

       [xmppvCardTempModule fetchvCardTempForJID:xmppStream.myJID];

       self.lastFetchedvCard=xmppStream.myJID;

    //      self.rosterInfoDic=[DataPlistopenDPFromDocumentsWithName:xmppStream.myJID.userAndTheType:@"plist"];//我的(xmppStream.myJID.user的)好友信息

       self.rosterInfoDic=[DataPlist openPlistFromDocumentWithName:xmppStream.myJID.user AndTheType:@"plist"];//我的(xmppStream.myJID.user的)好友信息


        NSLog(@"验证通过,本地好友信息数目=%d",self.rosterInfoDic.count);


    }


    - (void)xmppStream:(XMPPStream *)senderdidNotAuthenticate:(NSXMLElement *)error//

    {

       NSLog(@"验证失败didNotAuthenticate:%@",error.description);

       [SVProgressHUD dismiss];

       [selfmyDisconnect];


       self.AlertViewTag =AlertViewStyleFailAuthenticate;

       [toolesshowSelectMsgBoxWithTitle:nilandMsg:@"登录失败,是否又一次登录?"andDelegate:self];

    }


    - (BOOL)xmppStream:(XMPPStream*)sender didReceiveIQ:(XMPPIQ*)iq//返回IQ(好友列表、)

    {

       NSLog(@"--type:%@",iq.type);

    //   NSLog(@"--%@",[iq.childElement children]);

    //   NSLog(@"--child:%@",iq.childElement );

        if ([@"result" isEqualToString:iq.type]) {

           NSXMLElement*query = iq.childElement;

           NSXMLElement*aitem=[[query children]lastObject];

           NSString*ajid = [aitem attributeStringValueForName:@"jid"];

           NSLog(@"ajid=%@",ajid);

           if([@"query" isEqualToString:query.name]&&ajid) {

              NSArray *items = [querychildren];

              NSLog(@"iq.to=%@ items.count=%d ",iq.to,items.count);

              [self.rosterArray removeAllObjects];

              for (NSXMLElement *item in items) {

    //             "U9510U6770U7f51U683c",

                  NSString *groupName= [[item.children objectAtIndex:0]stringValue];

                  NSString *jid = [item attributeStringValueForName:@"jid"];

                  NSLog(@"分组groupName=%@",groupName);

                  XMPPJID *object = [XMPPJID jidWithString:jid];

                  NSMutableDictionary *dic=[[NSMutableDictionary alloc]initWithObjectsAndKeys:object,@"object",@"no",@"presenceType",groupName,@"group", nil];

                  [self.rosterArray addObject:dic];

                  //

                  if (![self.rosterInfoDic objectForKey:object.user]&&object)//if本地数据没有该好友信息,就请求fetchvCardTempForJID

                  {

                     self.lastFetchedvCard=nil,self.lastFetchedvCard=object;

                  [xmppvCardTempModulefetchvCardTempForJID:objectignoreStorage:YES];

                  }

    //              NSLog(@"FAMILY=%@ self.lastFetchedvCard=%@ object.description=%@",[[self.rosterInfoDic objectForKey:object.user]objectForKey:@"FAMILY"],self.lastFetchedvCard,object.description);


               }

    //          //发送通知

              NSNotification*notificationObject =[NSNotification notificationWithName:@"upDateListData"object:nil];

              [[NSNotificationCenterdefaultCenter] postNotification:notificationObject];


           }

           if([@"vCard" isEqualToString:query.name])

           {

           }

        }

       return YES;

    }

    - (void)xmppStream:(XMPPStream*)sender didSendMessage:(XMPPMessage *)message

    {

        NSString *msg = [[message elementForName:@"body"] stringValue];

        NSString *from = [[message attributeForName:@"from"] stringValue];

       NSString *to =[[message attributeForName:@"to"]stringValue];

        NSString *type= [[message attributeForName:@"type"] stringValue];

        NSRange range=[to rangeOfString:@"@"];

        if(range.length==0)return;

        NSString *toSimple=[to substringToIndex:range.location];

        NSLog(@"发送给%@的消息:%@ (消息类型:%@)",toSimple,msg,type);

       if([messageisChatMessageWithBody])//message

        {

           NSMutableDictionary*dict = [NSMutableDictionarydictionary];

           [dict setObject:from forKey:@"sender"];

           [dict setObject:msg forKey:@"msg"];

           [dict setObject:@"text" forKey:@"type"];

           [dict setObject:[NSDate date] forKey:@"date"];


           if(![self.messageRecordDic objectForKey:toSimple]&&dict) {

              NSMutableArray *array=[[NSMutableArray alloc]init];

               [arrayaddObject:dict];

              [self.messageRecordDic setObject:array forKey:toSimple];

           }

           else

           {

              NSMutableArray*array1=[self.messageRecordDic objectForKey:toSimple];

               [array1addObject:dict];

           }

           [self.messageSenders setObject:@"0"forKey:toSimple];//将近期联系人放入messageSenders

           NSNotification *notificationObject=[NSNotification notificationWithName:@"messageGetting"object:nil];

           [[NSNotificationCenter defaultCenter]postNotification:notificationObject];

        }

    }

    - (void)xmppStream:(XMPPStream*)sender didReceiveMessage:(XMPPMessage *)message

    {

        NSString *msg = [[message elementForName:@"body"] stringValue];

        NSString *from = [[message attributeForName:@"from"] stringValue];

        NSString *type= [[message attributeForName:@"type"] stringValue];

        NSRange range=[from rangeOfString:@"@"];

        if(range.length==0)return;

        NSString *fromSimple=[from substringToIndex:range.location];

        NSLog(@"接受%@的消息:%@ (消息类型:%@)",fromSimple,msg,type);

        NSLog(@"接受消息%@",message);

       if([messageisChatMessageWithBody])//message

        {

           NSLog(@"%@",message);

           NSMutableDictionary*dict = [NSMutableDictionarydictionary];

           [dict setObject:fromSimple forKey:@"sender"];

           [dict setObject:msg forKey:@"msg"];

           [dict setObject:@"text" forKey:@"type"];

           [dict setObject:[NSDate date] forKey:@"date"];


           if(![self.messageRecordDic objectForKey:fromSimple]&&dict){

              NSMutableArray *array=[[NSMutableArray alloc]init];

               [arrayaddObject:dict];

              [self.messageRecordDic setObject:array forKey:fromSimple];

           }

           else

           {

              NSMutableArray*array1=[self.messageRecordDic objectForKey:fromSimple];

               [array1addObject:dict];

           }

           //未读消息来源者

           if(![self.messageSenders objectForKey:fromSimple]) {

              [self.messageSenders setObject:@"1" forKey:fromSimple];

           }

           else

           {

              int number=[[self.messageSenders objectForKey:fromSimple] intValue]+1;

              [self.messageSenders setObject:[NSString stringWithFormat:@"%d",number] forKey:fromSimple];


           }

        }

       else//语音、图片类

        {

           NSLog(@"其它信息");

        }

        NSNotification *notificationObject=[NSNotification notificationWithName:@"messageGetting"object:nil];

        [[NSNotificationCenter defaultCenter]postNotification:notificationObject];


    }

    - (void)xmppStream:(XMPPStream*)sender didReceivePresence:(XMPPPresence *)presence

    {

        NSLog(@"___%s",__func__);

          NSString*presenceType = [presence type]; //online/offline

       //当前用户

        NSString *userId = [[[APPALL xmppStream]myJID]user] ;

       //在线用户

        NSString *presenceFromUser = [[presencefrom] user];

        if (![presenceFromUser isEqualToString:userId]) {

           //在线状态

           if([presenceType isEqualToString:@"available"]) {

              //用户列表托付

              for (NSMutableDictionary *dic in self.rosterArray) {

                  XMPPJID *object = [dic objectForKey:@"object"];

                  if ([object.user hasPrefix:presenceFromUser]) {

                     [dic setObject:@"yes" forKey:@"presenceType" ];

                  }

               }

              NSLog(@"%@上线了",presenceFromUser);

           }elseif ([presenceType isEqualToString:@"unavailable"]) {

              //用户列表托付

              for (NSMutableDictionary *dic in self.rosterArray) {

                  XMPPJID *object = [dic objectForKey:@"object"];

                  if ([object.user hasPrefix:presenceFromUser]) {

                     [dic setObject:@"no" forKey:@"presenceType" ];

                  }

               }

              NSLog(@"%@下线了",presenceFromUser);

           }

        }

       [selfupdateallUsersDataDic_Group_Presence];

       //发送好友列表刷新通知

        NSNotification *notificationObject=[NSNotification notificationWithName:@"upDateListData"object:nil];

        [[NSNotificationCenter defaultCenter] postNotification:notificationObject];


        

    }

    - (void)xmppStream:(XMPPStream*)sender didReceiveError:(NSXMLElement *)error

    {

       NSLog(@"didReceiveError description: %@",error.description);

        DDXMLNode *errorNode = (DDXMLNode *)error;

        for(DDXMLNode *node in [errorNode children])

        {

           //若错误节点有【冲突】

           if([[nodename] isEqualToString:@"conflict"])

           {

              //停止轮训检查链接状态

    //           [_timerinvalidate];

              [self myDisconnect];

              NSNotification*notificationObject =[NSNotification notificationWithName:@"upDateListData"object:nil];

              [[NSNotificationCenterdefaultCenter] postNotification:notificationObject];

              self.AlertViewTag = AlertViewStyleConflict;

              [tooles showSelectMsgBoxWithTitle:nilandMsg:@"您的账户已在其它手机上登录,您已被挤下线,请确定是否是您本人操作!是否又一次登录?"andDelegate:self];

           }

        }

    }


    - (void)xmppStream:(XMPPStream*)sender didSendIQ:(XMPPIQ*)iq

    {

       NSLog(@"didSendIQ:%@",iq.description);

    //    1 didSendIQ:

    //    2 didSendIQ:

    //    3、(手动发送好友列表请求) didSendIQ:}


    - (void)xmppStream:(XMPPStream*)sender didFailToSendMessage:(XMPPMessage *)message error:(NSError *)error

    {

       NSLog(@"didFailToSendMessage:%@",error.description);

       [SVProgressHUDshowErrorWithStatus:@"消息发送失败"];

    }

    - (void)xmppStream:(XMPPStream*)sender didFailToSendPresence:(XMPPPresence *)presence error:(NSError *)error

    {

       NSLog(@"didFailToSendPresence:%@",error.description);

       [SVProgressHUDshowErrorWithStatus:@"状态更新失败"];


    }

    //[xmppStream disconnect]时会运行;掉线、断网故障时不运行

    - (void)xmppStreamWasToldToDisconnect:(XMPPStream*)sender

    {

       NSLog(@"xmppStreamWasToldToDisconnect");

    }


    //[xmppStream disconnect]、掉线、断网故障时运行

    - (void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error

    {

       NSString *str=[NSString stringWithFormat:@"server连接失败%@",[error.userInfoobjectForKey:@"NSLocalizedDescription"]];

        NSLog(@"%s--=%@--- error=%@",__func__,str,error);

       NSLog(@"error.userInfo =%@",error.userInfo);

       //登陆不到server

    //    error.userInfo ={

    //       NSLocalizedDescription = "nodename nor servnameprovided, or not known";

    //    }

       [selfmyDisconnect];

       if([error.userInfo objectForKey:@"NSLocalizedDescription"]) {

           [SVProgressHUD showErrorWithStatus:[error.userInfo objectForKey:@"NSLocalizedDescription"]];

        }

        else

        {

           [SVProgressHUDshowErrorWithStatus:@"好友server连接失败!"];

        }

    }

    #pragma mark - XMPPReconnectDelegate

    - (void)xmppReconnect:(XMPPReconnect *)senderdidDetectAccidentalDisconnect:(SCNetworkReachabilityFlags)connectionFlags

    {

       NSLog(@"didDetectAccidentalDisconnect:%u",connectionFlags);

    }

    - (BOOL)xmppReconnect:(XMPPReconnect *)sendershouldAttemptAutoReconnect:(SCNetworkReachabilityFlags)reachabilityFlags

    {

       NSLog(@"shouldAttemptAutoReconnect:%u",reachabilityFlags);

       return YES;

    }


    #pragma mark-XMPPvCardTempModuleDelegate名片信息


    - (void)xmppvCardTempModule:(XMPPvCardTempModule *)vCardTempModule

           didReceivevCardTemp:(XMPPvCardTemp *)vCardTemp

                      forJID:(XMPPJID *)jid

    {

    //    NSLog(@"%s",__func__);

        NSXMLElement *xmlData=(NSXMLElement *)vCardTemp;

        NSString *titleString = @"这个用户非常懒。没有签名!

    ";

        NSString *familyString = @"无名用户";

        NSString *photoString = @"";

        for(idmyItem in [xmlData children])

        {

           NSLog(@"myItemname=%@",[myItem name]);

           if([myItemstringValue].length <= 100)

           {

    //          NSLog(@"valuelalala:%@",[myItem stringValue]);

           }

           else

           {

              NSLog(@"too long");

           }

           if([[myItemname] isEqualToString:@"TITLE"])

           {

              titleString = [myItem stringValue];

           }

           elseif([[myItem name] isEqualToString:@"N"])

           {

              familyString = [myItem stringValue];

           }

           elseif([[myItem name] isEqualToString:@"PHOTO"])

           {

              photoString = [[myItem stringValue] substringFromIndex:5];

           }

        }

    //    头像image写入本地

        NSString *PHOTOImagePath=[self writeDateBase_64Image:photoStringWithFileName:jid.user Size:CGSizeMake(88, 88)];

        NSMutableDictionary*dicObject=[[NSMutableDictionary alloc]initWithObjectsAndKeys:titleString,@"TITLE",familyString,@"FAMILY",PHOTOImagePath,@"PHOTO",nil];

        [self.rosterInfoDic setObject:dicObject forKey:jid.user];//

       //family photopath title 写入本地

       NSLog(@"forJID:(XMPPJID *)jid=%@  self.lastFetchedvCard=%@   ",jid.user,self.lastFetchedvCard.user);

       if([self.lastFetchedvCard.user isEqualToString:jid.user])//(在最后一次名片请求的时候,写入本地,)

        {

    //       [DataPlist writeDP:self.rosterInfoDicWithName:xmppStream.myJID.user AndTheType:@"plist"];

           [DataPlistwritePlistToDocumentWithDic:self.rosterInfoDic WithName:xmppStream.myJID.userAndTheType:@"plist"];

        }

        NSNotification *notificationObject=[NSNotification notificationWithName:@"upDateListData"object:nil];

        [[NSNotificationCenter defaultCenter] postNotification:notificationObject];

    }

    - (void)xmppvCardTempModuleDidUpdateMyvCard:(XMPPvCardTempModule*)vCardTempModule//更新名片

    {

        NSLog(@"%s--%@",__func__,vCardTempModule);

    }


    //获取完善友列表

    - (void)xmppRosterDidEndPopulating:(XMPPRoster*)sender

    {

       NSLog(@"获取完成好友列表");

       [SVProgressHUDshowSuccessWithStatus:@"登录成功"];

       if([self.lastFetchedvCard.user isEqualToString:xmppStream.myJID.user]){

           [SVProgressHUDdismiss];

        }

       [selfupdateallUsersDataDic_Group_Presence];

       //发给BigDesktopViewController

        NSNotification *notificationObject_1=[NSNotification notificationWithName:@"DidAuthenticate"object:nil];

        [[NSNotificationCenter defaultCenter] postNotification:notificationObject_1];


       //发送通知BigFriendListViewController

        NSNotification *notificationObject=[NSNotification notificationWithName:@"upDateListData"object:nil];

        [[NSNotificationCenter defaultCenter] postNotification:notificationObject];


    }


    //- (XMPPvCardTemp *)myvCardTempForXMPPStream:(XMPPStream*)stream

    //{}

    #pragma mark Core Data

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


    - (NSManagedObjectContext*)managedObjectContext_roster

    {

    return [xmppRosterStoragemainThreadManagedObjectContext];

    }


    - (NSManagedObjectContext*)managedObjectContext_capabilities

    {

    return [xmppCapabilitiesStoragemainThreadManagedObjectContext];

    }

    #pragma mark - XMPPRosterDelegate


    - (void)xmppRoster:(XMPPRoster*)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence

    {

        NSLog(@"好友状态更改--%s",__func__);

    }


    - (void)xmppRoster:(XMPPRoster*)sender didReceiveBuddyRequest:(XMPPPresence *)presence//接受好友请求

    {

    NSLog(@"%s",__func__);

    XMPPUserCoreDataStorageObject *user =[xmppRosterStorage userForJID:[presence from]

                                                   xmppStream:xmppStream

                                           managedObjectContext:[self managedObjectContext_roster]];

     

    NSString *displayName = [userdisplayName];

    NSString *jidStrBare =[presence fromStr];

    NSString *body = nil;

     

    if (![displayName isEqualToString:jidStrBare])

    {

    body = [NSString stringWithFormat:@"Buddy request from %@


  • 相关阅读:
    STP生成树协议
    Fiddler快速入门(还有一个功能就是不经过网络,直接模拟一个响应返回给客户端)
    Qt宏Q_OBJECT展开记录
    rem_taobaofix.js
    yield return
    NET full stack framework
    API 网关
    Redis主从高可用缓存
    数据异构解决方案缓存一致性和跨服务器查询
    NET Core 防止跨站请求
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6820595.html
Copyright © 2011-2022 走看看