Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bcf969e56f | ||
|
|
b3a95c0310 | ||
|
|
ae863ab6e4 | ||
|
|
688ca4e31d | ||
|
|
724b6dddd6 | ||
|
|
bf3b30eb2c | ||
|
|
4f0545dfc1 | ||
|
|
c1b9a81e12 | ||
|
|
029b6ed691 | ||
|
|
4fdefca33d | ||
|
|
e90ca145be | ||
|
|
bf3d3c308d | ||
|
|
bee2f3c6ef | ||
|
|
d4e13e4578 | ||
|
|
66486b019f | ||
|
|
6510204fe6 | ||
|
|
b4b736c0c4 | ||
|
|
c4e8c5811c | ||
|
|
804b2fc610 | ||
|
|
0a7487a144 | ||
|
|
4ae9de0628 | ||
|
|
04d0f717d8 |
@@ -41,6 +41,11 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
#### 加入野火官方体验交流群
|
||||||
|
使用野火IM移动客户端扫码下面二维码(不是使用微信扫码),和野火IM的爱好者一起畅谈野火IM的问题和经验:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
#### 应用截图
|
#### 应用截图
|
||||||

|

|
||||||
|
|
||||||
|
|||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
alter table t_friend add column `_blacked` tinyint DEFAULT 0;
|
||||||
|
update t_friend set `_blacked` = 1 where `_state` = 2;
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
alter table t_friend add column `_blacked` tinyint DEFAULT 0 COMMENT "0, normal; 1, blacked";
|
||||||
|
update t_friend set `_blacked` = 1 where `_state` = 2;
|
||||||
Executable → Regular
+2
-2
@@ -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>0.29</version>
|
<version>0.31</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>moquette-broker</artifactId>
|
<artifactId>moquette-broker</artifactId>
|
||||||
@@ -161,7 +161,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.paho</groupId>
|
<groupId>org.eclipse.paho</groupId>
|
||||||
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
|
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
|
||||||
<version>1.0.2</version>
|
<version>1.2.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
+1
-1
@@ -36,7 +36,7 @@ public class FriendRelationGetAction extends AdminAction {
|
|||||||
public boolean action(Request request, Response response) {
|
public boolean action(Request request, Response response) {
|
||||||
if (request.getNettyRequest() instanceof FullHttpRequest) {
|
if (request.getNettyRequest() instanceof FullHttpRequest) {
|
||||||
InputGetFriendList inputGetFriendList = getRequestBody(request.getNettyRequest(), InputGetFriendList.class);
|
InputGetFriendList inputGetFriendList = getRequestBody(request.getNettyRequest(), InputGetFriendList.class);
|
||||||
List<FriendData> dataList = messagesStore.getFriendList(inputGetFriendList.getUserId(), 0);
|
List<FriendData> dataList = messagesStore.getFriendList(inputGetFriendList.getUserId(), null, 0);
|
||||||
List<String> list = new ArrayList<>();
|
List<String> list = new ArrayList<>();
|
||||||
for (FriendData data : dataList) {
|
for (FriendData data : dataList) {
|
||||||
if (data.getState() == inputGetFriendList.getStatus()) {
|
if (data.getState() == inputGetFriendList.getStatus()) {
|
||||||
|
|||||||
+85
@@ -0,0 +1,85 @@
|
|||||||
|
/*
|
||||||
|
* 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.InputAddGroupMember;
|
||||||
|
import cn.wildfirechat.pojos.InputSetGroupManager;
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
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.moquette.persistence.RPCCenter;
|
||||||
|
import io.moquette.persistence.TargetEntry;
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import io.netty.buffer.Unpooled;
|
||||||
|
import io.netty.handler.codec.http.FullHttpRequest;
|
||||||
|
import io.netty.handler.codec.http.HttpResponseStatus;
|
||||||
|
import win.liyufan.im.IMTopic;
|
||||||
|
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
|
@Route(APIPath.Group_Set_Manager)
|
||||||
|
@HttpMethod("POST")
|
||||||
|
public class SetGroupManagerAction extends AdminAction {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isTransactionAction() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean action(Request request, Response response) {
|
||||||
|
if (request.getNettyRequest() instanceof FullHttpRequest) {
|
||||||
|
InputSetGroupManager inputAddGroupMember = getRequestBody(request.getNettyRequest(), InputSetGroupManager.class);
|
||||||
|
if (inputAddGroupMember.isValide()) {
|
||||||
|
RPCCenter.getInstance().sendRequest(inputAddGroupMember.getOperator(), null, IMTopic.SetGroupManagerTopic, inputAddGroupMember.toProtoGroupRequest().toByteArray(), inputAddGroupMember.getOperator(), TargetEntry.Type.TARGET_TYPE_USER, new RPCCenter.Callback() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess(byte[] result) {
|
||||||
|
ByteBuf byteBuf = Unpooled.buffer();
|
||||||
|
byteBuf.writeBytes(result);
|
||||||
|
ErrorCode errorCode = ErrorCode.fromCode(byteBuf.readByte());
|
||||||
|
if (errorCode == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||||
|
sendResponse(response, null, null);
|
||||||
|
} else {
|
||||||
|
sendResponse(response, errorCode, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(ErrorCode errorCode) {
|
||||||
|
sendResponse(response, errorCode, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTimeout() {
|
||||||
|
sendResponse(response, ErrorCode.ERROR_CODE_TIMEOUT, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Executor getResponseExecutor() {
|
||||||
|
return command -> {
|
||||||
|
ctx.executor().execute(command);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}, true);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
response.setStatus(HttpResponseStatus.OK);
|
||||||
|
RestResult result = RestResult.resultOf(ErrorCode.INVALID_PARAMETER);
|
||||||
|
response.setContent(new Gson().toJson(result));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,14 +15,16 @@ public class FriendData implements Serializable {
|
|||||||
private String friendUid;
|
private String friendUid;
|
||||||
private String alias;
|
private String alias;
|
||||||
private int state;
|
private int state;
|
||||||
|
private int blacked;
|
||||||
private long timestamp;
|
private long timestamp;
|
||||||
|
|
||||||
|
|
||||||
public FriendData(String userId, String friendUid, String alias, int state, long timestamp) {
|
public FriendData(String userId, String friendUid, String alias, int state, int blacked, long timestamp) {
|
||||||
this.userId = userId;
|
this.userId = userId;
|
||||||
this.friendUid = friendUid;
|
this.friendUid = friendUid;
|
||||||
this.alias = alias;
|
this.alias = alias;
|
||||||
this.state = state;
|
this.state = state;
|
||||||
|
this.blacked = blacked;
|
||||||
this.timestamp = timestamp;
|
this.timestamp = timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,6 +63,14 @@ public class FriendData implements Serializable {
|
|||||||
this.state = state;
|
this.state = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getBlacked() {
|
||||||
|
return blacked;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBlacked(int blacked) {
|
||||||
|
this.blacked = blacked;
|
||||||
|
}
|
||||||
|
|
||||||
public long getTimestamp() {
|
public long getTimestamp() {
|
||||||
return timestamp;
|
return timestamp;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,11 +22,11 @@ import java.util.List;
|
|||||||
public class FriendPullHandler extends IMHandler<WFCMessage.Version> {
|
public class FriendPullHandler extends IMHandler<WFCMessage.Version> {
|
||||||
@Override
|
@Override
|
||||||
public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.Version request, Qos1PublishHandler.IMCallback callback) {
|
public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, boolean isAdmin, WFCMessage.Version request, Qos1PublishHandler.IMCallback callback) {
|
||||||
List<FriendData> friendDatas = m_messagesStore.getFriendList(fromUser, request.getVersion());
|
List<FriendData> friendDatas = m_messagesStore.getFriendList(fromUser, clientID, request.getVersion());
|
||||||
WFCMessage.GetFriendsResult.Builder builder = WFCMessage.GetFriendsResult.newBuilder();
|
WFCMessage.GetFriendsResult.Builder builder = WFCMessage.GetFriendsResult.newBuilder();
|
||||||
for (FriendData data : friendDatas
|
for (FriendData data : friendDatas
|
||||||
) {
|
) {
|
||||||
WFCMessage.Friend.Builder builder1 = WFCMessage.Friend.newBuilder().setState(data.getState()).setUid(data.getFriendUid()).setUpdateDt(data.getTimestamp());
|
WFCMessage.Friend.Builder builder1 = WFCMessage.Friend.newBuilder().setState(data.getState()).setBlacked(data.getBlacked()).setUid(data.getFriendUid()).setUpdateDt(data.getTimestamp());
|
||||||
if (!StringUtil.isNullOrEmpty(data.getAlias())) {
|
if (!StringUtil.isNullOrEmpty(data.getAlias())) {
|
||||||
builder1.setAlias(data.getAlias());
|
builder1.setAlias(data.getAlias());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ import com.xiaoleilu.loServer.model.FriendData;
|
|||||||
import io.moquette.spi.ClientSession;
|
import io.moquette.spi.ClientSession;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import sun.misc.BASE64Encoder;
|
|
||||||
import win.liyufan.im.DBUtil;
|
import win.liyufan.im.DBUtil;
|
||||||
import win.liyufan.im.MessageBundle;
|
import win.liyufan.im.MessageBundle;
|
||||||
import win.liyufan.im.MessageShardingUtil;
|
import win.liyufan.im.MessageShardingUtil;
|
||||||
@@ -57,8 +56,6 @@ public class DatabaseStore {
|
|||||||
|
|
||||||
statement.setString(1, userId);
|
statement.setString(1, userId);
|
||||||
|
|
||||||
statement.executeQuery();
|
|
||||||
|
|
||||||
rs = statement.executeQuery();
|
rs = statement.executeQuery();
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
int index = 1;
|
int index = 1;
|
||||||
@@ -173,12 +170,16 @@ public class DatabaseStore {
|
|||||||
if (buzzy) {
|
if (buzzy) {
|
||||||
sql += " where (`_display_name` like ? or `_name` = ? or `_mobile` = ?) ";
|
sql += " where (`_display_name` like ? or `_name` = ? or `_mobile` = ?) ";
|
||||||
} else {
|
} else {
|
||||||
sql += " where (`_display_name` = ? or `_name` = ? or `_mobile` = ?) ";
|
sql += " where (`_name` = ? or `_mobile` = ?) ";
|
||||||
}
|
}
|
||||||
|
|
||||||
sql += " and _type <> 2"; //can search normal user(0) and robot(1), can not search things
|
sql += " and _type <> 2"; //can search normal user(0) and robot(1), can not search things
|
||||||
|
|
||||||
sql += " limit 20";
|
if (buzzy) {
|
||||||
|
sql += " limit 20";
|
||||||
|
} else {
|
||||||
|
sql += " limit 1";
|
||||||
|
}
|
||||||
|
|
||||||
if (page > 0) {
|
if (page > 0) {
|
||||||
sql += "offset = '" + page * 20 + "'";
|
sql += "offset = '" + page * 20 + "'";
|
||||||
@@ -189,9 +190,8 @@ public class DatabaseStore {
|
|||||||
int index = 1;
|
int index = 1;
|
||||||
if (buzzy) {
|
if (buzzy) {
|
||||||
statement.setString(index++, "%" + keyword + "%");
|
statement.setString(index++, "%" + keyword + "%");
|
||||||
} else {
|
|
||||||
statement.setString(index++, keyword);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
statement.setString(index++, keyword);
|
statement.setString(index++, keyword);
|
||||||
statement.setString(index++, keyword);
|
statement.setString(index++, keyword);
|
||||||
|
|
||||||
@@ -350,7 +350,7 @@ public class DatabaseStore {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
connection = DBUtil.getConnection();
|
connection = DBUtil.getConnection();
|
||||||
String sql = "select `_uid`, `_friend_uid`, `_alias`, `_state`, `_dt` from t_friend";
|
String sql = "select `_uid`, `_friend_uid`, `_alias`, `_state`, `_blacked`, `_dt` from t_friend";
|
||||||
statement = connection.prepareStatement(sql);
|
statement = connection.prepareStatement(sql);
|
||||||
|
|
||||||
int index;
|
int index;
|
||||||
@@ -375,6 +375,9 @@ public class DatabaseStore {
|
|||||||
int intvalue = rs.getInt(index++);
|
int intvalue = rs.getInt(index++);
|
||||||
builder.setState(intvalue);
|
builder.setState(intvalue);
|
||||||
|
|
||||||
|
intvalue = rs.getInt(index++);
|
||||||
|
builder.setBlacked(intvalue);
|
||||||
|
|
||||||
long longvalue = rs.getLong(index++);
|
long longvalue = rs.getLong(index++);
|
||||||
builder.setTimestamp(longvalue);
|
builder.setTimestamp(longvalue);
|
||||||
|
|
||||||
@@ -1628,8 +1631,7 @@ public class DatabaseStore {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
MessageDigest md5 = MessageDigest.getInstance("MD5");
|
MessageDigest md5 = MessageDigest.getInstance("MD5");
|
||||||
BASE64Encoder base64en = new BASE64Encoder();
|
String passwdMd5 = Base64.getEncoder().encodeToString(md5.digest(password.getBytes("utf-8")));
|
||||||
String passwdMd5 = base64en.encode(md5.digest(password.getBytes("utf-8")));
|
|
||||||
statement.setString(index, passwdMd5);
|
statement.setString(index, passwdMd5);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
statement.setString(index, "");
|
statement.setString(index, "");
|
||||||
@@ -2140,7 +2142,7 @@ public class DatabaseStore {
|
|||||||
ResultSet rs = null;
|
ResultSet rs = null;
|
||||||
try {
|
try {
|
||||||
connection = DBUtil.getConnection();
|
connection = DBUtil.getConnection();
|
||||||
String sql = "select `_friend_uid`, `_alias`, `_state`, `_dt` from t_friend where `_uid` = ?";
|
String sql = "select `_friend_uid`, `_alias`, `_state`, `_blacked`, `_dt` from t_friend where `_uid` = ?";
|
||||||
statement = connection.prepareStatement(sql);
|
statement = connection.prepareStatement(sql);
|
||||||
|
|
||||||
|
|
||||||
@@ -2154,9 +2156,10 @@ public class DatabaseStore {
|
|||||||
String uid = rs.getString(1);
|
String uid = rs.getString(1);
|
||||||
String alias = rs.getString(2);
|
String alias = rs.getString(2);
|
||||||
int state = rs.getInt(3);
|
int state = rs.getInt(3);
|
||||||
long timestamp = rs.getLong(4);
|
int blacked = rs.getInt(4);
|
||||||
|
long timestamp = rs.getLong(5);
|
||||||
|
|
||||||
FriendData data = new FriendData(userId, uid, alias, state, timestamp);
|
FriendData data = new FriendData(userId, uid, alias, state, blacked, timestamp);
|
||||||
out.add(data);
|
out.add(data);
|
||||||
}
|
}
|
||||||
return out;
|
return out;
|
||||||
@@ -2306,10 +2309,11 @@ public class DatabaseStore {
|
|||||||
PreparedStatement statement = null;
|
PreparedStatement statement = null;
|
||||||
try {
|
try {
|
||||||
connection = DBUtil.getConnection();
|
connection = DBUtil.getConnection();
|
||||||
String sql = "insert into t_friend (`_uid`, `_friend_uid`, `_alias`, `_state`, `_dt`) values(?, ?, ?, ?, ?)" +
|
String sql = "insert into t_friend (`_uid`, `_friend_uid`, `_alias`, `_state`, `_blacked`, `_dt`) values(?, ?, ?, ?, ?, ?)" +
|
||||||
" ON DUPLICATE KEY UPDATE " +
|
" ON DUPLICATE KEY UPDATE " +
|
||||||
"`_alias` = ?," +
|
"`_alias` = ?," +
|
||||||
"`_state` = ?," +
|
"`_state` = ?," +
|
||||||
|
"`_blacked` = ?," +
|
||||||
"`_dt` = ?";
|
"`_dt` = ?";
|
||||||
|
|
||||||
|
|
||||||
@@ -2319,9 +2323,11 @@ public class DatabaseStore {
|
|||||||
statement.setString(index++, request.getFriendUid());
|
statement.setString(index++, request.getFriendUid());
|
||||||
statement.setString(index++, request.getAlias());
|
statement.setString(index++, request.getAlias());
|
||||||
statement.setInt(index++, request.getState());
|
statement.setInt(index++, request.getState());
|
||||||
|
statement.setInt(index++, request.getBlacked());
|
||||||
statement.setLong(index++, request.getTimestamp());
|
statement.setLong(index++, request.getTimestamp());
|
||||||
statement.setString(index++, request.getAlias());
|
statement.setString(index++, request.getAlias());
|
||||||
statement.setInt(index++, request.getState());
|
statement.setInt(index++, request.getState());
|
||||||
|
statement.setInt(index++, request.getBlacked());
|
||||||
statement.setLong(index++, request.getTimestamp());
|
statement.setLong(index++, request.getTimestamp());
|
||||||
int count = statement.executeUpdate();
|
int count = statement.executeUpdate();
|
||||||
LOG.info("Update rows {}", count);
|
LOG.info("Update rows {}", count);
|
||||||
|
|||||||
@@ -30,9 +30,9 @@ import io.moquette.spi.IMatchingCondition;
|
|||||||
import io.moquette.spi.IMessagesStore;
|
import io.moquette.spi.IMessagesStore;
|
||||||
import io.moquette.spi.security.Tokenor;
|
import io.moquette.spi.security.Tokenor;
|
||||||
import io.moquette.spi.impl.subscriptions.Topic;
|
import io.moquette.spi.impl.subscriptions.Topic;
|
||||||
|
import io.netty.handler.codec.mqtt.MqttVersion;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import sun.misc.BASE64Encoder;
|
|
||||||
import win.liyufan.im.*;
|
import win.liyufan.im.*;
|
||||||
|
|
||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
@@ -349,7 +349,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
size += bundle.getMessage().getSerializedSize();
|
size += bundle.getMessage().getSerializedSize();
|
||||||
if (size >= 1 * 1024 * 1024) { //3M
|
if (size >= 512 * 1024) { //3M
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
builder.addMessage(bundle.getMessage());
|
builder.addMessage(bundle.getMessage());
|
||||||
@@ -1039,25 +1039,31 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
|
|
||||||
//check the new owner is in member list? is that necessary?
|
//check the new owner is in member list? is that necessary?
|
||||||
long updateDt = System.currentTimeMillis();
|
long updateDt = System.currentTimeMillis();
|
||||||
groupInfo = groupInfo.toBuilder().setOwner(newOwner).setUpdateDt(updateDt).build();
|
groupInfo = groupInfo.toBuilder().setOwner(newOwner).setUpdateDt(updateDt).setMemberUpdateDt(updateDt).build();
|
||||||
|
|
||||||
mIMap.set(groupId, groupInfo);
|
mIMap.set(groupId, groupInfo);
|
||||||
|
|
||||||
MultiMap<String, WFCMessage.GroupMember> groupMembers = hzInstance.getMultiMap(GROUP_MEMBERS);
|
MultiMap<String, WFCMessage.GroupMember> groupMembers = hzInstance.getMultiMap(GROUP_MEMBERS);
|
||||||
Collection<WFCMessage.GroupMember> members = groupMembers.get(groupId);
|
Collection<WFCMessage.GroupMember> members = groupMembers.get(groupId);
|
||||||
if (members == null || members.size() == 0) {
|
if (members == null || members.size() == 0) {
|
||||||
members = loadGroupMemberFromDB(hzInstance, groupId);
|
members = loadGroupMemberFromDB(hzInstance, groupId);
|
||||||
}
|
}
|
||||||
|
int modifyMemeberCount = 0;
|
||||||
for (WFCMessage.GroupMember member : members) {
|
for (WFCMessage.GroupMember member : members) {
|
||||||
|
if (modifyMemeberCount == 2) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (newOwner.equals(member.getMemberId())) {
|
if (newOwner.equals(member.getMemberId())) {
|
||||||
groupMembers.remove(groupId, member);
|
groupMembers.remove(groupId, member);
|
||||||
member = member.toBuilder().setType(GroupMemberType_Owner).setUpdateDt(updateDt).build();
|
member = member.toBuilder().setType(GroupMemberType_Owner).setUpdateDt(updateDt).build();
|
||||||
databaseStore.persistGroupMember(groupId, Arrays.asList(member));
|
databaseStore.persistGroupMember(groupId, Arrays.asList(member));
|
||||||
groupMembers.put(groupId, member);
|
groupMembers.put(groupId, member);
|
||||||
|
modifyMemeberCount++;
|
||||||
} else if(member.getType() == GroupMemberType_Owner) {
|
} else if(member.getType() == GroupMemberType_Owner) {
|
||||||
groupMembers.remove(groupId, member);
|
groupMembers.remove(groupId, member);
|
||||||
member = member.toBuilder().setType(GroupMemberType_Normal).setUpdateDt(updateDt).build();
|
member = member.toBuilder().setType(GroupMemberType_Normal).setUpdateDt(updateDt).build();
|
||||||
databaseStore.persistGroupMember(groupId, Arrays.asList(member));
|
databaseStore.persistGroupMember(groupId, Arrays.asList(member));
|
||||||
groupMembers.put(groupId, member);
|
groupMembers.put(groupId, member);
|
||||||
|
modifyMemeberCount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1556,7 +1562,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
|
|
||||||
for (FriendData friendData : friendDatas) {
|
for (FriendData friendData : friendDatas) {
|
||||||
if (friendData.getFriendUid().equals(userId)) {
|
if (friendData.getFriendUid().equals(userId)) {
|
||||||
if (friendData.getState() == 2) {
|
if (friendData.getBlacked() == 1) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
@@ -1592,8 +1598,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
String pwd_md5 = rs.getString(2);
|
String pwd_md5 = rs.getString(2);
|
||||||
try {
|
try {
|
||||||
MessageDigest md5 = MessageDigest.getInstance("MD5");
|
MessageDigest md5 = MessageDigest.getInstance("MD5");
|
||||||
BASE64Encoder base64en = new BASE64Encoder();
|
String passwdMd5 = Base64.getEncoder().encodeToString(md5.digest(password.getBytes("utf-8")));
|
||||||
String passwdMd5 = base64en.encode(md5.digest(password.getBytes("utf-8")));
|
|
||||||
if (passwdMd5.equals(pwd_md5)) {
|
if (passwdMd5.equals(pwd_md5)) {
|
||||||
LOG.info("login success userName={}, userId={}", name, uid);
|
LOG.info("login success userName={}, userId={}", name, uid);
|
||||||
userIdRet.add(uid);
|
userIdRet.add(uid);
|
||||||
@@ -1648,7 +1653,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<FriendData> getFriendList(String userId, long version) {
|
public List<FriendData> getFriendList(String userId, String clientId, long version) {
|
||||||
List<FriendData> out = new ArrayList<FriendData>();
|
List<FriendData> out = new ArrayList<FriendData>();
|
||||||
|
|
||||||
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
|
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
|
||||||
@@ -1658,9 +1663,26 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
friends = loadFriend(friendsMap, userId);
|
friends = loadFriend(friendsMap, userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean needFriendMigrate = false;
|
||||||
|
|
||||||
|
if (!StringUtil.isNullOrEmpty(clientId)) {
|
||||||
|
MemorySessionStore.Session session = m_Server.getStore().sessionsStore().getSession(clientId);
|
||||||
|
if(session != null && session.getMqttVersion() != null && session.getMqttVersion().protocolLevel() < MqttVersion.Wildfire_2.protocolLevel()) {
|
||||||
|
needFriendMigrate = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (FriendData friend : friends) {
|
for (FriendData friend : friends) {
|
||||||
if (friend.getTimestamp() > version) {
|
if (friend.getTimestamp() > version) {
|
||||||
out.add(friend);
|
if (needFriendMigrate) {
|
||||||
|
if (friend.getBlacked() > 0) {
|
||||||
|
friend.setState(2);
|
||||||
|
}
|
||||||
|
out.add(friend);
|
||||||
|
} else {
|
||||||
|
out.add(friend);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1715,6 +1737,24 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
return ErrorCode.ERROR_CODE_FRIEND_ALREADY_REQUEST;
|
return ErrorCode.ERROR_CODE_FRIEND_ALREADY_REQUEST;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MultiMap<String, FriendData> friendsMap = hzInstance.getMultiMap(USER_FRIENDS);
|
||||||
|
|
||||||
|
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) {
|
||||||
|
return ErrorCode.ERROR_CODE_IN_BLACK_LIST;
|
||||||
|
}
|
||||||
|
|
||||||
WFCMessage.FriendRequest newRequest = WFCMessage.FriendRequest
|
WFCMessage.FriendRequest newRequest = WFCMessage.FriendRequest
|
||||||
.newBuilder()
|
.newBuilder()
|
||||||
.setFromUid(userId)
|
.setFromUid(userId)
|
||||||
@@ -1766,7 +1806,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (friendData1 == null) {
|
if (friendData1 == null) {
|
||||||
friendData1 = new FriendData(userId, request.getTargetUid(), "", request.getStatus(), System.currentTimeMillis());
|
friendData1 = new FriendData(userId, request.getTargetUid(), "", request.getStatus(), 0, System.currentTimeMillis());
|
||||||
} else {
|
} else {
|
||||||
friendData1.setState(request.getStatus());
|
friendData1.setState(request.getStatus());
|
||||||
friendData1.setTimestamp(System.currentTimeMillis());
|
friendData1.setTimestamp(System.currentTimeMillis());
|
||||||
@@ -1788,7 +1828,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (friendData2 == null) {
|
if (friendData2 == null) {
|
||||||
friendData2 = new FriendData(request.getTargetUid(), userId, "", request.getStatus(), friendData1.getTimestamp());
|
friendData2 = new FriendData(request.getTargetUid(), userId, "", request.getStatus(), 0, friendData1.getTimestamp());
|
||||||
} else {
|
} else {
|
||||||
friendsMap.remove(request.getTargetUid(), friendData2);
|
friendsMap.remove(request.getTargetUid(), friendData2);
|
||||||
friendData2.setState(request.getStatus());
|
friendData2.setState(request.getStatus());
|
||||||
@@ -1829,10 +1869,10 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
databaseStore.persistOrUpdateFriendRequest(existRequest);
|
databaseStore.persistOrUpdateFriendRequest(existRequest);
|
||||||
MultiMap<String, FriendData> friendsMap = hzInstance.getMultiMap(USER_FRIENDS);
|
MultiMap<String, FriendData> friendsMap = hzInstance.getMultiMap(USER_FRIENDS);
|
||||||
|
|
||||||
FriendData friendData1 = new FriendData(userId, request.getTargetUid(), "", 0, System.currentTimeMillis());
|
FriendData friendData1 = new FriendData(userId, request.getTargetUid(), "", 0, 0, System.currentTimeMillis());
|
||||||
databaseStore.persistOrUpdateFriendData(friendData1);
|
databaseStore.persistOrUpdateFriendData(friendData1);
|
||||||
|
|
||||||
FriendData friendData2 = new FriendData(request.getTargetUid(), userId, "", 0, friendData1.getTimestamp());
|
FriendData friendData2 = new FriendData(request.getTargetUid(), userId, "", 0, 0, friendData1.getTimestamp());
|
||||||
databaseStore.persistOrUpdateFriendData(friendData2);
|
databaseStore.persistOrUpdateFriendData(friendData2);
|
||||||
|
|
||||||
requestMap.remove(userId);
|
requestMap.remove(userId);
|
||||||
@@ -1854,6 +1894,12 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ErrorCode blackUserRequest(String fromUser, String targetUserId, int state, long[] heads) {
|
public ErrorCode blackUserRequest(String fromUser, String targetUserId, int state, long[] heads) {
|
||||||
|
if (state == 2) {
|
||||||
|
state = 1;
|
||||||
|
} else {
|
||||||
|
state = 0;
|
||||||
|
}
|
||||||
|
|
||||||
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
|
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
|
||||||
MultiMap<String, FriendData> friendsMap = hzInstance.getMultiMap(USER_FRIENDS);
|
MultiMap<String, FriendData> friendsMap = hzInstance.getMultiMap(USER_FRIENDS);
|
||||||
|
|
||||||
@@ -1871,9 +1917,9 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (friendData == null) {
|
if (friendData == null) {
|
||||||
friendData = new FriendData(fromUser, targetUserId, "", state, System.currentTimeMillis());
|
friendData = new FriendData(fromUser, targetUserId, "", 1, state, System.currentTimeMillis());
|
||||||
}
|
}
|
||||||
friendData.setState(state);
|
friendData.setBlacked(state);
|
||||||
friendData.setTimestamp(System.currentTimeMillis());
|
friendData.setTimestamp(System.currentTimeMillis());
|
||||||
|
|
||||||
|
|
||||||
@@ -2121,7 +2167,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
public boolean getUserPushHiddenDetail(String userId) {
|
public boolean getUserPushHiddenDetail(String userId) {
|
||||||
Boolean hidden = userPushHiddenDetail.get(userId);
|
Boolean hidden = userPushHiddenDetail.get(userId);
|
||||||
if (hidden == null) {
|
if (hidden == null) {
|
||||||
WFCMessage.UserSettingEntry entry = getUserSetting(userId, UserSettingScope.kUserSettingGlobalSilent, null);
|
WFCMessage.UserSettingEntry entry = getUserSetting(userId, UserSettingScope.kUserSettingHiddenNotificationDetail, null);
|
||||||
if (entry == null || !entry.getValue().equals("1")) {
|
if (entry == null || !entry.getValue().equals("1")) {
|
||||||
hidden = false;
|
hidden = false;
|
||||||
} else {
|
} else {
|
||||||
@@ -2320,6 +2366,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
words) {
|
words) {
|
||||||
databaseStore.deleteSensitiveWord(word);
|
databaseStore.deleteSensitiveWord(word);
|
||||||
}
|
}
|
||||||
|
lastUpdateSensitiveTime = 0;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ public interface IMessagesStore {
|
|||||||
ErrorCode verifyToken(String userId, String token, List<String> serverIPs, List<Integer> ports);
|
ErrorCode verifyToken(String userId, String token, List<String> serverIPs, List<Integer> ports);
|
||||||
ErrorCode login(String name, String password, List<String> userIdRet);
|
ErrorCode login(String name, String password, List<String> userIdRet);
|
||||||
|
|
||||||
List<FriendData> getFriendList(String userId, long version);
|
List<FriendData> getFriendList(String userId, String clientId, long version);
|
||||||
List<WFCMessage.FriendRequest> getFriendRequestList(String userId, long version);
|
List<WFCMessage.FriendRequest> getFriendRequestList(String userId, long version);
|
||||||
|
|
||||||
ErrorCode saveAddFriendRequest(String userId, WFCMessage.AddFriendRequest request, long[] head);
|
ErrorCode saveAddFriendRequest(String userId, WFCMessage.AddFriendRequest request, long[] head);
|
||||||
|
|||||||
@@ -142,9 +142,8 @@ public class ProtocolProcessor {
|
|||||||
String clientId = payload.clientIdentifier();
|
String clientId = payload.clientIdentifier();
|
||||||
LOG.info("Processing CONNECT message. CId={}, username={}", clientId, payload.userName());
|
LOG.info("Processing CONNECT message. CId={}, username={}", clientId, payload.userName());
|
||||||
|
|
||||||
if (msg.variableHeader().version() != MqttVersion.MQTT_3_1.protocolLevel()
|
if (msg.variableHeader().version() < MqttVersion.MQTT_3_1_1.protocolLevel() ||
|
||||||
&& msg.variableHeader().version() != MqttVersion.MQTT_3_1_1.protocolLevel()
|
msg.variableHeader().version() >= MqttVersion.Wildfire_Max.protocolLevel()) {
|
||||||
&& msg.variableHeader().version() != MqttVersion.Wildfire_1.protocolLevel()) {
|
|
||||||
MqttConnAckMessage badProto = connAck(CONNECTION_REFUSED_UNACCEPTABLE_PROTOCOL_VERSION);
|
MqttConnAckMessage badProto = connAck(CONNECTION_REFUSED_UNACCEPTABLE_PROTOCOL_VERSION);
|
||||||
|
|
||||||
LOG.error("MQTT protocol version is not valid. CId={}", clientId);
|
LOG.error("MQTT protocol version is not valid. CId={}", clientId);
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ public class Qos1PublishHandler extends QosPublishHandler {
|
|||||||
} else {
|
} else {
|
||||||
MemorySessionStore.Session session = m_sessionStore.getSession(clientID);
|
MemorySessionStore.Session session = m_sessionStore.getSession(clientID);
|
||||||
if (session != null && session.getUsername().equals(fromUser)) {
|
if (session != null && session.getUsername().equals(fromUser)) {
|
||||||
if (data.length > 7*1024 && session.getMqttVersion() == MqttVersion.Wildfire_1) {
|
if (data.length > 7*1024 && session.getMqttVersion().protocolLevel() >= MqttVersion.Wildfire_1.protocolLevel()) {
|
||||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
GZIPOutputStream gzip;
|
GZIPOutputStream gzip;
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ final class MqttCodecUtil {
|
|||||||
return clientId != null && clientId.length() >= MIN_CLIENT_ID_LENGTH &&
|
return clientId != null && clientId.length() >= MIN_CLIENT_ID_LENGTH &&
|
||||||
clientId.length() <= MAX_CLIENT_ID_LENGTH;
|
clientId.length() <= MAX_CLIENT_ID_LENGTH;
|
||||||
}
|
}
|
||||||
if (mqttVersion == MqttVersion.MQTT_3_1_1 || mqttVersion == MqttVersion.Wildfire_1) {
|
if (mqttVersion.protocolLevel() >= MqttVersion.MQTT_3_1_1.protocolLevel()) {
|
||||||
// In 3.1.3.1 Client Identifier of MQTT 3.1.1 specification, The Server MAY allow ClientId’s
|
// In 3.1.3.1 Client Identifier of MQTT 3.1.1 specification, The Server MAY allow ClientId’s
|
||||||
// that contain more than 23 encoded bytes. And, The Server MAY allow zero-length ClientId.
|
// that contain more than 23 encoded bytes. And, The Server MAY allow zero-length ClientId.
|
||||||
return clientId != null;
|
return clientId != null;
|
||||||
|
|||||||
@@ -223,7 +223,7 @@ public final class MqttDecoder extends ReplayingDecoder<DecoderState> {
|
|||||||
final int willQos = (b1 & 0x18) >> 3;
|
final int willQos = (b1 & 0x18) >> 3;
|
||||||
final boolean willFlag = (b1 & 0x04) == 0x04;
|
final boolean willFlag = (b1 & 0x04) == 0x04;
|
||||||
final boolean cleanSession = (b1 & 0x02) == 0x02;
|
final boolean cleanSession = (b1 & 0x02) == 0x02;
|
||||||
if (mqttVersion == MqttVersion.MQTT_3_1_1 || mqttVersion == MqttVersion.Wildfire_1) {
|
if (mqttVersion.protocolLevel() >= MqttVersion.MQTT_3_1_1.protocolLevel()) {
|
||||||
final boolean zeroReservedFlag = (b1 & 0x01) == 0x0;
|
final boolean zeroReservedFlag = (b1 & 0x01) == 0x0;
|
||||||
if (!zeroReservedFlag) {
|
if (!zeroReservedFlag) {
|
||||||
// MQTT v3.1.1: The Server MUST validate that the reserved flag in the CONNECT Control Packet is
|
// MQTT v3.1.1: The Server MUST validate that the reserved flag in the CONNECT Control Packet is
|
||||||
|
|||||||
@@ -25,7 +25,9 @@ import io.netty.util.internal.ObjectUtil;
|
|||||||
public enum MqttVersion {
|
public enum MqttVersion {
|
||||||
MQTT_3_1("MQIsdp", (byte) 3),
|
MQTT_3_1("MQIsdp", (byte) 3),
|
||||||
MQTT_3_1_1("MQTT", (byte) 4),
|
MQTT_3_1_1("MQTT", (byte) 4),
|
||||||
Wildfire_1("MQTT", (byte) 5);
|
Wildfire_1("MQTT", (byte) 5),
|
||||||
|
Wildfire_2("MQTT", (byte) 6),
|
||||||
|
Wildfire_Max("MQTT", (byte) 7);
|
||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
private final byte level;
|
private final byte level;
|
||||||
|
|||||||
+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>0.29</version>
|
<version>0.31</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Wildfire Chat package.
|
||||||
|
* (c) Heavyrain2012 <heavyrain.lee@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.pojos;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.wildfirechat.proto.WFCMessage;
|
||||||
|
import io.netty.util.internal.StringUtil;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class InputSetGroupManager extends InputGroupBase {
|
||||||
|
private String group_id;
|
||||||
|
private List<String> members;
|
||||||
|
private boolean is_manager;
|
||||||
|
|
||||||
|
public String getGroup_id() {
|
||||||
|
return group_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroup_id(String group_id) {
|
||||||
|
this.group_id = group_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getMembers() {
|
||||||
|
return members;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMembers(List<String> members) {
|
||||||
|
this.members = members;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isIs_manager() {
|
||||||
|
return is_manager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIs_manager(boolean is_manager) {
|
||||||
|
this.is_manager = is_manager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isValide() {
|
||||||
|
if (StringUtil.isNullOrEmpty(operator) || StringUtil.isNullOrEmpty(group_id) || members == null || members.isEmpty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public WFCMessage.SetGroupManagerRequest toProtoGroupRequest() {
|
||||||
|
WFCMessage.SetGroupManagerRequest.Builder addGroupBuilder = WFCMessage.SetGroupManagerRequest.newBuilder();
|
||||||
|
addGroupBuilder.setGroupId(group_id);
|
||||||
|
addGroupBuilder.addAllUserId(members);
|
||||||
|
addGroupBuilder.setType(is_manager ? 1 : 0);
|
||||||
|
|
||||||
|
if (to_lines != null) {
|
||||||
|
for (Integer line : to_lines
|
||||||
|
) {
|
||||||
|
addGroupBuilder.addToLine(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (notify_message != null) {
|
||||||
|
addGroupBuilder.setNotifyContent(notify_message.toProtoMessageContent());
|
||||||
|
}
|
||||||
|
return addGroupBuilder.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -36,6 +36,7 @@ public interface APIPath {
|
|||||||
String Group_Member_List = "/admin/group/member/list";
|
String Group_Member_List = "/admin/group/member/list";
|
||||||
String Group_Member_Add = "/admin/group/member/add";
|
String Group_Member_Add = "/admin/group/member/add";
|
||||||
String Group_Member_Kickoff = "/admin/group/member/del";
|
String Group_Member_Kickoff = "/admin/group/member/del";
|
||||||
|
String Group_Set_Manager = "/admin/group/manager/set";
|
||||||
|
|
||||||
|
|
||||||
String Create_Channel = "/admin/channel/create";
|
String Create_Channel = "/admin/channel/create";
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// Generated by the protocol buffer compiler. DO NOT EDIT!
|
// Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
// source: wfcmessage.proto
|
// source: wfcmessage_community.proto
|
||||||
|
|
||||||
package cn.wildfirechat.proto;
|
package cn.wildfirechat.proto;
|
||||||
|
|
||||||
@@ -45256,6 +45256,16 @@ public final class WFCMessage {
|
|||||||
*/
|
*/
|
||||||
com.google.protobuf.ByteString
|
com.google.protobuf.ByteString
|
||||||
getAliasBytes();
|
getAliasBytes();
|
||||||
|
|
||||||
|
// optional int32 blacked = 5;
|
||||||
|
/**
|
||||||
|
* <code>optional int32 blacked = 5;</code>
|
||||||
|
*/
|
||||||
|
boolean hasBlacked();
|
||||||
|
/**
|
||||||
|
* <code>optional int32 blacked = 5;</code>
|
||||||
|
*/
|
||||||
|
int getBlacked();
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Protobuf type {@code Friend}
|
* Protobuf type {@code Friend}
|
||||||
@@ -45328,6 +45338,11 @@ public final class WFCMessage {
|
|||||||
alias_ = input.readBytes();
|
alias_ = input.readBytes();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 40: {
|
||||||
|
bitField0_ |= 0x00000010;
|
||||||
|
blacked_ = input.readInt32();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
|
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
|
||||||
@@ -45486,11 +45501,28 @@ public final class WFCMessage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// optional int32 blacked = 5;
|
||||||
|
public static final int BLACKED_FIELD_NUMBER = 5;
|
||||||
|
private int blacked_;
|
||||||
|
/**
|
||||||
|
* <code>optional int32 blacked = 5;</code>
|
||||||
|
*/
|
||||||
|
public boolean hasBlacked() {
|
||||||
|
return ((bitField0_ & 0x00000010) == 0x00000010);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional int32 blacked = 5;</code>
|
||||||
|
*/
|
||||||
|
public int getBlacked() {
|
||||||
|
return blacked_;
|
||||||
|
}
|
||||||
|
|
||||||
private void initFields() {
|
private void initFields() {
|
||||||
uid_ = "";
|
uid_ = "";
|
||||||
state_ = 0;
|
state_ = 0;
|
||||||
updateDt_ = 0L;
|
updateDt_ = 0L;
|
||||||
alias_ = "";
|
alias_ = "";
|
||||||
|
blacked_ = 0;
|
||||||
}
|
}
|
||||||
private byte memoizedIsInitialized = -1;
|
private byte memoizedIsInitialized = -1;
|
||||||
public final boolean isInitialized() {
|
public final boolean isInitialized() {
|
||||||
@@ -45528,6 +45560,9 @@ public final class WFCMessage {
|
|||||||
if (((bitField0_ & 0x00000008) == 0x00000008)) {
|
if (((bitField0_ & 0x00000008) == 0x00000008)) {
|
||||||
output.writeBytes(4, getAliasBytes());
|
output.writeBytes(4, getAliasBytes());
|
||||||
}
|
}
|
||||||
|
if (((bitField0_ & 0x00000010) == 0x00000010)) {
|
||||||
|
output.writeInt32(5, blacked_);
|
||||||
|
}
|
||||||
getUnknownFields().writeTo(output);
|
getUnknownFields().writeTo(output);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45553,6 +45588,10 @@ public final class WFCMessage {
|
|||||||
size += com.google.protobuf.CodedOutputStream
|
size += com.google.protobuf.CodedOutputStream
|
||||||
.computeBytesSize(4, getAliasBytes());
|
.computeBytesSize(4, getAliasBytes());
|
||||||
}
|
}
|
||||||
|
if (((bitField0_ & 0x00000010) == 0x00000010)) {
|
||||||
|
size += com.google.protobuf.CodedOutputStream
|
||||||
|
.computeInt32Size(5, blacked_);
|
||||||
|
}
|
||||||
size += getUnknownFields().getSerializedSize();
|
size += getUnknownFields().getSerializedSize();
|
||||||
memoizedSerializedSize = size;
|
memoizedSerializedSize = size;
|
||||||
return size;
|
return size;
|
||||||
@@ -45677,6 +45716,8 @@ public final class WFCMessage {
|
|||||||
bitField0_ = (bitField0_ & ~0x00000004);
|
bitField0_ = (bitField0_ & ~0x00000004);
|
||||||
alias_ = "";
|
alias_ = "";
|
||||||
bitField0_ = (bitField0_ & ~0x00000008);
|
bitField0_ = (bitField0_ & ~0x00000008);
|
||||||
|
blacked_ = 0;
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000010);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45721,6 +45762,10 @@ public final class WFCMessage {
|
|||||||
to_bitField0_ |= 0x00000008;
|
to_bitField0_ |= 0x00000008;
|
||||||
}
|
}
|
||||||
result.alias_ = alias_;
|
result.alias_ = alias_;
|
||||||
|
if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
|
||||||
|
to_bitField0_ |= 0x00000010;
|
||||||
|
}
|
||||||
|
result.blacked_ = blacked_;
|
||||||
result.bitField0_ = to_bitField0_;
|
result.bitField0_ = to_bitField0_;
|
||||||
onBuilt();
|
onBuilt();
|
||||||
return result;
|
return result;
|
||||||
@@ -45753,6 +45798,9 @@ public final class WFCMessage {
|
|||||||
alias_ = other.alias_;
|
alias_ = other.alias_;
|
||||||
onChanged();
|
onChanged();
|
||||||
}
|
}
|
||||||
|
if (other.hasBlacked()) {
|
||||||
|
setBlacked(other.getBlacked());
|
||||||
|
}
|
||||||
this.mergeUnknownFields(other.getUnknownFields());
|
this.mergeUnknownFields(other.getUnknownFields());
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@@ -46006,6 +46054,39 @@ public final class WFCMessage {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// optional int32 blacked = 5;
|
||||||
|
private int blacked_ ;
|
||||||
|
/**
|
||||||
|
* <code>optional int32 blacked = 5;</code>
|
||||||
|
*/
|
||||||
|
public boolean hasBlacked() {
|
||||||
|
return ((bitField0_ & 0x00000010) == 0x00000010);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional int32 blacked = 5;</code>
|
||||||
|
*/
|
||||||
|
public int getBlacked() {
|
||||||
|
return blacked_;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional int32 blacked = 5;</code>
|
||||||
|
*/
|
||||||
|
public Builder setBlacked(int value) {
|
||||||
|
bitField0_ |= 0x00000010;
|
||||||
|
blacked_ = value;
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional int32 blacked = 5;</code>
|
||||||
|
*/
|
||||||
|
public Builder clearBlacked() {
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000010);
|
||||||
|
blacked_ = 0;
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
// @@protoc_insertion_point(builder_scope:Friend)
|
// @@protoc_insertion_point(builder_scope:Friend)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60248,46 +60329,46 @@ public final class WFCMessage {
|
|||||||
"cope\030\001 \002(\005\022\013\n\003key\030\002 \002(\t\022\r\n\005value\030\003 \002(\t\"\032" +
|
"cope\030\001 \002(\005\022\013\n\003key\030\002 \002(\t\022\r\n\005value\030\003 \002(\t\"\032" +
|
||||||
"\n\007Version\022\017\n\007version\030\001 \002(\003\"8\n\024GetUserSet" +
|
"\n\007Version\022\017\n\007version\030\001 \002(\003\"8\n\024GetUserSet" +
|
||||||
"tingResult\022 \n\005entry\030\001 \003(\0132\021.UserSettingE" +
|
"tingResult\022 \n\005entry\030\001 \003(\0132\021.UserSettingE" +
|
||||||
"ntry\"F\n\006Friend\022\013\n\003uid\030\001 \002(\t\022\r\n\005state\030\002 \002" +
|
"ntry\"W\n\006Friend\022\013\n\003uid\030\001 \002(\t\022\r\n\005state\030\002 \002" +
|
||||||
"(\005\022\021\n\tupdate_dt\030\003 \002(\003\022\r\n\005alias\030\004 \001(\t\"*\n\020" +
|
"(\005\022\021\n\tupdate_dt\030\003 \002(\003\022\r\n\005alias\030\004 \001(\t\022\017\n\007" +
|
||||||
"GetFriendsResult\022\026\n\005entry\030\001 \003(\0132\007.Friend" +
|
"blacked\030\005 \001(\005\"*\n\020GetFriendsResult\022\026\n\005ent" +
|
||||||
"\"7\n\026GetFriendRequestResult\022\035\n\005entry\030\001 \003(",
|
"ry\030\001 \003(\0132\007.Friend\"7\n\026GetFriendRequestRes",
|
||||||
"\0132\016.FriendRequest\"\243\001\n\021ConnectAckPayload\022" +
|
"ult\022\035\n\005entry\030\001 \003(\0132\016.FriendRequest\"\243\001\n\021C" +
|
||||||
"\020\n\010msg_head\030\001 \001(\003\022\023\n\013friend_head\030\002 \001(\003\022\026" +
|
"onnectAckPayload\022\020\n\010msg_head\030\001 \001(\003\022\023\n\013fr" +
|
||||||
"\n\016friend_rq_head\030\003 \001(\003\022\024\n\014setting_head\030\004" +
|
"iend_head\030\002 \001(\003\022\026\n\016friend_rq_head\030\003 \001(\003\022" +
|
||||||
" \001(\003\022\021\n\tnode_addr\030\005 \001(\t\022\021\n\tnode_port\030\006 \001" +
|
"\024\n\014setting_head\030\004 \001(\003\022\021\n\tnode_addr\030\005 \001(\t" +
|
||||||
"(\005\022\023\n\013server_time\030\007 \001(\003\"P\n\rIMHttpWrapper" +
|
"\022\021\n\tnode_port\030\006 \001(\005\022\023\n\013server_time\030\007 \001(\003" +
|
||||||
"\022\r\n\005token\030\001 \002(\t\022\021\n\tclient_id\030\002 \002(\t\022\017\n\007re" +
|
"\"P\n\rIMHttpWrapper\022\r\n\005token\030\001 \002(\t\022\021\n\tclie" +
|
||||||
"quest\030\003 \002(\t\022\014\n\004data\030\004 \001(\014\"A\n\021SearchUserR" +
|
"nt_id\030\002 \002(\t\022\017\n\007request\030\003 \002(\t\022\014\n\004data\030\004 \001" +
|
||||||
"equest\022\017\n\007keyword\030\001 \002(\t\022\r\n\005fuzzy\030\002 \001(\005\022\014" +
|
"(\014\"A\n\021SearchUserRequest\022\017\n\007keyword\030\001 \002(\t" +
|
||||||
"\n\004page\030\003 \001(\005\"(\n\020SearchUserResult\022\024\n\005entr" +
|
"\022\r\n\005fuzzy\030\002 \001(\005\022\014\n\004page\030\003 \001(\005\"(\n\020SearchU" +
|
||||||
"y\030\001 \003(\0132\005.User\"@\n\026GetChatroomInfoRequest",
|
"serResult\022\024\n\005entry\030\001 \003(\0132\005.User\"@\n\026GetCh",
|
||||||
"\022\023\n\013chatroom_id\030\001 \002(\t\022\021\n\tupdate_dt\030\002 \001(\003" +
|
"atroomInfoRequest\022\023\n\013chatroom_id\030\001 \002(\t\022\021" +
|
||||||
"\"\227\001\n\014ChatroomInfo\022\r\n\005title\030\001 \002(\t\022\014\n\004desc" +
|
"\n\tupdate_dt\030\002 \001(\003\"\227\001\n\014ChatroomInfo\022\r\n\005ti" +
|
||||||
"\030\002 \001(\t\022\020\n\010portrait\030\003 \001(\t\022\024\n\014member_count" +
|
"tle\030\001 \002(\t\022\014\n\004desc\030\002 \001(\t\022\020\n\010portrait\030\003 \001(" +
|
||||||
"\030\004 \001(\005\022\021\n\tcreate_dt\030\005 \001(\003\022\021\n\tupdate_dt\030\006" +
|
"\t\022\024\n\014member_count\030\004 \001(\005\022\021\n\tcreate_dt\030\005 \001" +
|
||||||
" \001(\003\022\r\n\005extra\030\007 \001(\t\022\r\n\005state\030\010 \001(\005\"F\n\034Ge" +
|
"(\003\022\021\n\tupdate_dt\030\006 \001(\003\022\r\n\005extra\030\007 \001(\t\022\r\n\005" +
|
||||||
"tChatroomMemberInfoRequest\022\023\n\013chatroom_i" +
|
"state\030\010 \001(\005\"F\n\034GetChatroomMemberInfoRequ" +
|
||||||
"d\030\001 \002(\t\022\021\n\tmax_count\030\002 \001(\005\";\n\022ChatroomMe" +
|
"est\022\023\n\013chatroom_id\030\001 \002(\t\022\021\n\tmax_count\030\002 " +
|
||||||
"mberInfo\022\024\n\014member_count\030\001 \001(\005\022\017\n\007member" +
|
"\001(\005\";\n\022ChatroomMemberInfo\022\024\n\014member_coun" +
|
||||||
"s\030\002 \003(\t\"\026\n\010INT64Buf\022\n\n\002id\030\001 \002(\003\"4\n\023Notif" +
|
"t\030\001 \001(\005\022\017\n\007members\030\002 \003(\t\"\026\n\010INT64Buf\022\n\n\002" +
|
||||||
"yRecallMessage\022\n\n\002id\030\001 \002(\003\022\021\n\tfrom_user\030",
|
"id\030\001 \002(\003\"4\n\023NotifyRecallMessage\022\n\n\002id\030\001 ",
|
||||||
"\002 \002(\t\"/\n\020BlackUserRequest\022\013\n\003uid\030\001 \002(\t\022\016" +
|
"\002(\003\022\021\n\tfrom_user\030\002 \002(\t\"/\n\020BlackUserReque" +
|
||||||
"\n\006status\030\002 \002(\005\"\323\001\n\014RouteRequest\022\013\n\003app\030\001" +
|
"st\022\013\n\003uid\030\001 \002(\t\022\016\n\006status\030\002 \002(\005\"\323\001\n\014Rout" +
|
||||||
" \001(\t\022\020\n\010platform\030\002 \001(\005\022\021\n\tpush_type\030\003 \001(" +
|
"eRequest\022\013\n\003app\030\001 \001(\t\022\020\n\010platform\030\002 \001(\005\022" +
|
||||||
"\005\022\023\n\013device_name\030\004 \001(\t\022\026\n\016device_version" +
|
"\021\n\tpush_type\030\003 \001(\005\022\023\n\013device_name\030\004 \001(\t\022" +
|
||||||
"\030\005 \001(\t\022\022\n\nphone_name\030\006 \001(\t\022\020\n\010language\030\007" +
|
"\026\n\016device_version\030\005 \001(\t\022\022\n\nphone_name\030\006 " +
|
||||||
" \001(\t\022\024\n\014carrier_name\030\010 \001(\t\022\023\n\013app_versio" +
|
"\001(\t\022\020\n\010language\030\007 \001(\t\022\024\n\014carrier_name\030\010 " +
|
||||||
"n\030\t \001(\t\022\023\n\013sdk_version\030\n \001(\t\"D\n\rRouteRes" +
|
"\001(\t\022\023\n\013app_version\030\t \001(\t\022\023\n\013sdk_version\030" +
|
||||||
"ponse\022\014\n\004host\030\001 \002(\t\022\021\n\tlong_port\030\002 \002(\005\022\022" +
|
"\n \001(\t\"D\n\rRouteResponse\022\014\n\004host\030\001 \002(\t\022\021\n\t" +
|
||||||
"\n\nshort_port\030\003 \002(\005\"5\n\017GetTokenRequest\022\017\n" +
|
"long_port\030\002 \002(\005\022\022\n\nshort_port\030\003 \002(\005\"5\n\017G" +
|
||||||
"\007user_id\030\001 \002(\t\022\021\n\tclient_id\030\002 \002(\t\"\\\n\022Loa",
|
"etTokenRequest\022\017\n\007user_id\030\001 \002(\t\022\021\n\tclien",
|
||||||
"dRemoteMessages\022#\n\014conversation\030\001 \002(\0132\r." +
|
"t_id\030\002 \002(\t\"\\\n\022LoadRemoteMessages\022#\n\014conv" +
|
||||||
"Conversation\022\022\n\nbefore_uid\030\002 \002(\003\022\r\n\005coun" +
|
"ersation\030\001 \002(\0132\r.Conversation\022\022\n\nbefore_" +
|
||||||
"t\030\003 \002(\005\"a\n\020MultiCastMessage\022\021\n\tfrom_user" +
|
"uid\030\002 \002(\003\022\r\n\005count\030\003 \002(\005\"a\n\020MultiCastMes" +
|
||||||
"\030\001 \002(\t\022 \n\007content\030\002 \002(\0132\017.MessageContent" +
|
"sage\022\021\n\tfrom_user\030\001 \002(\t\022 \n\007content\030\002 \002(\013" +
|
||||||
"\022\n\n\002to\030\003 \003(\t\022\014\n\004line\030\004 \002(\005B#\n\025cn.wildfir" +
|
"2\017.MessageContent\022\n\n\002to\030\003 \003(\t\022\014\n\004line\030\004 " +
|
||||||
"echat.protoB\nWFCMessage"
|
"\002(\005B#\n\025cn.wildfirechat.protoB\nWFCMessage"
|
||||||
};
|
};
|
||||||
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
|
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
|
||||||
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
|
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
|
||||||
@@ -60617,7 +60698,7 @@ public final class WFCMessage {
|
|||||||
internal_static_Friend_fieldAccessorTable = new
|
internal_static_Friend_fieldAccessorTable = new
|
||||||
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
||||||
internal_static_Friend_descriptor,
|
internal_static_Friend_descriptor,
|
||||||
new java.lang.String[] { "Uid", "State", "UpdateDt", "Alias", });
|
new java.lang.String[] { "Uid", "State", "UpdateDt", "Alias", "Blacked", });
|
||||||
internal_static_GetFriendsResult_descriptor =
|
internal_static_GetFriendsResult_descriptor =
|
||||||
getDescriptor().getMessageTypes().get(54);
|
getDescriptor().getMessageTypes().get(54);
|
||||||
internal_static_GetFriendsResult_fieldAccessorTable = new
|
internal_static_GetFriendsResult_fieldAccessorTable = new
|
||||||
|
|||||||
@@ -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>0.29</version>
|
<version>0.31</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>distribution</artifactId>
|
<artifactId>distribution</artifactId>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<artifactId>wildfirechat-parent</artifactId>
|
<artifactId>wildfirechat-parent</artifactId>
|
||||||
|
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<version>0.29</version>
|
<version>0.31</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>
|
||||||
|
|||||||
+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>0.29</version>
|
<version>0.31</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
package cn.wildfirechat.sdk;
|
|
||||||
|
|
||||||
import cn.wildfirechat.common.APIPath;
|
|
||||||
import cn.wildfirechat.pojos.*;
|
|
||||||
import cn.wildfirechat.sdk.model.IMResult;
|
|
||||||
import cn.wildfirechat.sdk.utilities.AdminHttpUtils;
|
|
||||||
|
|
||||||
public class ChannelAdmin {
|
|
||||||
public static IMResult<OutputCreateChatroom> createChannel(InputCreateChatroom input) throws Exception {
|
|
||||||
String path = APIPath.Create_Chatroom;
|
|
||||||
return AdminHttpUtils.httpJsonPost(path, input, OutputCreateChatroom.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IMResult<Void> destroyChannel(String chatroomId) throws Exception {
|
|
||||||
String path = APIPath.Chatroom_Destroy;
|
|
||||||
InputDestoryChatroom input = new InputDestoryChatroom();
|
|
||||||
input.setChatroomId(chatroomId);
|
|
||||||
return AdminHttpUtils.httpJsonPost(path, input, Void.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IMResult<OutputGetChatroomInfo> getChannelInfo(String chatroomId) throws Exception {
|
|
||||||
String path = APIPath.Chatroom_Info;
|
|
||||||
InputGetChatroomInfo input = new InputGetChatroomInfo(chatroomId);
|
|
||||||
return AdminHttpUtils.httpJsonPost(path, input, OutputGetChatroomInfo.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -88,6 +88,20 @@ public class GroupAdmin {
|
|||||||
return AdminHttpUtils.httpJsonPost(path, addGroupMember, Void.class);
|
return AdminHttpUtils.httpJsonPost(path, addGroupMember, Void.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static IMResult<Void> setGroupManager(String operator, String groupId, List<String> groupMemberIds, boolean isManager, List<Integer> to_lines, MessagePayload notify_message) throws Exception {
|
||||||
|
String path = APIPath.Group_Set_Manager;
|
||||||
|
InputSetGroupManager addGroupMember = new InputSetGroupManager();
|
||||||
|
addGroupMember.setGroup_id(groupId);
|
||||||
|
addGroupMember.setMembers(groupMemberIds);
|
||||||
|
addGroupMember.setIs_manager(isManager);
|
||||||
|
addGroupMember.setOperator(operator);
|
||||||
|
addGroupMember.setTo_lines(to_lines);
|
||||||
|
addGroupMember.setNotify_message(notify_message);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, addGroupMember, Void.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static IMResult<Void> kickoffGroupMembers(String operator, String groupId, List<String> groupMemberIds, List<Integer> to_lines, MessagePayload notify_message) throws Exception {
|
public static IMResult<Void> kickoffGroupMembers(String operator, String groupId, List<String> groupMemberIds, List<Integer> to_lines, MessagePayload notify_message) throws Exception {
|
||||||
String path = APIPath.Group_Member_Kickoff;
|
String path = APIPath.Group_Member_Kickoff;
|
||||||
InputKickoffGroupMember kickoffGroupMember = new InputKickoffGroupMember();
|
InputKickoffGroupMember kickoffGroupMember = new InputKickoffGroupMember();
|
||||||
|
|||||||
@@ -268,6 +268,24 @@ public class Main {
|
|||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
voidIMResult = GroupAdmin.setGroupManager("user1", groupInfo.getTarget_id(), Arrays.asList("user4", "user5"), true, null, null);
|
||||||
|
if (voidIMResult != null && voidIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||||
|
System.out.println("set group manager success");
|
||||||
|
} else {
|
||||||
|
System.out.println("set group manager failure");
|
||||||
|
System.exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
voidIMResult = GroupAdmin.setGroupManager("user1", groupInfo.getTarget_id(), Arrays.asList("user4", "user5"), false, null, null);
|
||||||
|
if (voidIMResult != null && voidIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||||
|
System.out.println("cancel group manager success");
|
||||||
|
} else {
|
||||||
|
System.out.println("cancel group manager failure");
|
||||||
|
System.exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//***********************************************
|
//***********************************************
|
||||||
//**** 消息相关功能
|
//**** 消息相关功能
|
||||||
//***********************************************
|
//***********************************************
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
从github release处下载源码,或者从工程首页下载源码会编译失败,提示如下
|
||||||
|
```
|
||||||
|
[INFO] BUILD FAILURE
|
||||||
|
[INFO] ------------------------------------------------------------------------
|
||||||
|
[INFO] Total time: 51.504 s
|
||||||
|
[INFO] Finished at: 2019-11-04T20:27:21+08:00
|
||||||
|
[INFO] ------------------------------------------------------------------------
|
||||||
|
[ERROR] Failed to execute goal pl.project13.maven:git-commit-id-plugin:2.1.5:revision (default) on project distribution: .git directory could not be found! Please specify a valid [dotGitDirectory] in your pom.xml -> [Help 1]
|
||||||
|
[ERROR]
|
||||||
|
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
|
||||||
|
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
|
||||||
|
|
||||||
|
```
|
||||||
|
原因是项目中有个git的插件需要读取当前工程的提交信息,github打包的源码没有git信息,所以就打包失败。
|
||||||
|
解决办法:git clone下载
|
||||||
Reference in New Issue
Block a user