即时通讯系列阅读
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("你好");
}
});
}