openfire客户端调用

客户端调用

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;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值