openfire消息通知推送
package cn.zsmy.utils.openfire; import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import java.util.UUID; import org.jivesoftware.smack.AccountManager;
import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ChatManager;
import org.jivesoftware.smack.ChatManagerListener;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.MessageListener;
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.Presence; import cn.zsmy.constant.Constant;
import cn.zsmy.init.DictInit;
import cn.zsmy.utils.ImgBase64Util;
/**
*
* @author shm@2016-05-10
* @version 1.0
*/
public class OpenfireServer { private static String SERVER_NAME = "192.168.1.254";
private static final String IP = "192.168.1.254";
private static final Integer DK = 5222; private static Roster roster; /**
* 获取连接
*
* @return connection
*/
public static Connection getConnection() {
// ConnectionConfiguration config = new
// ConnectionConfiguration(Constants.IP, Constants.DK);
// ConnectionConfiguration config = new
// ConnectionConfiguration(Global.fsConfig.getOpenfireIP(),
// Integer.parseInt(Global.fsConfig.getOpenfirePort()));
ConnectionConfiguration config = new ConnectionConfiguration(DictInit.dictMap.get(Constant.Dict.OPENFIRE_IP), Integer
.parseInt(DictInit.dictMap.get(Constant.Dict.OPENFIRE_PORT)));
Connection connection = new XMPPConnection(config);
Constant.MY_LOG.debug(connection.getSASLAuthentication());
Constant.MY_LOG.debug(connection.getServiceName());
return connection;
} public static Connection login(String username, String pass) throws XMPPException {
Connection con = OpenfireServer.getConnection();
try {
con.connect();
con.loginAnonymously();//匿名登陆
//con.login(username, pass);
} catch (XMPPException e) {
Constant.MY_LOG.debug("========登录异常=========");
e.printStackTrace();
throw e;
}
return con; }
/**
* 发送通知消息
*
* @param username
* @param pass
* @param messgage
* @param groupName
* @throws XMPPException
*/
public static void SendBCMsg(String username, String pass, String messgage, String groupName) throws XMPPException {
Connection con = login(username, pass);
Message m = new Message();
m.setBody(messgage);// 设置消息。
m.setTo(groupName + "@" + SERVER_NAME);// [groupname]@[serviceName].[serverName]
con.sendPacket(m);
} /**
* 发送即时消息
*
* @param username
* @param pass
* @param messgage
* @throws XMPPException
*/
/*
* public static void SendMsg(String username, String pass, String messgage,
* String toUser) throws XMPPException { Connection con = login(username,
* pass); Chat mychat =
* con.getChatManager().createChat(toUser+"@"+Constants.SERVER_NAME, //
* 接收端的JID,JID是要加域的 new MessageListener() {
*
* @Override public void processMessage(Chat chat, Message message) { String
* messageBody = message.getBody(); Constants.MY_LOG.debug("收到信息:" +
* messageBody + " " + message.getFrom()); } });
* mychat.sendMessage(messgage); // 发送信息
*
* con.disconnect(); // 断开连接 }
*/ /**
* 发送即时消息
*
* @param username
* @param pass
* @param messgage
* @throws XMPPException
*/
public static void SendMsg(String username, String pass, String content, String toUser, String type,
String caseId, String identity, String filePath, String realPath, String senderId, String sendeeId) throws XMPPException {
Connection con = login(username, pass);
Chat mychat = con.getChatManager().createChat(toUser + "@" + DictInit.dictMap.get(Constant.Dict.OPENFIRE_HOST), // 接收端的JID,JID是要加域的
new MessageListener() {
@Override
public void processMessage(Chat chat, Message message) {
String messageBody = message.getBody();
Constant.MY_LOG.debug("收到信息:" + messageBody + " " + message.getFrom());
}
}); Message msg = new Message();
ChatInfo chatInfo = new ChatInfo();
chatInfo.setCaseId(caseId);
chatInfo.setIdentity(identity);
chatInfo.setzType(type);
chatInfo.setSenderid(senderId);
chatInfo.setSendeeid(sendeeId);
chatInfo.setZid(UUID.randomUUID().toString().replace("-", ""));
chatInfo.setTag(toUser);
if ("3".equals(type)) {
chatInfo.setMsglength("0");
// String filePath = "c://test.jpg";//待处理的图片
// msg.setProperty("imgData", ImgBase64Util.getImgStr(realPath));
msg.setBody(filePath);
} else {
chatInfo.setMsglength(content.length() + "");
msg.setBody(content);
// mychat.sendMessage(content);
}
msg.addExtension(chatInfo); // 添加扩展内容
mychat.sendMessage(msg);
con.disconnect(); // 断开连接
} /**
* 获取好友列表
*
* @param username
* @param pass
* @return
* @throws XMPPException
*/
public static List<RosterEntry> getRosterList(String username, String pass) throws XMPPException {
Connection con = login(username, pass);
Collection<RosterEntry> rosters = con.getRoster().getEntries();
for (RosterEntry rosterEntry : rosters) {
System.out.print("name: " + rosterEntry.getName() + ",jid: " + rosterEntry.getUser()); // 此处可获取用户JID
Constant.MY_LOG.debug("");
}
return null;
} /**
* 获取用户列表(含组信息)
*
* @param username
* @param pass
* @return
* @throws XMPPException
*/
public List<RosterEntry> getRoster(String username, String pass) throws XMPPException {
Connection con = login(username, pass);
roster = con.getRoster();
List<RosterEntry> EntriesList = new ArrayList<RosterEntry>();
Collection<RosterEntry> rosterEntry = roster.getEntries();
Iterator<RosterEntry> i = rosterEntry.iterator();
while (i.hasNext()) {
EntriesList.add(i.next());
}
return EntriesList;
} public static void reciveMsg(String username, String pass) throws XMPPException {
Connection con = login(username, pass);
ChatManager cm = con.getChatManager(); // 取得聊天管理器
// Chat chat = cm.createChat("hello@pc201511161109 ", null);
// //得到与另一个帐号的连接,这里是一对一,@后面是你安装openfire时注册的域 /*
* 添加监听器
*/
cm.addChatListener(new ChatManagerListener() { @Override
public void chatCreated(Chat chat, boolean create) {
chat.addMessageListener(new MessageListener() { @Override
public void processMessage(Chat chat, Message msg) {
if (msg.getBody() != null) {
Constant.MY_LOG.debug(chat.getParticipant() + ":" + msg.getBody());
try {
chat.sendMessage("你刚才说的是:" + msg.getBody()); // 发送消息
} catch (XMPPException e) {
e.printStackTrace();
}
}
}
});
}
}); // chat.sendMessage("你猜"); //发送消息 while (true); // 死循环,维持该连接不中断 // connection.disconnect(); //断开连接 } /**
* 可以在控制台輸入內容,且可以接收对方发送的消息
*
* @param username
* @param pass
* @param toUser
* @throws XMPPException
*/
public static void test(String username, String pass, String toUser) throws XMPPException {
Connection con = login(username, pass); // 登录
ChatManager chatmanager = con.getChatManager();
Chat newChat = chatmanager.createChat(toUser + "@" + SERVER_NAME, new MessageListener() {
public void processMessage(Chat chat, Message message) {
if (message.getBody() != null) {
Constant.MY_LOG.debug("Received from 【" + message.getFrom() + "】 message: " + message.getBody());
} }
});
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
while (true) {
String message = input.nextLine();
try {
newChat.sendMessage(message);
} catch (XMPPException e) {
Constant.MY_LOG.debug("======发送异常=======");
e.printStackTrace();
}
}
} /**
* 测试openfire登录与消息发送是否可用
* @param username
* @param pass
* @param toUser
* @throws XMPPException
*/
public static void testOpenfire(String username, String pass, String toUser) throws XMPPException {
Connection con = login(username, pass);
/*ChatManager chatmanager = con.getChatManager();
Chat newChat = chatmanager.createChat(toUser + "@" + DictInit.dictMap.get(Constant.Dict.OPENFIRE_HOST), new MessageListener() {
public void processMessage(Chat chat, Message message) {
if (message.getBody() != null) {
Constant.MY_LOG.debug("Received from 【" + message.getFrom() + "】 message: " + message.getBody());
}
}
});
newChat.sendMessage("test server");*/
con.disconnect(); //断开连接
} /**
* 新用户注册代码:
*
* @param username
* @param pass
* @param toUser
*/
public static void register(String username, String pass) {
try {
ConnectionConfiguration config = new ConnectionConfiguration(IP, DK);
Connection connection = new XMPPConnection(config);
connection.connect();
AccountManager amgr = connection.getAccountManager();
amgr.createAccount(username + "@" + SERVER_NAME, pass);
} catch (XMPPException e) {
Constant.MY_LOG.debug("======新用户注册异常============");
e.printStackTrace();
}
} /**
* 更改用户状态代码 上面的代码会把用户的状态改成Go fishing,但是还是显示在线的状态
*
* @param username
* @param pass
* @param toUser
*/
public static void updateStatus(String username, String pass) {
Presence presence = new Presence(Presence.Type.available); // 这里如果改成unavailable则会显示用户不在线
ConnectionConfiguration config = new ConnectionConfiguration(IP, DK);
Connection connection = new XMPPConnection(config);
try {
connection.connect();
} catch (XMPPException e) {
Constant.MY_LOG.debug("=======更改用户状态异常========");
e.printStackTrace();
}
presence.setStatus("Go fishing");
connection.sendPacket(presence);
connection.getRoster();
} public static void SendMsg(String username, String pass, String messgage, String toUser) throws XMPPException {
Connection con = login(username, pass);
Chat mychat = con.getChatManager().createChat(toUser + "@" + SERVER_NAME, // 接收端的JID,JID是要加域的
new MessageListener() {
@Override
public void processMessage(Chat chat, Message message) {
String messageBody = message.getBody();
Constant.MY_LOG.debug("收到信息:" + messageBody + " " + message.getFrom());
}
}); Message msg = new Message();
String imgFile = "c://test.jpg";// 待处理的图片
String imgbese = ImgBase64Util.getImgStr(imgFile);
Constant.MY_LOG.debug(imgbese.length());
Constant.MY_LOG.debug(imgbese);
msg.setProperty("imgData", imgbese);
msg.setBody("upload/casePic/2016/5/11/14629304841938816.jpg");
mychat.sendMessage(msg);
// mychat.sendMessage(messgage); // 发送信息 // con.disconnect(); // 断开连接
} /**
* 判断openfire用户的状态 strUrl : url格式 -
* http://my.openfire.com:9090/plugins/presence
* /status?jid=user1@my.openfire.com&type=xml 返回值 : 0 - 用户不存在; 1 - 用户在线; 2 -
* 用户离线 说明 :必须要求 openfire加载 presence 插件,同时设置任何人都可以访问
*/
public static short IsUserOnLine(String strUrl) {
strUrl = "http://192.168.1.254:9090/plugins/presence/status?jid=15102123715@192.168.1.254";
short shOnLineState = 0; // -不存在-
try {
URL oUrl = new URL(strUrl);
URLConnection oConn = oUrl.openConnection();
if (oConn != null) {
BufferedReader oIn = new BufferedReader(new InputStreamReader(oConn.getInputStream()));
if (null != oIn) {
String strFlag = oIn.readLine();
oIn.close(); if (strFlag.indexOf("type=\"unavailable\"") >= 0) {
shOnLineState = 2;
}
if (strFlag.indexOf("type=\"error\"") >= 0) {
shOnLineState = 0;
} else if (strFlag.indexOf("priority") >= 0 || strFlag.indexOf("id=\"") >= 0) {
shOnLineState = 1;
}
}
}
} catch (Exception e) { }
return shOnLineState;
} /**
* 发送给指定用户的广播消息
*
* @param fromUsername
* @param fromUserPass
* @param toUserName
* @param subject
* @param body
* @throws XMPPException
*/
public static void broadcastMsgToUser(String fromUsername, String fromUserPass, String toUserName, String subject, String body) throws XMPPException {
Connection con = login(fromUsername, fromUserPass);
Message message = new Message();
message.setFrom(fromUsername);
message.setTo(toUserName+ "@" + DictInit.dictMap.get(Constant.Dict.OPENFIRE_HOST));
message.setBody(body);
message.setSubject(subject);
message.setType(Message.Type.headline); //Message.Type.headline为通知, 不传默认为广播
con.sendPacket(message);
} /**
* 发送给全体用户的广播
*
* @param username
* @param pass
* @param subject
* @param content
* @throws XMPPException
*/
public static void broadcastMsgToAll(String username, String pass, String subject, String content) throws XMPPException {
Connection con = login(username, pass);
Message m = new Message();
m.setBody(content);// 设置消息。
m.setTo("all@broadcast." + SERVER_NAME);// all@broadcast.yyp-pc
// 说明一下只需要改后面的yyp-pc改成
// 相应的域名。
// 我这里是自己机器的名字。
con.sendPacket(m);
} public static void main(String[] args) throws XMPPException {
SendMsg("13818440540", "13818440540", "900009", "15102123715", "1", "11111111", "doctor", null, null,"","");
//broadcastMsgToUser("admin","admin", "13817764475", "123重要通知", "pppppppppp"+new Date());
//broadcastMsgToAll("15102123715", "15102123715", "重要通知", " 全员广播消息测试!");
// SendMsg("13818440540","13818440540","dcdvvkdvmdklmdd","15102123715");
// getRosterList("hello1","123456");
// reciveMsg("hello1","123456"); // test("13818440540","123456","15102123715");
// register("qwertyuiop", "123456");
// updateStatus("hello1","123456");
Constant.MY_LOG.debug(IsUserOnLine(""));;
} }
openfire消息通知推送的更多相关文章
- Swift - 本地消息的推送通知(附样例)
使用UILocalNotification可以很方便的实现消息的推送功能.我们可以设置这个消息的推送时间,推送内容等. 当推送时间一到,不管用户在桌面还是其他应用中,屏幕上方会都显示出推送消息. 1, ...
- NET SignaiR 实现消息的推送,并使用Push.js实现通知
一.使用背景 1. SignalR是什么? ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指 ...
- #研发中间件介绍#异步消息可靠推送Notify
郑昀 基于朱传志的设计文档 最后更新于2014/11/11 关键词:异步消息.订阅者集群.可伸缩.Push模式.Pull模式 本文档适用人员:研发 电商系统为什么需要 NotifyServer? ...
- 在Unity3D中实现安卓平台的本地通知推送
[前言] 对于手游来说,什么时候需要推送呢?玩过一些带体力限制的游戏就会发现,我的体力在恢复满后,手机会收到一个通知告诉我体力已完全恢复了.这类通知通常是由本地的客户端发起的,没有经过服务端. 在安卓 ...
- xamarin.ios 本地通知推送
由于ios10版本以后UILocalNotification被标为弃用了,所以要添加新的本地通知推送功能,下面提供一些代码参考. 一.先在AppDelegate.cs上注册本地通知推送功能. publ ...
- RabbitMQ 延迟队列,消息延迟推送
目录 应用场景 消息延迟推送的实现 测试结果 应用场景 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货.在我们签收商品后,物流系统会在七天后延时发送一个消息给 ...
- ZPush--基于netty4实现的苹果通知推送服务(APNs)Javaclient
简单说下实现苹果通知推送服务(APNs)client的一些要注意的地方: 使用长连接: sanboxserver是无用的,调试时直接用"gateway.push.apple.com" ...
- spring boot 集成 websocket 实现消息主动推送
spring boot 集成 websocket 实现消息主动 前言 http协议是无状态协议,每次请求都不知道前面发生了什么,而且只可以由浏览器端请求服务器端,而不能由服务器去主动通知浏览器端,是单 ...
- RabbitMq(7)消息延时推送
应用场景 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货.在我们签收商品后,物流系统会在七天后延时发送一个消息给支付系统,通知支付系统将款打给商家,这个过程持 ...
随机推荐
- 【转】成功在AMD主机上用虚拟机安装原版雪豹
转载地址:http://www.jzh.me/archives/205.html/comment-page-1 一直都很想安装苹果的系统,当雪豹出来的时候就更加想了,但是自己的机器是AMD的,而且还是 ...
- [团队项目2.0]软件改进分析MathAPP
软件改进分析 在此基础上,进行软件的改进. 首先,我们把这个软件理解成一个投入市场的.帮助小朋友进行算术运算练习的APP. 从质量保证的角度,有哪些需要改进的BUG? 从用户的角度(把自己当成小学生或 ...
- 树形结构的数据库表Schema设计
今天又有幸遇到一个不知道的东西,那就是树型结构在数据库表中设计的问题.由于只是阅读了人家的东西,就直接给连接吧. 第一个:http://blog.csdn.net/monkey_d_meng/arti ...
- Animator组件关闭再打开后参数丢失问题
问题如下,因为再激活Animator时,它会重置一次,参数也会丢失 这个问题一直存在,论坛给出的解释是把参数缓存下来,在激活时重置 http://answers.unity3d.com/questio ...
- jquery简单插件到复杂插件(1)--tabs
写在前面,到了新公司开始转做前段,之前一直写php,一共写了半年,转过来,jq都用不好,但是还是得不断的学习,谁没菜过.从最简单的开始写,最近也在学习些html5的小游戏,加油吧.js原生写的可以说惨 ...
- zookeeper系列之二—zookeeper历史
Zookeeper是什么? Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby的一个开源版本.它是为分布式应用提供一致性服务的软件,提供的功能包括:配置服 ...
- QT笔记之模态对话框及非模态对话框
模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其 ...
- SAP ST03N工作负载的后台作业定义
ST03N可以把SAP的运行情况的统计数据展现出来,根据这些数据可以进行性能的分析. 1.登录到000集团,定义作业SAP_COLLECTOR_FOR_PERFMONITOR,周期每个小时执行.作业内 ...
- application/x-www-form-urlencoded
在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型. 下边是说明: application/x-www-form-urlen ...
- Android 获取存储空间
package com.example.getMem; import java.io.File; import android.os.Build;import android.os.Bundle;im ...