Smack类库最好的学习资料

即时通讯系列阅读

  1. 即时通讯基础
  2. 即时通讯:XMPP基础
  3. 即时通讯:XMPP项目实践-微聊
  4. Smack类库最好的学习资料

1. 登陆IM

Connection.DEBUG_ENABLED = true;//首先激活调试模式

1.1 建立连接

首先,在启动DSM Message时,客户端通过XMPPConnection与服务器建立连接。建立连接的方式有两种:

直接连到服务器

Connection conn = new XMPPConnection("localhost");//创建连接
//其中“localhost”是服务器地址,由于我用的是本机,所以是“localhost”。
conn.connect();//接通连接

根据配置连接

ConnectionConfiguration config = ConnectionConfiguration();
config.setServiceName("localhost");//还可以设置很多其他属性,如隐身登陆
Connection conn1 = new XMPPConnection(config);
conn1.connect();

1.2 用户登陆

建立连接之后就是用户登陆了,openfire是支持多终端登陆的,下面的resource就是指的是终端名称,如Smack、Spark等。登陆的方法有两个

login(String username, String password)和
login(String username, String password, String resource)

具体例子如下,livsun与livsun1是两个用户,密码都是111

conn.login("livsun", "111","Smack");
// resource也可以缺省不设置
conn1.login("livsun1", "111");

本文后面默认livsun与livsun1已经登陆,且与服务器的连接分别conn和conn1.

1.3 断开连接

断开连接只需调用disconnect()方法,如conn.disconnect();

2. 单人聊天

2.1 发起会话请求

作为一款IM软件的通信协议,首要功能就是聊天。聊天包含两种方式,主动向其他人发起会话;也可以接受别人的会话请求。下面是主动对别人发起会话的实现:

conn.getChatManager.createChat(String userID, MessageListener listener);

其中userID是本次对话请求的接收方的标志,如UserID是livsun1@z00189374/Smack,livsun1@z00189374是对话请求的接收方,/Smack说明用户是在哪个终端登陆的,可以缺省不写。

2.1.1 消息监听

当想一个用户发起会话请求,对方接受请求并创建会话后,对方可能发送消息回来,这时需要对接受的消息进行处理。这里要用到MessageListener。

下例将创建一个会话并对收到的消息进行输出:

Chat chat = conn.getChatManager().createChat("livsun1@z00189374/Smack", new MessageListener(){
    public void processMessage(Chat chat0, Message message)
   {
      System.out.println("来自livsun1的消息,内容为"+message.getBody());              
   }
});

红色chat是这次创建的对话对象,它在livsun跟livsun1之间建立一个会话连接;同事处理来自livsun1的消息。如果livsun想要发消息,需要用chat来调用sendMessage方法。具体可见下例:

chat.sendMessage("Hello,I’m livsun");

2.1.2 会话请求监听

通过上面例子可以知道livsun怎样发送了一个消息给livusn1。但是livsun1需要知道何时livsun发了一个消息给自己,同时还要对这个消息进行处理。Smack提供了会话请求监听接口ChatManagerListener,每个用户通过实现该接口,来监听没一个会话的创建请求。这里再以livsun1为例来展示一下:

chat.getChatManager. addChatListener(ChatManagerListener listener);

ChatManagerListener只有一个方法chatCreated(Chat chat, boolean createdLocally),它用来处理当chat创建时的具体操作。

具体请看下面例子:

conn1.getChatManager().addChatListener(
                 new ChatManagerListener() {
                         public void chatCreated(Chat chat, boolean createdLocal) {
                                 //自己创建是指自己调用createChat方法,它也会触发这个listener
                                 //在创建对话时就会制定MessageListener,这样判断主要是为了避免重复定义//MessageLister
                                 if (createdLocal) {
                                         System.out.println("这个chat是自己创建的");
                                 }
                                 //创建与livsun的对话,这里面可以通过message来获取发送聊天请求的人信息
                                 else {
                                         System.out.println("别人想跟我聊天");
                                         chat.addMessageListener(new MessageListener() {
                                                 public void processMessage(Chat chat, Message message) {
                                                         System.out.println(message.getFrom + "想跟我聊天");
                                                         chat.sendMessage("你好");
                                                 }
                                         });
                                 }
         
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值