IM学习--smackDemo

53 篇文章 0 订阅
49 篇文章 0 订阅

使用之前先下载Smack,然后把Smack开发的jar引入到项目中。

package com.bis.smack.client;

import java.util.Collection;

import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smackx.ChatState;
import org.jivesoftware.smackx.muc.InvitationListener;
import org.jivesoftware.smackx.muc.MultiUserChat;
import org.jivesoftware.smackx.packet.ChatStateExtension;
import org.junit.Test;

public class SmackDemos {
	private static XMPPConnection connection = new XMPPConnection("wang-think");
	private static String USRE_NAME = "majian";
	private static String PASSWORD = "majian";
	
	static{
		try {
			connection.connect();
			connection.login(USRE_NAME,PASSWORD);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 *创建连接接收消息 
	 */
	@Test
	public void testRecieveMessage()throws Exception{
		//创建一个聊天对话,接收m用户的消息 ,并发送消息给m用户
		//其中m@wang-think,m是指m用户名,wang-think是指m所登陆的机器---jid
		Chat chat = connection.getChatManager().createChat("m@wang-think",
				new MessageListener() {

					@Override
					public void processMessage(Chat arg0, Message message) {
						System.out.println("Received message: "+ message.getBody());
					}
				});

		Message msg = new Message();
		chat.sendMessage("Howdy!");
		while(true);//死循环,保持连接不被中断
	}
	
	/**
	 *连接管理 
	 */
	@Test
	public void testConnectionManager()throws Exception{
		ConnectionConfiguration config = new ConnectionConfiguration("wang-think");
		config.setCompressionEnabled(true);
		config.setSASLAuthenticationEnabled(true);

		connection = new XMPPConnection(config);
		connection.connect();
		connection.login("majian", "majian", "SomeResource");
		// Disconnect from the server
		//connection.disconnect();
		while(true);
	}
	
	/**
	 * 获取好友列表
	 */
	@Test
	public void testLoadRoster()throws Exception{
		Roster roster = connection.getRoster();
		Collection<RosterEntry> entries = roster.getEntries();
		for (RosterEntry entry : entries) {
		    System.out.println(entry);
		}
	}
	
	/**
	 *发送消息  
	 */
	@Test
	public void testSendMessage()throws Exception{
		// XMPPConnection.DEBUG_ENABLED = true;
		// 创建一个和m的对话,并设置信息监听
		Chat mychat = connection.getChatManager().createChat("m@wang-think",
				new MessageListener() {
					@Override
					public void processMessage(Chat arg0, Message message) {
						String messageBody = message.getBody();
						System.out.println("收到信息:" + messageBody);
					}

				});
		// 发送给m文本信息
		mychat.sendMessage("hello");
		// 退出登陆
		while(true);
	}
	
	/**
	 *设置自己的登陆状态 
	 */
	@Test
	public void testSeetOwnState()throws Exception{
		// XMPPConnection.DEBUG_ENABLED = true ;
		// 设置服务器地址
		// 设置登陆后的个人状态信息
		Presence p = new Presence(Presence.Type.available);
		p.setStatus("无聊中。。。");
		connection.sendPacket(p);
		while (true);
		// 退出登陆
		// conn.disconnect();
	}
	
	/**
	 * 聊天窗口输入状态,使用XEP-0085  协议   
	 */
	@Test
	public void testTalkState()throws Exception{
		Message mess = new  Message();   
		mess.addExtension(new  ChatStateExtension(ChatState.composing)); 
		mess.setBody("这是测试数据");
		Chat mychat = connection.getChatManager().createChat("m@wang-think",
				new MessageListener() {
					@Override
					public void processMessage(Chat arg0, Message message) {
						String messageBody = message.getBody();
						System.out.println("收到信息:" + messageBody);
					}

				});
		// 发送给m文本信息
		mychat.sendMessage(mess);   
		// 退出登陆
		while(true);
	}

	/**
	 *聊天窗口输入状态,接收端处理逻辑 
	 */
	@Test
	public void testTalkStateRecieveClient()throws Exception{
		// 创建一个和test1的对话,并设置信息监听
		Chat mychat = connection.getChatManager().createChat("m@wang-think",
				new MessageListener() {

					@Override
					public void processMessage(Chat arg0, Message message) {
						PacketExtension pe;   
						String messageBody = message.getBody();   
					    pe = message.getExtension("composing" , "http://jabber.org/protocol/chatstates" );   
					    if (pe !=  null ){   
					        System.out.println("对方正在输入......" );   
					    }   
					       
					    pe = message.getExtension("active" , "http://jabber.org/protocol/chatstates" );   
					    if (pe !=  null ){   
					        System.out.println("接收到信息:" +messageBody);   
					    }   
					   
					    pe = message.getExtension("paused" , "http://jabber.org/protocol/chatstates" );   
					    if (pe !=  null ){   
					        System.out.println("对方已暂停输入" );   
					    }   
					   
					    pe = message.getExtension("inactive" , "http://jabber.org/protocol/chatstates" );   
					    if (pe !=  null ){   
					        System.out.println("对方聊天窗口失去焦点" );   
					    }   
					   
					    pe = message.getExtension("gone" , "http://jabber.org/protocol/chatstates" );   
					    if (pe !=  null ){   
					        System.out.println("对方聊天窗口被关闭" );   
					    }   
					}

				});
		// 发送给test1文本信息
		mychat.sendMessage("hello");
	}

	/**
	 *接收邀请,加入多人聊天房间    
	 */
	@Test
	public void testYaoQingSevralUserTalk()throws Exception{
		MultiUserChat.addInvitationListener(connection, new  InvitationListener() {   
			@Override
			public void invitationReceived(Connection conn, String room,
					String inviter, String reason, String password, Message message) {
				MultiUserChat multiUserChat = new  MultiUserChat(conn, room);   
		        System.out.println("收到来自 " +inviter+ " 的聊天室邀请。邀请附带内容:" +reason);   
		        try  {   
		            multiUserChat.join("test2" , password);   
		        } catch  (XMPPException e) {   
		            System.out.println("加入聊天室失败" );   
		            e.printStackTrace();   
		        }   
		        System.out.println("成功加入聊天室" );   
		        multiUserChat.addMessageListener(new  PacketListener() {   
		            @Override    
		            public   void  processPacket(Packet packet) {   
		                Message message = (Message)packet;   
		                //接收来自聊天室的聊天信息    
		                System.out.println(message.getFrom()+":" +message.getBody());   
		            }   
		        });   
		        //发送信息到聊天室    
				try {
					multiUserChat.sendMessage("新手到来,大家关照!");
				} catch (XMPPException e) {
					e.printStackTrace();
				}  
			}   
		});   
		while(true);
	}
	
	/**
	 * 登陆GTalk用户,并查询该用户的所有好友列表
	 */
	@Test
	public void testLogOnGtalk()throws Exception{
		XMPPConnection conn = new  XMPPConnection( new  ConnectionConfiguration( "talk.google.com" ,  5222 ,  "gmail.com" ));   
		conn.connect();   
		//输入gtalk的账号密码    
		conn.login("88888888" ,  "8888888888" );    
		Collection<RosterEntry> rosters = conn.getRoster().getEntries();   
		//获取gtalk上的好友列表    
		System.out.println("我的好友列表:=======================" );     
		for (RosterEntry rosterEntry : rosters){   
		    System.out.print("name: " +rosterEntry.getName()+ ",jid: " +rosterEntry.getUser());   
		    System.out.println("" );   
		}   
		System.out.println("我的好友列表:=======================" );   
		   
		conn.disconnect();   
	}
}


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值