XMPP - 实现登录与注销

实现登录与注销

#import "AppDelegate.h"
#import "XMPPFramework.h"
/*
 * 在AppDelegate实现登录

 1. 初始化XMPPStream
 2. 连接到服务器[传一个JID]
 3. 连接到服务成功后,再发送密码授权
 4. 授权成功后,发送"在线" 消息
 */
@interface AppDelegate ()<XMPPStreamDelegate>{
    XMPPStream *_xmppStream;
}

// 1. 初始化XMPPStream
-(void)setupXMPPStream;

// 2.连接到服务器
-(void)connectToHost;

// 3.连接到服务成功后,再发送密码授权
-(void)sendPwdToHost;

// 4.授权成功后,发送"在线" 消息
-(void)sendOnlineToHost;
@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // 程序一启动就连接到主机
    [self connectToHost];
    return YES;
}

#pragma mark  -私有方法
#pragma mark 初始化XMPPStream
-(void)setupXMPPStream{

    _xmppStream = [[XMPPStream alloc] init];

    // 设置代理
    [_xmppStream addDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
}

#pragma mark 连接到服务器
-(void)connectToHost{
    NSLog(@"开始连接到服务器");
    if (!_xmppStream) {
        [self setupXMPPStream];
    }

    // 设置登录用户JID
    //resource 标识用户登录的客户端 iphone android

    XMPPJID *myJID = [XMPPJID jidWithUser:@"zhouhao" domain:@"wangzhaolu.local" resource:@"iphone" ];
    _xmppStream.myJID = myJID;

    // 设置服务器域名
    _xmppStream.hostName = @"wangzhaolu.local";//不仅可以是域名,还可是IP地址

    // 设置端口 如果服务器端口是5222,可以省略
    _xmppStream.hostPort = 5222;

    // 连接
    NSError *err = nil;
    if(![_xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&err]){
        NSLog(@"%@",err);
    }

}

#pragma mark 连接到服务成功后,再发送密码授权
-(void)sendPwdToHost{
    NSLog(@"再发送密码授权");
    NSError *err = nil;
    [_xmppStream authenticateWithPassword:@"123456" error:&err];
    if (err) {
        NSLog(@"%@",err);
    }
}

#pragma mark  授权成功后,发送"在线" 消息
-(void)sendOnlineToHost{

    NSLog(@"发送 在线 消息");
    XMPPPresence *presence = [XMPPPresence presence];
    NSLog(@"%@",presence);

    [_xmppStream sendElement:presence];

}
#pragma mark -XMPPStream的代理
#pragma mark 与主机连接成功
-(void)xmppStreamDidConnect:(XMPPStream *)sender{
    NSLog(@"与主机连接成功");

    // 主机连接成功后,发送密码进行授权
    [self sendPwdToHost];
}
#pragma mark  与主机断开连接
-(void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error{
    // 如果有错误,代表连接失败
    NSLog(@"与主机断开连接 %@",error);

}

#pragma mark 授权成功
-(void)xmppStreamDidAuthenticate:(XMPPStream *)sender{
    NSLog(@"授权成功");

    [self sendOnlineToHost];
}

#pragma mark 授权失败
-(void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLElement *)error{
     NSLog(@"授权失败 %@",error);
}

#pragma mark -公共方法
-(void)logout{
    // 1." 发送 "离线" 消息"
    XMPPPresence *offline = [XMPPPresence presenceWithType:@"unavailable"];
    [_xmppStream sendElement:offline];

    // 2. 与服务器断开连接
    [_xmppStream disconnect];
}

@end

登录后的openfire

注销后的openfire

#import "ViewController.h"
#import "AppDelegate.h"

@interface ViewController ()

@end

@implementation ViewController

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    // 做注销
    AppDelegate *app = [UIApplication sharedApplication].delegate;
    [app logout];

}

@end

时间: 2024-08-08 01:25:31

XMPP - 实现登录与注销的相关文章

再学ajax--第二天 | 基于php+mysql+ajax的表单注册、登录、注销

写在前面 ajax学习到了第二天,这次是用第一天封装的ajax函数,后端使用了php+mysql实现基本的注册,登录,注销. php是我前几个月get到的技能,我已经学习到了面向对象,知道各修饰符的含义,继承,接口,构造函数,实例化对象 mysql是跟php一块学的,学习了基本增删改查. ajax原理其实不难理解,最主要的就是XMLHttpRequest(ActiveXObject("Microsoft.XMLHTTP")):在理解该对象之后,最主要理解的是前后端数据的传递问题,我也是

2.4.2、Django处理登录和注销

在上一节的基础上,我们已经引入了django.contrib.auth应用,我们就可以在view函数中判断用户是否已经登录以及获取用户信息: if request.user.is_authenticated():     #判断用户是否已登录 user = request.user;            #获取已登录的用户 else: user = request.user;            #非登录用户将返回AnonymousUser对象 Django的User对象提供了一系列的属性和

夺命雷公狗---linux NO:5 linux系统登录和注销

我们在系统中常用的有登录和注销,就用我们常见的系统用户root为例: 首先我们进行输入帐号和密码对她进行登录: 输入密码后回车系统即可登录..... 然后我们就开始对她进行注销,我们用到的命令是:  logout   ,如下所示 然后回车即可回到登录时候的界面,如下所示:

【新闻发布系统】登录和注销的实现

[新闻发布系统]登录和注销的实现 一.新闻发布系统简单分层 二.在Web项目的核心文件web.xml里面配置部署servlet 三.登录请求 处理请求: 四.注销请求(注销session并转到登录页面)

利用Session完成用户的登录和注销

用户的登录和注销是最常见的Web应用案例,当一个应用的客户登录了以后,其他所有的会话都得知道这个用户已经登录还很有可能得提取用户的昵称予以显示等等,所以,只有把登录成功的用户的信息放入到Session中才能够办到使所有的Servlet都能访问到用户的登录状态, 第一是登录的界面,是HTML的一个表单,非常的简单 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.or

权限模块_分配权限_实现分配权限(登录与注销)的基本功能

权限模块_分配权限_实现分配权限的基本功能 选哪个就能存起来那个,能回显.有依赖关系 把一组相关功能放在一起 RoleAction.java /** * 设置权限页面 */ public String setPrivilegeUI() { //准备回显的数据 Role role = roleService.getById(model.getId()); ActionContext.getContext().getValueStack().push(role);//放到栈顶,从栈顶找对象 if(r

linux引导和登录/注销配置文件

引导和登录/注销 /etc/issue & /etc/issue.net 这些文件由 mingetty(和类似的程序)读取,用来向从终端(issue)或通过 telnet 会话(issue.net)连接的用户显示一个“welcome”字符串.它们包括几行声明 Red Hat 版本号.名称和内核 ID 的信息.它们由 rc.local 使用. /etc/redhat-release 包括一行声明 Red Hat 版本号和名称的信息.由 rc.local 使用. /etc/rc.d/rc 通常在所有

Linux 登录、注销与关机

Linux 登录.注销与关机 这里主要学习的是命令行环境下的相关操作. 一.登录 Linux 默认的情况下会提供六个终端来让用户登录,切换的方式为使用:[Ctrl + Alt + F1 ~ F6]的组合键.系统会将 [F1] ~ [F6] 命名为 tty1 ~ tty6 的操作接口环境. 也就是说,当你按下 [Ctrl + Alt + F1]时,就会进入到 tty1 的终端界面中,同样的 [F2] 就是 tty2. tty 是 Teletype 的缩写.Teletype 是最早出现的一种终端设备

iOS开发——网络编程OC篇&amp;(二)XMPP实现用户登录与注销

登录: 步骤: * 在AppDelegate实现登录 1. 初始化XMPPStream 2. 连接到服务器[传一个JID] 3. 连接到服务成功后,再发送密码授权 4. 授权成功后,发送"在线" 消息 一:导入框架,根据上一篇文章的说明去导入相应的库与文件 二:定义一个XMPP的成员变量 1 @interface AppDelegate ()<XMPPStreamDelegate>{ 2 XMPPStream *_xmppStream; 3 } 三:按步骤在代理方法中声明四