资源预览内容
第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
第9页 / 共14页
第10页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1.登陆登陆 IMConnection.DEBUG_ENABLED = true;/首先激活调试模式1.1 建立连接建立连接首先,在启动 DSM Message 时,客户端通过 XMPPConnection 与服务器建立连接。建 立连接的方式有两种: 1.直接连到服务器 Connection conn = new XMPPConnection(“localhost“);/创建连接 /其中“localhost”是服务器地址,由于我用的是本机,所以是“localhost”。 conn.connect();/接通连接 2.根据配置连接 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 是 livsun1z00189374/Smack,livsun1z00189374 是对话请求的接收方,/Smack 说明用户是 在哪个终端登陆的,可以缺省不写。2.1.1 消息监听消息监听当想一个用户发起会话请求,对方接受请求并创建会话后,对方可能发送消息回来, 这时需要对接受的消息进行处理。这里要用到 MessageListener。 下例将创建一个会话并对收到的消息进行输出: Chat chat = conn.getChatManager().createChat(“livsun1z00189374/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,Im 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,这样判断主要是为了避免重复定义 /MessageListerif(createdLocal)System.out.println(“这个chat是自己创建的“);/创建与livsun的对话,这里面可以通过message来获取发送聊天请求的人信息elseSystem.out.println(“别人想跟我聊天“);chat.addMessageListener(new MessageListener()public void processMessage(Chat chat, Message message)System.out.println(message.getFrom+“想跟我聊天)chat.sendMessage(“你好“);););2.1.3 会话状态监听会话状态监听通常用户在参加一个会话时,想知道另一个用户是否正在输入。会话状态有五种: active(参加会话), composing(正在输入), gone(离开), inactive(没有参加会话), paused(暂停输入) 。 如果想要对会话状态监听,需要在用户登陆之后,会话建立之前,添加 ChatStateManager 对象,方法为 ChatStateManager.getInstance(XPMMConnectio conn);譬如 获取 livsun 连接的 ChatStateManager 代码是 ChatStateManager csm = ChatStateManager(conn);在客户端,根据用户对于一个会话的不同操作,通过 ChatStateManager 调用方法 setCurrentState(ChatState newState, Chat chat)来设置会话的即时状态。如当 livsun 正在打字 输入,则可以通过 csm.setCurrentState(ChatState.composing, chat)来设置状态为正在输入。 在客户端,还需要对会话状态改变进行监听,ChatStateListener 继承 MessageListener,方法是 stateChanged(Chat chat, ChatState state),由于 Chat 类没有直接添加 ChatStateListener 的方法,因此需要自己编写一个内部类实现 ChatStateListener 和 MessageListener 两个接口。 请看例子: private class SelfListener implements ChatStateListener, MessageListenerpublic void stateChanged(Chat arg0, ChatState arg1) Public void processMessage(Chat arg0, Message arg1) MessageListener messageListener = new SelfListener();这样当会话对方的 ChatState 发生改变时,stateChanged 方法就被触发。实际上是接收 到一个内容为空的 Message,Message 里通知 ChatState 改变。2.2 消息消息2.2.1 设置消息的属性设置消息的属性发送消息的方法 sendMessage(),它有两种实现方式,sendMessage(String text) 和 sendMessage(Message message)。第一种就是上面例子中所用的,直接以 String 为对象,发 送一个消息。 为了满足用户自定义需求,Smack 提供了第二种方式,它可以为 message 添加一些附 加属性,在 message 中他们只显示为 String 字段。在客户端接收时,可以通过处理来让这 些字段有特定的意义,譬如设置发送文字的大小,字体,颜色等。 这里需要了解 Message 这个类,它有三种构造函数,Message()、Message(String text) 和 Message(String text, Message.Type type)其中 text 是要发送的内容,Message.Type 共有五 种,常用的为 chat 和 groupchat。 Message 中有很多方法,通过这些方法可以设置或者取得消息的属性,如 addBody()添 加消息内容,getBody()获得消息内容,getFrom()获取消息的发送者等。Message 还有 API 中没有提到的方法:setProperty(String name, String value)。通过这个方法我们可以设置很多 自己定义的属性,可参见下面例子: Message message = new Message(); message.setBody(“This is a Message text”); message.setProperty(“color”,”red”); message.setProperty(“size”, “big”); message.setProperty(“isPictureIn”,”false”); chat.sendMessage(message);这样就发送了一个包含一些特定属性的消息。当用户收到这样的消息后,通过调用 message. getPropertyNames()方法来获取所有属性的一个 Collection。再通过 message.getProprety(String name)来获取名为 name 属性的值,根据用户自己的定义,可以 实现 API 没有提供的功能,如改变消息显示字体颜色。2.2.2 消息状态跟踪消息状态跟踪对于发送出去的消息,有时候需要获取消息发送的情况,如是否发送成功,对方是够 处理等,这些功能需要用到 MessageEventManager,通过调用 MessageEventManager. addNotificationsRequests(Message message, boolean offline, boolean delivered, boolean displayed, boolean composing)来对消息的状态进行标记跟踪,message 为将要发送 的消息,剩余四项为可选择的跟踪选项,true 为跟踪。 当对其中部分选项进行跟踪后,下一步操作就是对跟踪响应结果进行监控。比如你想 知道自己发送消息的标记结果,需要创建一个 MessageEvenetManager 对象,并调用方法 addMessageE
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号