Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.anyline.easemob.util.EasemobUtil Maven / Gradle / Ivy
/*
* Copyright 2006-2023 www.anyline.org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.anyline.easemob.util;
import org.anyline.entity.DataRow;
import org.anyline.entity.DataSet;
import org.anyline.net.HttpBuilder;
import org.anyline.net.HttpUtil;
import org.anyline.util.AnylineConfig;
import org.anyline.util.BasicUtil;
import org.anyline.util.BeanUtil;
import org.anyline.util.ConfigTable;
import org.apache.http.HttpEntity;
import org.apache.http.entity.StringEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
public class EasemobUtil {
private static final Logger log = LoggerFactory.getLogger(EasemobUtil.class);
private static Hashtable instances = new Hashtable();
private EasemobConfig config = null;
private static long access_token_expires = 0;
// private static final String orgName = EasemobConfig.ORG_NAME;
// private static final String appName = EasemobConfig.APP_NAME;
// private static final String clientId= EasemobConfig.CLIENT_ID;
// private static final String clientSecret = EasemobConfig.CLIENT_SECRET;
// private static final String host = EasemobConfig.HOST;
//
private String baseUrl ="";
private String access_token = null;
static {
Hashtable configs = EasemobConfig.getInstances();
for(String key:configs.keySet()){
instances.put(key, getInstance(key));
}
}
public static Hashtable getInstances(){
return instances;
}
public static EasemobUtil getInstance(){
return getInstance(EasemobConfig.DEFAULT_INSTANCE_KEY);
}
public static EasemobUtil getInstance(String key){
if(BasicUtil.isEmpty(key)){
key = EasemobConfig.DEFAULT_INSTANCE_KEY;
}
EasemobUtil util = instances.get(key);
if(null == util){
EasemobConfig config = EasemobConfig.getInstance(key);
if(null != config) {
util = new EasemobUtil();
util.config = config;
util.baseUrl = config.HOST + "/" + config.ORG_NAME + "/" + config.APP_NAME;
instances.put(key, util);
}
}
return util;
}
public EasemobConfig getConfig() {
return config;
}
/**
* 注册用户
* @param user user
* @param password password
* @param nickname 昵称
* @return DataRow
*/
public DataRow reg(String user, String password, String nickname){
DataRow result = null;
String url = baseUrl + "/users";
Map map = new HashMap();
map.put("username", user);
map.put("password", password);
map.put("nickname", nickname);
Map headers = defaultHeader();
headers.put("Content-Type", "application/json");
try {
HttpEntity entity = new StringEntity(BeanUtil.map2json(map), "UTF-8");
String txt = HttpUtil.post(defaultHeader(), url, "UTF-8", entity).getText();
DataRow row = DataRow.parseJson(txt);
if(null != row && row.containsKey("entities")){
DataSet set = row.getSet("entities");
if(set.size() > 0){
result = set.getRow(0);
}
}
if(ConfigTable.IS_DEBUG && log.isInfoEnabled()){
log.info("[reg user][result:{}]",txt);
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public DataRow reg(String user, String password){
return reg(user,password, user);
}
/**
* 批量注册
* @param list list
* @return DataSet
*/
public DataSet regs(List> list){
DataSet result = new DataSet();
StringBuilder json = new StringBuilder();
json.append("[");
if(null != list){
int size = list.size();
for(int i=0; i map = list.get(i);
if(i > 0){
json.append(",");
}
String nickname = map.get("nickname");
json.append("\"username\":\"").append(map.get("username"))
.append("\",\"password\":\"").append(map.get("password")).append("\"");
if(BasicUtil.isNotEmpty(nickname)){
json.append("\"nickname\":\"").append(nickname).append("\"");
}
json.append("}");
}
}
json.append("]");
String url = baseUrl + "/users";
Map headers = defaultHeader();
headers.put("Content-Type", "application/json");
try{
String txt = HttpUtil.post(headers, url,"UTF-8", new StringEntity(json.toString(), "UTF-8")).getText();
DataRow row = DataRow.parseJson(txt);
if(null != row && row.containsKey("entities")){
result = row.getSet("entities");
}
if(ConfigTable.IS_DEBUG && log.isInfoEnabled()){
log.info("[reg users][result:{}]",txt);
}
}catch(Exception e){
e.printStackTrace();
}
return result;
}
/**
* 修改密码
* @param user user
* @param password password
* @return boolean
*/
public boolean resetPassword(String user, String password){
boolean result = false;
String url = baseUrl + "/users/"+user+"/password";
Map map = new HashMap();
map.put("newpassword", password);
String json = BeanUtil.map2json(map);
try {
Map headers = new HashMap();
headers.put("Authorization", "Bearer " + getAccessToken());
String txt = HttpUtil.put(headers, url,"UTF-8", new StringEntity(json, "UTF-8")).getText();
if(ConfigTable.IS_DEBUG && log.isInfoEnabled()){
log.info("[reset password][json:{}][result:{}]",json,txt);
}
} catch (Exception e) {
e.printStackTrace();
}
result = true;
return result;
}
/**
* 修改昵称
* @param user user
* @param nickname nickname
* @return DataRow
*/
public DataRow resetNickname(String user, String nickname){
DataRow result = null;
String url = baseUrl + "/users/"+user;
Map map = new HashMap();
map.put("nickname", nickname);
try {
String txt = HttpUtil.put(defaultHeader(), url,"UTF-8", new StringEntity(BeanUtil.map2json(map), "UTF-8")).getText();
result = parseUser(txt);
if(ConfigTable.IS_DEBUG && log.isInfoEnabled()){
log.info("[reset nickname][result:{}]",txt);
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 删除用户
* @param user user
* @return boolean
*/
public boolean delete(String user){
boolean result = false;
String url = baseUrl + "/users/" + user;
try {
String txt = HttpUtil.delete(defaultHeader(),url, "UTF-8").getText();
if(ConfigTable.IS_DEBUG && log.isWarnEnabled()){
log.warn("[delete user][result:{}]",txt);
}
} catch (Exception e) {
e.printStackTrace();
}
result = true;
return result;
}
/**
* 用户信息
* @param user user
* @return DataRow
*/
public DataRow getUser(String user){
DataRow result = new DataRow();
String url = baseUrl + "/users/" + user;
try{
String txt = HttpBuilder.init()
.setHeaders(defaultHeader())
.setUrl(url)
.build().get().getText();
if(ConfigTable.IS_DEBUG && log.isWarnEnabled()){
log.warn("[get user][result:{}]",txt);
}
DataRow row = DataRow.parseJson(txt);
if(null != row && row.containsKey("entities")){
DataSet set = row.getSet("entities");
if(set.size() > 0){
result = set.getRow(0);
}
}
}catch(Exception e){
e.printStackTrace();
}
return result;
}
/**
* 批量用户信息
* @param limit limit
* @param cursor 分页游标
* @return DataSet
*/
public DataSet getUsers(int limit, String cursor){
DataSet set = new DataSet();
String url = baseUrl + "/users/";
Map params = new HashMap();
params.put("limit", limit+"");
if(BasicUtil.isNotEmpty(cursor)){
params.put("cursor", cursor);
}
try{
String txt = HttpBuilder.init()
.setHeaders(defaultHeader())
.setUrl(url)
.build().get().getText();
if(ConfigTable.IS_DEBUG && log.isWarnEnabled()){
log.warn("[get user list][result:{}]",txt);
}
DataRow row = DataRow.parseJson(txt);
if(null != row && row.containsKey("entities")){
set = row.getSet("entities");
}
}catch(Exception e){
e.printStackTrace();
}
return set;
}
public DataSet getUsers(int limit){
return getUsers(limit, null);
}
/**
* 添加好友
* @param user user
* @param friend friend
* @return DataRow
*/
public DataRow addFriend(String user, String friend){
DataRow result = null;
String url = baseUrl + "/users/" + user + "/contacts/users/" + friend;
try {
String txt = HttpUtil.post(defaultHeader(), url).getText();
if(ConfigTable.IS_DEBUG && log.isWarnEnabled()){
log.warn("[add friend][result:{}]",txt);
}
result = parseUser(txt);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 好友列表(只查username)
* @param user user
* @return DataSet
*/
public DataSet getFriends(String user){
DataSet result = new DataSet();
String url = baseUrl + "/users/" + user + "/contacts/users";
try {
String txt = HttpBuilder.init()
.setHeaders(defaultHeader())
.setUrl(url)
.build().get().getText();
if(ConfigTable.IS_DEBUG && log.isWarnEnabled()){
log.warn("[get friend list][result:{}]",txt);
}
DataRow json = DataRow.parseJson(txt);
if(null != json && json.has("data")){
List datas = json.getList("data");
for(Object data:datas){
DataRow row = new DataRow();
row.put("username", data);
if(ConfigTable.IS_DEBUG && log.isWarnEnabled()){
log.warn("[get friend][friend username:{}]",data);
}
result.add(row);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 删除好友
* @param user user
* @param friend friend
* @return 返回被删除的好友数据
*/
public DataRow deleteFriend(String user, String friend){
DataRow result = null;
String url = baseUrl + "/users/" + user + "/contacts/users/" + friend;
try {
String txt = HttpUtil.delete(defaultHeader(), url,"UTF-8").getText();
result = parseUser(txt);
if(ConfigTable.IS_DEBUG && log.isWarnEnabled()){
log.warn("[delete friend][result:{}]",txt);
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 添加黑名单
* @param user user
* @param block block
* @return DataRow
*/
public DataRow addBlock(String user, String block){
DataRow result = null;
// 删除好友
deleteFriend(user, block);
String url = baseUrl + "/users/" + user + "/blocks/users";
try {
String params = "{\"usernames\":[\""+block+"\"]} ";
String txt = HttpUtil.post(defaultHeader(), url,"UTF-8", new StringEntity(params, "UTF-8")).getText();
if(ConfigTable.IS_DEBUG && log.isWarnEnabled()){
log.warn("[add blocks][result:{}]",txt);
}
// 封装添加成功的用户username
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* @param block block
* @return DataSet
*/
public DataSet getBlocks(String block){
DataSet result = new DataSet();
String url = baseUrl + "/users/" + block + "/blocks/users";
try {
String txt = HttpBuilder.init()
.setHeaders(defaultHeader())
.setUrl(url)
.build().get().getText();
if(ConfigTable.IS_DEBUG && log.isWarnEnabled()){
log.warn("[get block list][result:{}]",txt);
}
DataRow json = DataRow.parseJson(txt);
if(null != json && json.has("data")){
List datas = json.getList("data");
for(Object data:datas){
DataRow row = new DataRow();
row.put("username", data);
if(ConfigTable.IS_DEBUG && log.isWarnEnabled()){
log.warn("[get block][block username:{}]",data);
}
result.add(row);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 删除黑名单
* @param user user
* @param block block
* @return 返回被删除的黑名单数据
*/
public DataRow deleteBlock(String user, String block){
DataRow result = null;
String url = baseUrl + "/users/" + user + "/blocks/users/" + block;
try {
String txt = HttpUtil.delete(defaultHeader(), url,"UTF-8").getText();
result = parseUser(txt);
if(ConfigTable.IS_DEBUG && log.isWarnEnabled()){
log.warn("[delete block][result:{}]",txt);
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 在线状态 1:在线 0:离线
* @param user user
* @return String
*/
public String status(String user){
String result = "0";
String url = baseUrl + "/users/" + user + "/status";
try {
String txt = HttpBuilder.init()
.setHeaders(defaultHeader())
.setUrl(url)
.build().get().getText();
if(ConfigTable.IS_DEBUG && log.isWarnEnabled()){
log.warn("[get user status][result:{}]",txt);
}
DataRow row = DataRow.parseJson(txt);
if(null != row && row.has("data")){
row = row.getRow("data");
String status = row.getString(user);
log.warn("[get user status][status:{}]",status);
if("online".equals(status)){
result = "1";
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 离线消息数量
* @param user user
* @return int
*/
public int offlineMsgCount(String user){
int result = 0;
String url = baseUrl + "/users/" + user + "/offline_msg_count";
try {
String txt = HttpBuilder.init()
.setHeaders(defaultHeader())
.setUrl(url)
.build().get().getText();
if(ConfigTable.IS_DEBUG && log.isWarnEnabled()){
log.warn("[get user status][result:{}]",txt);
}
DataRow row = DataRow.parseJson(txt);
if(null != row && row.has("data")){
row = row.getRow("data");
result = row.getInt(user);
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 离线消息状态
* deliverd:表示此用户的该条离线消息已经收到过了 undelivered:表示此用户的该条离线消息还未收到
* @param user user
* @param msg msg
* @return String
*/
public String offlineMsgStatus(String user, String msg){
String result = "";
String url = baseUrl + "/users/" + user + "/offline_msg_status/" + msg;
try {
String txt = HttpBuilder.init()
.setHeaders(defaultHeader())
.setUrl(url)
.build().get().getText();
if(ConfigTable.IS_DEBUG && log.isWarnEnabled()){
log.warn("[get user status][result:{}]",txt);
}
DataRow row = DataRow.parseJson(txt);
if(null != row && row.has("data")){
row = row.getRow("data");
result = row.getString(msg);
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 禁用帐号
* @param user user
* @return DataRow
*/
public DataRow deactivate(String user){
DataRow result = null;
String url = baseUrl + "/users/" + user + "/deactivate";
try {
String txt = HttpUtil.post(defaultHeader(), url).getText();
if(ConfigTable.IS_DEBUG && log.isWarnEnabled()){
log.warn("[deactivate user][result:{}]",txt);
}
result = parseUser(txt);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 激活已禁用帐号
* @param user user
*/
public void activate(String user){
String url = baseUrl + "/users/" + user + "/activate";
try {
String txt = HttpUtil.post(defaultHeader(), url).getText();
if(ConfigTable.IS_DEBUG && log.isWarnEnabled()){
log.warn("[activate user][result:{}]",txt);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 强制用户下线
* @param user user
* @return boolean
*/
public boolean disconnect(String user){
boolean result = false;
String url = baseUrl + "/users/" + user + "/disconnect";
try {
String txt = HttpUtil.post(defaultHeader(), url).getText();
if(ConfigTable.IS_DEBUG && log.isWarnEnabled()){
log.warn("[disconnect user][result:{}]",txt);
}
DataRow row = DataRow.parseJson(txt);
if(null != row && row.has("data")){
row = row.getRow("data");
if(null != row && row.has("result") && row.getBoolean("result", false)){
result = true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 消息发送
* @param from from
* @param msg msg
* @param to to
* @return boolean
*/
public boolean send(String from, String msg, String to){
boolean result = false;
String json = "{\"target_type\":\"users\","
+ "\"target\":[\"" + to + "\"],"
+ "\"msg\":{\"type\":\"txt\",\"msg\":\"" + msg + "\"},"
+ "\"from\":\""+from+"\"}";
String url = baseUrl + "/messages";
try {
String txt = HttpUtil.post(defaultHeader(), url,"UTF-8", new StringEntity(json, "UTF-8")).getText();
if(ConfigTable.IS_DEBUG && log.isWarnEnabled()){
log.warn("[send message][result:" + txt + "]");
}
DataRow row = DataRow.parseJson(txt);
if(null != row && row.has("data")){
row = row.getRow("data");
if(null != row && row.has(to) && "success".equals(row.getString(to))){
result = true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 创建群
* @param name 名称
* @param des 描述
* @param pub 是否公开
* @param max 最大人数
* @param approve 是否需要审核
* @param owner 群主
* @return String
*/
public String createGroup(String name, String des, boolean pub, int max, boolean approve, String owner){
String result = "";
String url = baseUrl + "/chatgroups";
try {
Map params = new HashMap();
params.put("groupname", name);
params.put("desc", des);
params.put("public", ""+pub);
params.put("maxusers", ""+max);
params.put("approval", ""+approve);
params.put("owner", owner);
String txt = HttpUtil.post(defaultHeader(), url, "UTF-8", params).getText();
if(ConfigTable.IS_DEBUG && log.isWarnEnabled()){
log.warn("[create group][result:{}]",txt);
}
DataRow row = DataRow.parseJson(txt);
if(null != row && row.has("data")){
row = row.getRow("data");
if(null != row && row.has("groupid")){
result = row.getString("groupid");
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 根据返回值解析用户数据
* @param txt txt
* @return DataRow
*/
@SuppressWarnings("unchecked")
private static DataRow parseUser(String txt){
DataRow user = null;
DataRow row = DataRow.parseJson(txt);
if(null != row && row.containsKey("entities")){
Object entitys = row.get("entities");
if(null != entitys && entitys instanceof List){
List list = (List)entitys;
if(list.size()>0){
user = list.get(0);
}
}
}
return user;
}
private Map defaultHeader(){
Map headers = new HashMap();
headers.put("Authorization", "Bearer " + getAccessToken());
headers.put("Content-Type", "application/json");
return headers;
}
private String getAccessToken(){
String token = null;
if(System.currentTimeMillis()/1000 > access_token_expires){
token = createNewAccessToken();
}else{
token = access_token;
}
return token;
}
/**
* 创建新token
* @return String
*/
private String createNewAccessToken(){
Map headers = new HashMap();
headers.put("Content-Type", "application/json");
Map map = new HashMap();
map.put("grant_type", "client_credentials");
map.put("client_id", config.CLIENT_ID);
map.put("client_secret", config.CLIENT_SECRET);
try {
String url = baseUrl + "/token";
String txt = HttpUtil.post(headers, url, "UTF-8", new StringEntity(BeanUtil.map2json(map), "UTF-8")).getText();
DataRow row = DataRow.parseJson(txt);
if(row.containsKey("access_token")){
access_token = row.getString("access_token");
}
if(row.containsKey("expires_in")){
access_token_expires = System.currentTimeMillis()/1000 + row.getLong("expires_in");
}
} catch (Exception e) {
e.printStackTrace();
}
return access_token;
}
}