Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
509048da04 | ||
|
|
15f7777d78 | ||
|
|
45b1b9cf96 | ||
|
|
57314e673a | ||
|
|
0a7b8f9587 | ||
|
|
c8ff39c2ab | ||
|
|
252204a760 | ||
|
|
26fbde676e | ||
|
|
81585ec146 |
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
<relativePath>../</relativePath>
|
<relativePath>../</relativePath>
|
||||||
<artifactId>wildfirechat-parent</artifactId>
|
<artifactId>wildfirechat-parent</artifactId>
|
||||||
<groupId>cn.wildfirechat</groupId>
|
<groupId>cn.wildfirechat</groupId>
|
||||||
<version>1.1.4</version>
|
<version>1.1.6</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>moquette-broker</artifactId>
|
<artifactId>moquette-broker</artifactId>
|
||||||
|
|||||||
+59
@@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Wildfire Chat package.
|
||||||
|
* (c) Heavyrain2012 <[email protected]>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.xiaoleilu.loServer.action.admin;
|
||||||
|
|
||||||
|
import cn.wildfirechat.common.APIPath;
|
||||||
|
import cn.wildfirechat.common.ErrorCode;
|
||||||
|
import cn.wildfirechat.pojos.InputGetUserInfo;
|
||||||
|
import cn.wildfirechat.pojos.InputGetUserList;
|
||||||
|
import cn.wildfirechat.pojos.InputOutputUserInfo;
|
||||||
|
import cn.wildfirechat.pojos.OutputGetUserList;
|
||||||
|
import cn.wildfirechat.proto.WFCMessage;
|
||||||
|
import com.xiaoleilu.loServer.RestResult;
|
||||||
|
import com.xiaoleilu.loServer.annotation.HttpMethod;
|
||||||
|
import com.xiaoleilu.loServer.annotation.Route;
|
||||||
|
import com.xiaoleilu.loServer.handler.Request;
|
||||||
|
import com.xiaoleilu.loServer.handler.Response;
|
||||||
|
import io.netty.handler.codec.http.FullHttpRequest;
|
||||||
|
import io.netty.util.internal.StringUtil;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Route(APIPath.User_Get_All)
|
||||||
|
@HttpMethod("POST")
|
||||||
|
public class GetAllUserAction extends AdminAction {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isTransactionAction() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean action(Request request, Response response) {
|
||||||
|
if (request.getNettyRequest() instanceof FullHttpRequest) {
|
||||||
|
InputGetUserList input = getRequestBody(request.getNettyRequest(), InputGetUserList.class);
|
||||||
|
if (input != null && input.count > 0 && input.offset >= 0) {
|
||||||
|
List<WFCMessage.User> users = messagesStore.getUserInfoList(input.count, input.offset);
|
||||||
|
OutputGetUserList outputGetUserList = new OutputGetUserList();
|
||||||
|
outputGetUserList.userInfoList = new ArrayList<>();
|
||||||
|
for (WFCMessage.User user : users) {
|
||||||
|
outputGetUserList.userInfoList.add(InputOutputUserInfo.fromPbUser(user));
|
||||||
|
}
|
||||||
|
|
||||||
|
RestResult result = RestResult.ok(outputGetUserList);
|
||||||
|
setResponseContent(result, response);
|
||||||
|
} else {
|
||||||
|
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package io.moquette.imhandler;
|
||||||
|
|
||||||
|
import cn.wildfirechat.common.ErrorCode;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
import cn.wildfirechat.proto.WFCMessage;
|
||||||
|
import io.moquette.spi.impl.Qos1PublishHandler;
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import win.liyufan.im.IMTopic;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Handler(IMTopic.ListenedChannelListTopic)
|
||||||
|
public class ChannelListenedListHandler extends IMHandler<Void> {
|
||||||
|
@Override
|
||||||
|
public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, Void request, Qos1PublishHandler.IMCallback callback) {
|
||||||
|
List<String> channelInfoList = m_messagesStore.getListenedChannels(fromUser);
|
||||||
|
WFCMessage.IDListBuf.Builder builder = WFCMessage.IDListBuf.newBuilder();
|
||||||
|
builder.addAllId(channelInfoList);
|
||||||
|
byte[] data = builder.build().toByteArray();
|
||||||
|
ackPayload.ensureWritable(data.length).writeBytes(data);
|
||||||
|
return ErrorCode.ERROR_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -39,6 +39,7 @@ import static cn.wildfirechat.common.IMExceptionEvent.EventType.RDBS_Exception;
|
|||||||
import static cn.wildfirechat.proto.ProtoConstants.PersistFlag.Transparent;
|
import static cn.wildfirechat.proto.ProtoConstants.PersistFlag.Transparent;
|
||||||
import static io.moquette.server.Constants.MAX_MESSAGE_QUEUE;
|
import static io.moquette.server.Constants.MAX_MESSAGE_QUEUE;
|
||||||
import static cn.wildfirechat.proto.ProtoConstants.SearchUserType.*;
|
import static cn.wildfirechat.proto.ProtoConstants.SearchUserType.*;
|
||||||
|
import static win.liyufan.im.UserSettingScope.kUserSettingPrivacySearchable;
|
||||||
|
|
||||||
public class DatabaseStore {
|
public class DatabaseStore {
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(DatabaseStore.class);
|
private static final Logger LOG = LoggerFactory.getLogger(DatabaseStore.class);
|
||||||
@@ -161,18 +162,15 @@ public class DatabaseStore {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
//searchType
|
|
||||||
// 0 模糊匹配displayName, 精确匹配账户名和电话号码
|
List<WFCMessage.User> searchUserByNameMobile(String keyword, int searchType, int page) {
|
||||||
// 1 精确匹配账户名和电话号码
|
ArrayList<WFCMessage.User> out = new ArrayList<>();
|
||||||
// 2 精确匹配账户名
|
if(page > 0) {
|
||||||
// 3 精确匹配电话号码
|
return out;
|
||||||
List<WFCMessage.User> searchUserFromDB(String keyword, int searchType, int page) {
|
}
|
||||||
Connection connection = null;
|
Connection connection = null;
|
||||||
PreparedStatement statement = null;
|
PreparedStatement statement = null;
|
||||||
ResultSet rs = null;
|
ResultSet rs = null;
|
||||||
|
|
||||||
ArrayList<WFCMessage.User> out = new ArrayList<>();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
connection = DBUtil.getConnection();
|
connection = DBUtil.getConnection();
|
||||||
String sql = "select `_uid`, `_name`" +
|
String sql = "select `_uid`, `_name`" +
|
||||||
@@ -185,61 +183,34 @@ public class DatabaseStore {
|
|||||||
", `_company`" +
|
", `_company`" +
|
||||||
", `_social`" +
|
", `_social`" +
|
||||||
", `_extra`" +
|
", `_extra`" +
|
||||||
", `_dt` from t_user";
|
", `_dt`, `_type` from t_user";
|
||||||
switch (searchType) {
|
|
||||||
case SearchUserType_Name_Mobile:
|
|
||||||
sql += " where (`_name` = ? or `_mobile` = ?) ";
|
|
||||||
break;
|
|
||||||
case SearchUserType_Name:
|
|
||||||
sql += " where `_name` = ? ";
|
|
||||||
break;
|
|
||||||
case SearchUserType_Mobile:
|
|
||||||
sql += " where `_mobile` = ? ";
|
|
||||||
break;
|
|
||||||
case SearchUserType_General:
|
|
||||||
default:
|
|
||||||
sql += " where (`_display_name` like ? or `_name` = ? or `_mobile` = ?) ";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if(searchType == SearchUserType_Name) {
|
||||||
|
sql += " where `_name` = ? ";
|
||||||
|
} else if(searchType == SearchUserType_Mobile) {
|
||||||
|
sql += " where `_mobile` = ? ";
|
||||||
|
} else {
|
||||||
|
sql += " where (`_name` = ? or `_mobile` = ?) ";
|
||||||
|
}
|
||||||
|
|
||||||
sql += " and `_type` <> 2 and `_deleted` = 0"; //can search normal user(0) and robot(1) and admin(100), can not search things
|
sql += " and `_type` <> 2 and `_deleted` = 0"; //can search normal user(0) and robot(1) and admin(100), can not search things
|
||||||
|
|
||||||
if (searchType == SearchUserType_Name_Mobile || searchType == SearchUserType_Name || searchType == SearchUserType_Mobile) {
|
if(searchType == SearchUserType_Name || searchType == SearchUserType_Mobile) {
|
||||||
sql += " limit 1";
|
sql += " limit 1";
|
||||||
} else {
|
} else {
|
||||||
sql += " limit 20";
|
sql += " limit 2";
|
||||||
}
|
|
||||||
|
|
||||||
if (page > 0) {
|
|
||||||
sql += " offset " + page * 20;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
statement = connection.prepareStatement(sql);
|
statement = connection.prepareStatement(sql);
|
||||||
int index = 1;
|
statement.setString(1, keyword);
|
||||||
|
if(searchType != SearchUserType_Name && searchType != SearchUserType_Mobile) {
|
||||||
switch (searchType) {
|
statement.setString(2, keyword);
|
||||||
case SearchUserType_Name_Mobile:
|
|
||||||
statement.setString(index++, keyword);
|
|
||||||
statement.setString(index++, keyword);
|
|
||||||
break;
|
|
||||||
case SearchUserType_Name:
|
|
||||||
case SearchUserType_Mobile:
|
|
||||||
statement.setString(index++, keyword);
|
|
||||||
break;
|
|
||||||
case SearchUserType_General:
|
|
||||||
default:
|
|
||||||
statement.setString(index++, "%" + keyword + "%");
|
|
||||||
statement.setString(index++, keyword);
|
|
||||||
statement.setString(index++, keyword);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
rs = statement.executeQuery();
|
rs = statement.executeQuery();
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
WFCMessage.User.Builder builder = WFCMessage.User.newBuilder();
|
WFCMessage.User.Builder builder = WFCMessage.User.newBuilder();
|
||||||
index = 1;
|
int index = 1;
|
||||||
|
|
||||||
String value = rs.getString(index++);
|
String value = rs.getString(index++);
|
||||||
value = (value == null ? "" : value);
|
value = (value == null ? "" : value);
|
||||||
@@ -287,6 +258,9 @@ public class DatabaseStore {
|
|||||||
long longValue = rs.getLong(index++);
|
long longValue = rs.getLong(index++);
|
||||||
builder.setUpdateDt(longValue);
|
builder.setUpdateDt(longValue);
|
||||||
|
|
||||||
|
int type = rs.getInt(index++);
|
||||||
|
builder.setType( type);
|
||||||
|
|
||||||
WFCMessage.User user = builder.build();
|
WFCMessage.User user = builder.build();
|
||||||
|
|
||||||
out.add(user);
|
out.add(user);
|
||||||
@@ -298,6 +272,142 @@ public class DatabaseStore {
|
|||||||
} finally {
|
} finally {
|
||||||
DBUtil.closeDB(connection, statement, rs);
|
DBUtil.closeDB(connection, statement, rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<WFCMessage.User> filter = new ArrayList<>();
|
||||||
|
for (WFCMessage.User user : out) {
|
||||||
|
WFCMessage.UserSettingEntry userSettingEntry = Server.getServer().getStore().messagesStore().getUserSetting(user.getUid(), kUserSettingPrivacySearchable, null);
|
||||||
|
if(userSettingEntry != null) {
|
||||||
|
int value = 0;
|
||||||
|
try {
|
||||||
|
value = StringUtil.isNullOrEmpty(userSettingEntry.getValue())?0:Integer.parseInt(userSettingEntry.getValue());
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
if((value & ProtoConstants.DisableSearchMask.DisableSearchNameMask) > 0) {
|
||||||
|
if (searchType == SearchUserType_Name) {
|
||||||
|
filter.add(user);
|
||||||
|
continue;
|
||||||
|
} else if(searchType != SearchUserType_Mobile) {
|
||||||
|
if(keyword.equals(user.getName())) {
|
||||||
|
if(!keyword.equals(user.getMobile())) {
|
||||||
|
filter.add(user);
|
||||||
|
continue;
|
||||||
|
} else if((value & ProtoConstants.DisableSearchMask.DisableSearchMobileMask) > 0) {
|
||||||
|
filter.add(user);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((value & ProtoConstants.DisableSearchMask.DisableSearchMobileMask) > 0) {
|
||||||
|
if (searchType == SearchUserType_Mobile) {
|
||||||
|
filter.add(user);
|
||||||
|
} else if(searchType != SearchUserType_Name) {
|
||||||
|
if(keyword.equals(user.getMobile()) && !keyword.equals(user.getName())) {
|
||||||
|
filter.add(user);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out.removeAll(filter);
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
List<WFCMessage.User> searchUserByDisplayName(String keyword, int page) {
|
||||||
|
Connection connection = null;
|
||||||
|
PreparedStatement statement = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
|
||||||
|
ArrayList<WFCMessage.User> out = new ArrayList<>();
|
||||||
|
|
||||||
|
try {
|
||||||
|
connection = DBUtil.getConnection();
|
||||||
|
String sql = "select u._uid, u._name, u._display_name, u._portrait, u._mobile, u._gender, u._email, u._address, u._company, u._social, u._extra, u._dt, u._type " +
|
||||||
|
" from t_user u left join (select _uid, _value from t_user_setting where _scope = 27) s on u._uid = s._uid " +
|
||||||
|
" where u._display_name like ? and u._type <> 2 and u._deleted = 0 and (s._value is null or (s._value <> 1 and s._value <> 3 and s._value <> 5 and s._value <> 7)) limit 20";
|
||||||
|
|
||||||
|
if (page > 0) {
|
||||||
|
sql += " offset " + page * 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
statement = connection.prepareStatement(sql);
|
||||||
|
statement.setString(1, "%" + keyword + "%");
|
||||||
|
rs = statement.executeQuery();
|
||||||
|
while (rs.next()) {
|
||||||
|
WFCMessage.User.Builder builder = WFCMessage.User.newBuilder();
|
||||||
|
int index = 1;
|
||||||
|
|
||||||
|
String value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setUid(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setName(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setDisplayName(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setPortrait(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setMobile(value);
|
||||||
|
|
||||||
|
int gender = rs.getInt(index++);
|
||||||
|
builder.setGender(gender);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setEmail(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setAddress(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setCompany(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setSocial(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setExtra(value);
|
||||||
|
|
||||||
|
long longValue = rs.getLong(index++);
|
||||||
|
builder.setUpdateDt(longValue);
|
||||||
|
|
||||||
|
int type = rs.getInt(index++);
|
||||||
|
builder.setType(type);
|
||||||
|
|
||||||
|
WFCMessage.User user = builder.build();
|
||||||
|
|
||||||
|
out.add(user);
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
Utility.printExecption(LOG, e, RDBS_Exception);
|
||||||
|
} finally {
|
||||||
|
DBUtil.closeDB(connection, statement, rs);
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<WFCMessage.User> searchUserFromDB(String keyword, int searchType, int page) {
|
||||||
|
List<WFCMessage.User> out = searchUserByNameMobile(keyword, searchType, page);
|
||||||
|
if(searchType == SearchUserType_General) {
|
||||||
|
List<WFCMessage.User> general = searchUserByDisplayName(keyword, page);
|
||||||
|
out.addAll(general);
|
||||||
|
}
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2640,6 +2750,103 @@ public class DatabaseStore {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<WFCMessage.User> getAllUsers(int count, int offset) {
|
||||||
|
Connection connection = null;
|
||||||
|
PreparedStatement statement = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
List<WFCMessage.User> outList = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
connection = DBUtil.getConnection();
|
||||||
|
String sql = "select `_uid`, `_name`" +
|
||||||
|
", `_display_name`" +
|
||||||
|
", `_portrait`" +
|
||||||
|
", `_mobile`" +
|
||||||
|
", `_gender`" +
|
||||||
|
", `_email`" +
|
||||||
|
", `_address`" +
|
||||||
|
", `_company`" +
|
||||||
|
", `_social`" +
|
||||||
|
", `_extra`" +
|
||||||
|
", `_type`" +
|
||||||
|
", `_deleted`" +
|
||||||
|
", `_dt` from t_user where `_deleted` = 0 order by _createTime limit ? offset ?";
|
||||||
|
statement = connection.prepareStatement(sql);
|
||||||
|
|
||||||
|
int index = 1;
|
||||||
|
statement.setInt(1, count);
|
||||||
|
statement.setInt(2, offset);
|
||||||
|
|
||||||
|
|
||||||
|
rs = statement.executeQuery();
|
||||||
|
while (rs.next()) {
|
||||||
|
WFCMessage.User.Builder builder = WFCMessage.User.newBuilder();
|
||||||
|
index = 1;
|
||||||
|
String value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setUid(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setName(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setDisplayName(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setPortrait(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setMobile(value);
|
||||||
|
|
||||||
|
int gender = rs.getInt(index++);
|
||||||
|
builder.setGender(gender);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setEmail(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setAddress(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setCompany(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setSocial(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setExtra(value);
|
||||||
|
|
||||||
|
int type = rs.getInt(index++);
|
||||||
|
builder.setType(type);
|
||||||
|
|
||||||
|
int deleted = rs.getInt(index++);
|
||||||
|
builder.setDeleted(deleted);
|
||||||
|
|
||||||
|
long longValue = rs.getLong(index++);
|
||||||
|
if(longValue <= 0)
|
||||||
|
longValue = 1;
|
||||||
|
builder.setUpdateDt(longValue);
|
||||||
|
|
||||||
|
outList.add(builder.build());
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
Utility.printExecption(LOG, e, RDBS_Exception);
|
||||||
|
} finally {
|
||||||
|
DBUtil.closeDB(connection, statement, rs);
|
||||||
|
}
|
||||||
|
return outList;
|
||||||
|
}
|
||||||
|
|
||||||
Set<String> getAllEnds() {
|
Set<String> getAllEnds() {
|
||||||
Connection connection = null;
|
Connection connection = null;
|
||||||
PreparedStatement statement = null;
|
PreparedStatement statement = null;
|
||||||
|
|||||||
@@ -2764,6 +2764,12 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
String userId = databaseStore.getUserIdByMobile(mobile);
|
String userId = databaseStore.getUserIdByMobile(mobile);
|
||||||
return getUserInfo(userId);
|
return getUserInfo(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<WFCMessage.User> getUserInfoList(int count, int offset) {
|
||||||
|
return databaseStore.getAllUsers(count, offset);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<WFCMessage.User> searchUser(String keyword, int searchType, int page) {
|
public List<WFCMessage.User> searchUser(String keyword, int searchType, int page) {
|
||||||
if (mDisableSearch) {
|
if (mDisableSearch) {
|
||||||
@@ -3101,27 +3107,16 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MultiMap<String, FriendData> friendsMap = hzInstance.getMultiMap(USER_FRIENDS);
|
FriendData friendData1 = getFriendData(userId, request.getTargetUid());
|
||||||
|
|
||||||
FriendData friendData1 = null;
|
|
||||||
Collection<FriendData> friendDatas = friendsMap.get(userId);
|
|
||||||
if (friendDatas == null || friendDatas.size() == 0) {
|
|
||||||
friendDatas = loadFriend(friendsMap, userId);
|
|
||||||
}
|
|
||||||
for (FriendData fd : friendDatas) {
|
|
||||||
if (fd.getFriendUid().equals(request.getTargetUid())) {
|
|
||||||
friendData1 = fd;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (friendData1 != null && friendData1.getBlacked() > 0 && !isAdmin) {
|
|
||||||
return ErrorCode.ERROR_CODE_IN_BLACK_LIST;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (friendData1 != null && friendData1.getState() == 0) {
|
if (friendData1 != null && friendData1.getState() == 0) {
|
||||||
return ErrorCode.ERROR_CODE_ALREADY_FRIENDS;
|
return ErrorCode.ERROR_CODE_ALREADY_FRIENDS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FriendData friendData2 = getFriendData(request.getTargetUid(), userId);
|
||||||
|
if (friendData2 != null && friendData2.getBlacked() > 0 && !isAdmin) {
|
||||||
|
return ErrorCode.ERROR_CODE_IN_BLACK_LIST;
|
||||||
|
}
|
||||||
|
|
||||||
WFCMessage.FriendRequest newRequest = WFCMessage.FriendRequest
|
WFCMessage.FriendRequest newRequest = WFCMessage.FriendRequest
|
||||||
.newBuilder()
|
.newBuilder()
|
||||||
.setFromUid(userId)
|
.setFromUid(userId)
|
||||||
@@ -4144,6 +4139,11 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
return databaseStore.searchChannelFromDB(keyword, buzzy, page);
|
return databaseStore.searchChannelFromDB(keyword, buzzy, page);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getListenedChannels(String userId) {
|
||||||
|
return databaseStore.getUserChannels(userId);
|
||||||
|
}
|
||||||
@Override
|
@Override
|
||||||
public ErrorCode listenChannel(String operator, String channelId, boolean listen) {
|
public ErrorCode listenChannel(String operator, String channelId, boolean listen) {
|
||||||
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
|
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
|
||||||
|
|||||||
@@ -158,6 +158,8 @@ public interface IMessagesStore {
|
|||||||
WFCMessage.User getUserInfoByMobile(String mobile);
|
WFCMessage.User getUserInfoByMobile(String mobile);
|
||||||
List<WFCMessage.User> searchUser(String keyword, int searchType, int page);
|
List<WFCMessage.User> searchUser(String keyword, int searchType, int page);
|
||||||
|
|
||||||
|
List<WFCMessage.User> getUserInfoList(int count, int offset);
|
||||||
|
|
||||||
boolean updateSystemSetting(int id, String value, String desc);
|
boolean updateSystemSetting(int id, String value, String desc);
|
||||||
SystemSettingPojo getSystemSetting(int id);
|
SystemSettingPojo getSystemSetting(int id);
|
||||||
void createChatroom(String chatroomId, WFCMessage.ChatroomInfo chatroomInfo);
|
void createChatroom(String chatroomId, WFCMessage.ChatroomInfo chatroomInfo);
|
||||||
@@ -216,6 +218,7 @@ public interface IMessagesStore {
|
|||||||
ErrorCode transferChannel(String operator, String channelId, String newOwner);
|
ErrorCode transferChannel(String operator, String channelId, String newOwner);
|
||||||
ErrorCode destroyChannel(String operator, String channelId, boolean isAdmin);
|
ErrorCode destroyChannel(String operator, String channelId, boolean isAdmin);
|
||||||
List<WFCMessage.ChannelInfo> searchChannel(String keyword, boolean buzzy, int page);
|
List<WFCMessage.ChannelInfo> searchChannel(String keyword, boolean buzzy, int page);
|
||||||
|
List<String> getListenedChannels(String userId);
|
||||||
ErrorCode listenChannel(String operator, String channelId, boolean listen);
|
ErrorCode listenChannel(String operator, String channelId, boolean listen);
|
||||||
WFCMessage.ChannelInfo getChannelInfo(String channelId);
|
WFCMessage.ChannelInfo getChannelInfo(String channelId);
|
||||||
boolean canSendMessageInChannel(String user, String channelId);
|
boolean canSendMessageInChannel(String user, String channelId);
|
||||||
|
|||||||
@@ -243,20 +243,15 @@ public class Qos1PublishHandler extends QosPublishHandler {
|
|||||||
String imtopic = topic.getTopic();
|
String imtopic = topic.getTopic();
|
||||||
ByteBuf payload = msg.payload();
|
ByteBuf payload = msg.payload();
|
||||||
byte[] payloadContent = readBytesAndRewind(payload);
|
byte[] payloadContent = readBytesAndRewind(payload);
|
||||||
if(payloadContent.length == 0) {
|
if(payloadContent.length > 0) {
|
||||||
ByteBuf ackPayload = Unpooled.buffer();
|
MemorySessionStore.Session session = m_sessionStore.getSession(clientID);
|
||||||
ackPayload.ensureWritable(1).writeByte(ERROR_CODE_INVALID_DATA.getCode());
|
payloadContent = AES.AESDecrypt(payloadContent, session.getSecret(), true);
|
||||||
sendPubAck(clientID, messageID, ackPayload, ERROR_CODE_INVALID_DATA);
|
if(payloadContent == null) {
|
||||||
return;
|
ByteBuf ackPayload = Unpooled.buffer();
|
||||||
}
|
ackPayload.ensureWritable(1).writeByte(ERROR_CODE_INVALID_DATA.getCode());
|
||||||
|
sendPubAck(clientID, messageID, ackPayload, ERROR_CODE_INVALID_DATA);
|
||||||
MemorySessionStore.Session session = m_sessionStore.getSession(clientID);
|
return;
|
||||||
payloadContent = AES.AESDecrypt(payloadContent, session.getSecret(), true);
|
}
|
||||||
if(payloadContent == null) {
|
|
||||||
ByteBuf ackPayload = Unpooled.buffer();
|
|
||||||
ackPayload.ensureWritable(1).writeByte(ERROR_CODE_INVALID_DATA.getCode());
|
|
||||||
sendPubAck(clientID, messageID, ackPayload, ERROR_CODE_INVALID_DATA);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
imHandler(clientID, username, imtopic, payloadContent, (errorCode, ackPayload) -> sendPubAck(clientID, messageID, ackPayload, errorCode), ProtoConstants.RequestSourceType.Request_From_User);
|
imHandler(clientID, username, imtopic, payloadContent, (errorCode, ackPayload) -> sendPubAck(clientID, messageID, ackPayload, errorCode), ProtoConstants.RequestSourceType.Request_From_User);
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ public interface IMTopic {
|
|||||||
String ChannelSearchTopic = "CHS";
|
String ChannelSearchTopic = "CHS";
|
||||||
String ChannelListenTopic = "CHL";
|
String ChannelListenTopic = "CHL";
|
||||||
String ChannelPullTopic = "CHP";
|
String ChannelPullTopic = "CHP";
|
||||||
|
String ListenedChannelListTopic = "CHLL";
|
||||||
|
|
||||||
String GetTokenTopic = "GETTOKEN";
|
String GetTokenTopic = "GETTOKEN";
|
||||||
String DestroyUserTopic = "DESTROYUSER";
|
String DestroyUserTopic = "DESTROYUSER";
|
||||||
|
|||||||
@@ -14,5 +14,10 @@ public interface UserSettingScope {
|
|||||||
int kUserSettingConversationDraft = 19;
|
int kUserSettingConversationDraft = 19;
|
||||||
int kUserSettingDisableSyncDraft = 20;
|
int kUserSettingDisableSyncDraft = 20;
|
||||||
int kUserSettingVoipSilent = 21;
|
int kUserSettingVoipSilent = 21;
|
||||||
|
int kUserSettingPttReserved = 22;
|
||||||
|
int kUserSettingCustomState = 23;
|
||||||
|
int kUserSettingDisableSecretChat = 24;
|
||||||
|
int kUserSettingPttSilent = 25;
|
||||||
|
int kUserSettingGroupRemark = 26;
|
||||||
|
int kUserSettingPrivacySearchable = 27;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>wildfirechat-parent</artifactId>
|
<artifactId>wildfirechat-parent</artifactId>
|
||||||
<groupId>cn.wildfirechat</groupId>
|
<groupId>cn.wildfirechat</groupId>
|
||||||
<version>1.1.4</version>
|
<version>1.1.6</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ public interface APIPath {
|
|||||||
String User_Get_Token = "/admin/user/get_token";
|
String User_Get_Token = "/admin/user/get_token";
|
||||||
String User_Update_Block_Status = "/admin/user/update_block_status";
|
String User_Update_Block_Status = "/admin/user/update_block_status";
|
||||||
String User_Get_Info = "/admin/user/get_info";
|
String User_Get_Info = "/admin/user/get_info";
|
||||||
|
String User_Get_All = "/admin/user/all";
|
||||||
String User_Get_Robot_Info = "/admin/user/get_robot_info";
|
String User_Get_Robot_Info = "/admin/user/get_robot_info";
|
||||||
String User_Get_Blocked_List = "/admin/user/get_blocked_list";
|
String User_Get_Blocked_List = "/admin/user/get_blocked_list";
|
||||||
String User_Check_Block_Status = "/admin/user/check_block_status";
|
String User_Check_Block_Status = "/admin/user/check_block_status";
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package cn.wildfirechat.pojos;
|
||||||
|
|
||||||
|
public class InputGetUserList {
|
||||||
|
public int count;
|
||||||
|
public int offset;
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package cn.wildfirechat.pojos;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class OutputGetUserList {
|
||||||
|
public List<InputOutputUserInfo> userInfoList;
|
||||||
|
}
|
||||||
@@ -218,6 +218,12 @@ public class ProtoConstants {
|
|||||||
int SearchUserType_Mobile = 3;
|
int SearchUserType_Mobile = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface DisableSearchMask {
|
||||||
|
int DisableSearchDisplayNameMask = 1;
|
||||||
|
int DisableSearchNameMask = 2;
|
||||||
|
int DisableSearchMobileMask = 4;
|
||||||
|
}
|
||||||
|
|
||||||
public interface UserStatus {
|
public interface UserStatus {
|
||||||
int Normal = 0;
|
int Normal = 0;
|
||||||
int Muted = 1;
|
int Muted = 1;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<!--<relativePath>../pom.xml</relativePath>-->
|
<!--<relativePath>../pom.xml</relativePath>-->
|
||||||
<artifactId>wildfirechat-parent</artifactId>
|
<artifactId>wildfirechat-parent</artifactId>
|
||||||
<groupId>cn.wildfirechat</groupId>
|
<groupId>cn.wildfirechat</groupId>
|
||||||
<version>1.1.4</version>
|
<version>1.1.6</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>distribution</artifactId>
|
<artifactId>distribution</artifactId>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ fi
|
|||||||
|
|
||||||
kill -15 $pid
|
kill -15 $pid
|
||||||
|
|
||||||
for i in {1..15}
|
for i in {1..30}
|
||||||
do
|
do
|
||||||
pid=`ps -ef | grep wildfirechat.server.Server | grep -v grep | awk '{print $2}'`
|
pid=`ps -ef | grep wildfirechat.server.Server | grep -v grep | awk '{print $2}'`
|
||||||
if [ -z $pid ]; then
|
if [ -z $pid ]; then
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ ADD distribution-*-bundle-tar.tar.gz /opt/im-server/
|
|||||||
RUN sed -i 's/#JAVA_OPTS="$JAVA_OPTS -Xmx128M"/JAVA_OPTS="$JAVA_OPTS -Xmx$JVM_XMX"/g' /opt/im-server/bin/wildfirechat.sh
|
RUN sed -i 's/#JAVA_OPTS="$JAVA_OPTS -Xmx128M"/JAVA_OPTS="$JAVA_OPTS -Xmx$JVM_XMX"/g' /opt/im-server/bin/wildfirechat.sh
|
||||||
RUN sed -i 's/#JAVA_OPTS="$JAVA_OPTS -Xms128M"/JAVA_OPTS="$JAVA_OPTS -Xms$JVM_XMS"/g' /opt/im-server/bin/wildfirechat.sh
|
RUN sed -i 's/#JAVA_OPTS="$JAVA_OPTS -Xms128M"/JAVA_OPTS="$JAVA_OPTS -Xms$JVM_XMS"/g' /opt/im-server/bin/wildfirechat.sh
|
||||||
|
|
||||||
|
RUN chmod a+x /opt/im-server/bin/wildfirechat.sh
|
||||||
|
|
||||||
WORKDIR /opt/im-server
|
WORKDIR /opt/im-server
|
||||||
|
|
||||||
VOLUME /opt/im-server/config
|
VOLUME /opt/im-server/config
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<artifactId>wildfirechat-parent</artifactId>
|
<artifactId>wildfirechat-parent</artifactId>
|
||||||
|
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<version>1.1.4</version>
|
<version>1.1.6</version>
|
||||||
<name>Wildfire Chat</name>
|
<name>Wildfire Chat</name>
|
||||||
<description>Wildfire Chat Server</description>
|
<description>Wildfire Chat Server</description>
|
||||||
<inceptionYear>2019</inceptionYear>
|
<inceptionYear>2019</inceptionYear>
|
||||||
|
|||||||
@@ -12,6 +12,17 @@
|
|||||||
|
|
||||||
# 更新记录
|
# 更新记录
|
||||||
|
|
||||||
|
--------------
|
||||||
|
Release note 1.1.6:
|
||||||
|
1. 支持用户设置查找自己的方法。
|
||||||
|
2. 解决获取用户信息返回type无效的问题。
|
||||||
|
3. 添加用户获取频道的功能。
|
||||||
|
|
||||||
|
--------------
|
||||||
|
Release note 1.1.5:
|
||||||
|
1. 添加获取所有用户的Server API。
|
||||||
|
2. 解决添加好友时没有处理黑名单的问题。
|
||||||
|
|
||||||
--------------
|
--------------
|
||||||
Release note 1.1.4:
|
Release note 1.1.4:
|
||||||
1. 添加PC客户端多端登录互踢时没有更新pc在线状态问题。
|
1. 添加PC客户端多端登录互踢时没有更新pc在线状态问题。
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>wildfirechat-parent</artifactId>
|
<artifactId>wildfirechat-parent</artifactId>
|
||||||
<groupId>cn.wildfirechat</groupId>
|
<groupId>cn.wildfirechat</groupId>
|
||||||
<version>1.1.4</version>
|
<version>1.1.6</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -27,7 +27,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-codec</groupId>
|
<groupId>commons-codec</groupId>
|
||||||
<artifactId>commons-codec</artifactId>
|
<artifactId>commons-codec</artifactId>
|
||||||
<version>1.11</version>
|
<version>1.15</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
@@ -300,6 +300,20 @@ public class Main {
|
|||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int limit = 5;
|
||||||
|
for (int i = 0; i < 100; i++) {
|
||||||
|
IMResult<OutputGetUserList> getUserListIMResult = UserAdmin.getAllUsers(limit, i*limit);
|
||||||
|
if (getUserListIMResult != null && getUserListIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||||
|
System.out.println("getUserListIMResult success");
|
||||||
|
if(getUserListIMResult.getResult().userInfoList.size() < limit) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
System.out.println("getUserListIMResult failure");
|
||||||
|
System.exit(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (commercialServer) {
|
if (commercialServer) {
|
||||||
IMResult<GetOnlineUserCountResult> getOnlineUserCountResultIMResult = UserAdmin.getOnlineUserCount();
|
IMResult<GetOnlineUserCountResult> getOnlineUserCountResultIMResult = UserAdmin.getOnlineUserCount();
|
||||||
if (getOnlineUserCountResultIMResult != null && getOnlineUserCountResultIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
if (getOnlineUserCountResultIMResult != null && getOnlineUserCountResultIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||||
|
|||||||
@@ -24,6 +24,14 @@ public class UserAdmin {
|
|||||||
return AdminHttpUtils.httpJsonPost(path, getUserInfo, InputOutputUserInfo.class);
|
return AdminHttpUtils.httpJsonPost(path, getUserInfo, InputOutputUserInfo.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static IMResult<OutputGetUserList> getAllUsers(int count, int offset) throws Exception {
|
||||||
|
String path = APIPath.User_Get_All;
|
||||||
|
InputGetUserList input = new InputGetUserList();
|
||||||
|
input.count = count;
|
||||||
|
input.offset = offset;
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, input, OutputGetUserList.class);
|
||||||
|
}
|
||||||
|
|
||||||
public static IMResult<OutputCreateUser> createUser(InputOutputUserInfo user) throws Exception {
|
public static IMResult<OutputCreateUser> createUser(InputOutputUserInfo user) throws Exception {
|
||||||
String path = APIPath.Create_User;
|
String path = APIPath.Create_User;
|
||||||
return AdminHttpUtils.httpJsonPost(path, user, OutputCreateUser.class);
|
return AdminHttpUtils.httpJsonPost(path, user, OutputCreateUser.class);
|
||||||
|
|||||||
Reference in New Issue
Block a user