客户端调用
1、java 客户端
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-websocket org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.igniterealtime.smack smack-core 4.3.0 org.igniterealtime.smack smack-bosh 4.3.0 org.igniterealtime.smack smack-compression-jzlib 4.3.0 org.igniterealtime.smack smack-experimental 4.3.0 org.igniterealtime.smack smack-omemo 4.4.0-alpha1 org.igniterealtime.smack smack-repl 4.4.0-alpha1 org.igniterealtime.smack smack-omemo-signal 4.4.0-alpha1 org.igniterealtime.smack smack-java7 4.3.0 org.igniterealtime.smack smack-tcp 4.3.0 org.igniterealtime.smack smack-im 4.3.0 org.igniterealtime.smack smack-extensions 4.3.0 org.igniterealtime.smack smack-sasl-provided 4.3.0 org.igniterealtime.smack smack-android 4.3.0 org.jxmpp jxmpp-core 0.6.3 org.jxmpp jxmpp-util-cache 0.6.3 jivesoftware smack 3.1.0 org.apache.httpcomponents httpcore 4.4.10 org.apache.httpcomponents httpclient 4.5.2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 “` package com.hualala.demo.smackdemo.controller;import org.jivesoftware.smack.*;
import org.jivesoftware.smack.chat2.Chat;
import org.jivesoftware.smack.chat2.ChatManager;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.roster.Roster;
import org.jivesoftware.smack.roster.RosterEntry;
import org.jivesoftware.smack.roster.RosterGroup;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
import org.jivesoftware.smackx.filetransfer.FileTransferManager;
import org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer;
import org.jivesoftware.smackx.iqregister.AccountManager;
import org.jivesoftware.smackx.muc.HostedRoom;
import org.jivesoftware.smackx.muc.MultiUserChat;
import org.jivesoftware.smackx.muc.MultiUserChatManager;
import org.jivesoftware.smackx.offline.OfflineMessageManager;
import org.jivesoftware.smackx.search.ReportedData;
import org.jivesoftware.smackx.search.UserSearchManager;
import org.jivesoftware.smackx.vcardtemp.VCardManager;
import org.jivesoftware.smackx.vcardtemp.packet.VCard;
import org.jivesoftware.smackx.xdata.Form;
import org.jivesoftware.smackx.xdata.FormField;
import org.jxmpp.jid.EntityFullJid;
import org.jxmpp.jid.impl.JidCreate;
import org.jxmpp.jid.parts.Localpart;
import org.jxmpp.jid.parts.Resourcepart;
import org.jxmpp.stringprep.XmppStringprepException;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
- @ProjectName: smackdemotest
- @Package: com.hualala.demo.smackdemo.controller
- @ClassName: Client
- @Description: TODO
- @Author: wys
- @Date: 2018/8/9 16:21
- @Version: v1.0
*/
public class XmppConnection {
private int SERVER_PORT = 5222;
private String SERVER_HOST = “192.168.159.128”;
private String SERVER_NAME =”test.hualala.com”;
private AbstractXMPPConnection connection = null;
private static XmppConnection xmppConnection = new XmppConnection();
// private XMPPConnectionListener connectionListener;
/**
- 单例模式
- @return XmppConnection
*/
public synchronized static XmppConnection getInstance() {
return xmppConnection;
}
/**
- 创建连接
*/
public AbstractXMPPConnection getConnection() {
if (connection == null) {
// 开线程打开连接,避免在主线程里面执行HTTP请求
// Caused by: android.os.NetworkOnMainThreadException
// new Thread(new Runnable() {
// @Override
// public void run() {
// openConnection();
// }
// }).start();
synchronized (this){
if (connection==null){
openConnection();
}
}
}
return connection;
}
/**
- 判断是否已连接
*/
public boolean checkConnection() {
return null != connection && connection.isConnected();
}
/**
- 打开连接
*/
public boolean openConnection() {
try {
if (null == connection || !connection.isAuthenticated()) {
SmackConfiguration.DEBUG = true;
XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration.builder();
//设置openfire主机IP
config.setHostAddress(InetAddress.getByName(SERVER_HOST));
//设置openfire服务器名称
config.setXmppDomain(SERVER_NAME);
//设置端口号:默认5222
config.setPort(SERVER_PORT);
//禁用SSL连接
config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled).setCompressionEnabled(false);
//设置离线状态
config.setSendPresence(false);
//设置开启压缩,可以节省流量
config.setCompressionEnabled(true);
//需要经过同意才可以添加好友
Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.manual);
// 将相应机制隐掉
//SASLAuthentication.blacklistSASLMechanism(“SCRAM-SHA-1”);
//SASLAuthentication.blacklistSASLMechanism(“DIGEST-MD5”);
connection = new XMPPTCPConnection(config.build());
connection.connect();// 连接到服务器
return true;
}
} catch (Exception xe) {
xe.printStackTrace();
connection = null;
}
return false;
}
/**
- 关闭连接
*/
public void closeConnection() {
if (connection != null) {
// 移除连接监听
//connection.removeConnectionListener(connectionListener);
if (connection.isConnected()){
}
connection.disconnect();
connection = null;
}
}
/**
- 判断连接是否通过了身份验证
- 即是否已登录
- @return
*/
public boolean isAuthenticated() {
return connection != null && connection.isConnected() && connection.isAuthenticated();
}
/**
- 登录
- @param account 登录帐号
- @param password 登录密码
- @return true登录成功
*/
public boolean login(String account, String password) {
try {
if (getConnection() == null){
return false;
}
getConnection().login(account, password);
// 更改在线状态
setPresence(0);
// 添加连接监听
//connectionListener = new ConnectionListener(account, password);
//getConnection().addConnectionListener(connectionListener);
return true;
} catch (Exception xe) {
xe.printStackTrace();
}
return false;
}
/**
- 注册
- @param account 注册帐号
- @param password 注册密码
- @return 1、注册成功 0、注册失败
*/
public String register(String account, String password) {
if (getConnection() == null){
return “0”;
}
try {
AccountManager.getInstance(connection).createAccount(Localpart.from(account), password);
} catch (Exception e) {
e.printStackTrace();
return “0”;
}
return “1”;
}
/**
- 更改用户状态
*/
public void setPresence(int code) {
XMPPConnection con = getConnection();
if (con == null){
return;
}
Presence presence;
try {
switch (code) {
case 0:
presence = new Presence(Presence.Type.available);
con.sendStanza(presence);
System.out.println(“设置在线”);
break;
case 1:
presence = new Presence(Presence.Type.available);
presence.setMode(Presence.Mode.chat);
con.sendStanza(presence);
System.out.println(“设置Q我吧”);
break;
case 2:
presence = new Presence(Presence.Type.available);
presence.setMode(Presence.Mode.dnd);
con.sendStanza(presence);
System.out.println(“设置忙碌”);
break;
case 3:
presence = new Presence(Presence.Type.available);
presence.setMode(Presence.Mode.away);
con.sendStanza(presence);
System.out.println(“设置离开”);
break;
case 4:
case 5:
presence = new Presence(Presence.Type.unavailable);
con.sendStanza(presence);
System.out.println(“设置离线”);
break;
default:
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
- 获取所有组
- @return 所有组集合
*/
public List getGroups() {
if (getConnection() == null){
return null;
}
List groupList = new ArrayList();
Collection rosterGroup = Roster.getInstanceFor(connection).getGroups();
for (RosterGroup aRosterGroup : rosterGroup) {
groupList.add(aRosterGroup);
}
return groupList;
}
/**
- 获取某个组里面的所有好友
- @param groupName 组名
- @return List
*/
public List getEntriesByGroup(String groupName) {
if (getConnection() == null)
return null;
List EntriesList = new ArrayList();
RosterGroup rosterGroup = Roster.getInstanceFor(connection).getGroup(groupName);
Collection rosterEntry = rosterGroup.getEntries();
for (RosterEntry aRosterEntry : rosterEntry) {
EntriesList.add(aRosterEntry);
}
return EntriesList;
}
/**
- 获取所有好友信息
- @return List
*/
public List getAllEntries() {
if (getConnection() == null)
return null;
List Enlist = new ArrayList();
Collection rosterEntry = Roster.getInstanceFor(connection).getEntries();
for (RosterEntry aRosterEntry : rosterEntry) {
Enlist.add(aRosterEntry);
}
return Enlist;
}
/**
- 获取用户VCard信息
- @param user user
- @return VCard
*/
public VCard getUserVCard(String user) {
if (getConnection() == null)
return null;
VCard vcard = new VCard();
try {
vcard = VCardManager.getInstanceFor(getConnection()).loadVCard(JidCreate.entityBareFrom(user));
} catch (Exception e) {
e.printStackTrace();
}
return vcard;
}
/**
- 添加一个分组
- @param groupName groupName
- @return boolean
*/
public boolean addGroup(String groupName) {
if (getConnection() == null)
return false;
try {
Roster.getInstanceFor(connection).createGroup(groupName);
System.out.println(“創建成功”);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
- 删除分组
- @param groupName groupName
- @return boolean
*/
public boolean removeGroup(String groupName) {
return true;
}
/**
- 添加好友 无分组
- @param userName userName
- @param name name
- @return boolean
*/
public boolean addUser(String userName, String name) {
if (getConnection() == null)
return false;
try {
Roster.getInstanceFor(connection).createEntry(JidCreate.entityBareFrom(userName), name, null);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
- 添加好友 有分组
- @param userName userName
- @param name name
- @param groupName groupName
- @return boolean
*/
public boolean addUser(String userName, String name, String groupName) {
if (getConnection() == null)
return false;
try {
Presence subscription = new Presence(Presence.Type.subscribed);
subscription.setTo(JidCreate.entityBareFrom(userName));
userName += “@” + getConnection().getXMPPServiceDomain();
getConnection().sendStanza(subscription);
Roster.getInstanceFor(connection).createEntry(JidCreate.entityBareFrom(userName), name,
new String[]{groupName});
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
- 删除好友
- @param userName userName
- @return boolean
*/
public boolean removeUser(String userName) {
if (getConnection() == null)
return false;
try {
RosterEntry entry = null;
if (userName.contains(“@”)){
entry = Roster.getInstanceFor(connection).getEntry(JidCreate.entityBareFrom(userName));
}else{
entry = Roster.getInstanceFor(connection).getEntry(JidCreate.entityBareFrom(
userName + “@” + getConnection().getXMPPServiceDomain().getDomain()));
}
if (entry == null) {
entry = Roster.getInstanceFor(connection).getEntry(JidCreate.entityBareFrom(userName));
}
Roster.getInstanceFor(connection).removeEntry(entry);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}