为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

Smack类库最好的学习资料

2019-01-13 10页 doc 27KB 41阅读

用户头像

is_721103

暂无简介

举报
Smack类库最好的学习资料1.登陆IM Connection.DEBUG_ENABLED = true;//首先激活调试模式 1.1建立连接 首先,在启动DSM Message时,客户端通过XMPPConnection与服务器建立连接。建立连接的方式有两种: 1.直接连到服务器 Connection conn = new XMPPConnection("localhost");//创建连接 //其中“localhost”是服务器地址,由于我用的是本机,所以是“localhost”。conn.connect();//接通连接 2.根据配置...
Smack类库最好的学习资料
1.登陆IM Connection.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是livsun1@z00189374/Smack, livsun1@z00189374是对话请求的接收方,/Smack说明用户是在哪个终端登陆的,可以缺省 不写。 2.1.1消息监听 当想一个用户发起会话请求,对方接受请求并创建会话后,对方可能发送消息回来,这 时需要对接受的消息进行处理。这里要用到MessageListener。 下例将创建一个会话并对收到的消息进行输出: Chat chat= conn.getChatManager().createChat("livsun1@z00189374/Smack", new MessageListener(){ publicvoid 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(){ publicvoid 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(){ publicvoid 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, MessageListener{ public 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对象,并调用方法addMessageEventNotificationListener(MessageEventNotificationListener messageEventNotificati onListener)。 如果你想监控是否有人给自己发送消息跟踪请求,这时候需要调用方法addMessageEventRequestListener(MessageEventRequestListener messageEventRequestListener)。 2.2.3离线消息 发送消息时,用户不在线,系统会自动保存这些消息。当用户登录后,用户需要主动去服务器获取离线消息。主要用到的接口是OfflineMessageMananger。 这里有一个需要注意的地方,那就是用户login时不能发送Presence(用户状态,这个下章讲),否则收不到离线消息。 具体可以看下面例子: ConnectionConfiguration connConfig = new ConnectionConfiguration("localhost"); connConfig.setSendPresence(false);//设置不发送Presence Connection conn2 = new XMPPConnection(connConfig); Conn2.connect(); Conn2.login("zhang", "111"); OfflineMessageManager omm = new OfflineMessageManager(conn2);//创建一个对象 Iteratorommlist = omm.getMessages();//获取消息,结果为一个Message迭代器omm.deleteMessages();//将服务器上的离线消息删除。 如果不执行最后一步操作的话,下次登录这些离线消息还在。 2.3文件传输 用户可能希望向其它用户发送文件。其它用户有接受,拒绝,或忽略用户的请求。Smack 为用户轻松发送文件提供了一个简单的接口。暂只实现文件传输,没有实现文件夹传输。 2.3.1发送文件 要发送或接受文件首先必须创建fileTransferManager类的一个对象,创建方法是 继续阅读
/
本文档为【Smack类库最好的学习资料】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索