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 |
@@ -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>
|
||||
<artifactId>wildfirechat-parent</artifactId>
|
||||
<groupId>cn.wildfirechat</groupId>
|
||||
<version>0.29</version>
|
||||
<version>0.31</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>moquette-broker</artifactId>
|
||||
@@ -161,7 +161,7 @@
|
||||
<dependency>
|
||||
<groupId>org.eclipse.paho</groupId>
|
||||
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
|
||||
<version>1.0.2</version>
|
||||
<version>1.2.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ public class FriendRelationGetAction extends AdminAction {
|
||||
public boolean action(Request request, Response response) {
|
||||
if (request.getNettyRequest() instanceof FullHttpRequest) {
|
||||
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<>();
|
||||
for (FriendData data : dataList) {
|
||||
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 alias;
|
||||
private int state;
|
||||
private int blacked;
|
||||
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.friendUid = friendUid;
|
||||
this.alias = alias;
|
||||
this.state = state;
|
||||
this.blacked = blacked;
|
||||
this.timestamp = timestamp;
|
||||
}
|
||||
|
||||
@@ -61,6 +63,14 @@ public class FriendData implements Serializable {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
public int getBlacked() {
|
||||
return blacked;
|
||||
}
|
||||
|
||||
public void setBlacked(int blacked) {
|
||||
this.blacked = blacked;
|
||||
}
|
||||
|
||||
public long getTimestamp() {
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
@@ -22,11 +22,11 @@ import java.util.List;
|
||||
public class FriendPullHandler extends IMHandler<WFCMessage.Version> {
|
||||
@Override
|
||||
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();
|
||||
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())) {
|
||||
builder1.setAlias(data.getAlias());
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@ import com.xiaoleilu.loServer.model.FriendData;
|
||||
import io.moquette.spi.ClientSession;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import sun.misc.BASE64Encoder;
|
||||
import win.liyufan.im.DBUtil;
|
||||
import win.liyufan.im.MessageBundle;
|
||||
import win.liyufan.im.MessageShardingUtil;
|
||||
@@ -57,8 +56,6 @@ public class DatabaseStore {
|
||||
|
||||
statement.setString(1, userId);
|
||||
|
||||
statement.executeQuery();
|
||||
|
||||
rs = statement.executeQuery();
|
||||
while (rs.next()) {
|
||||
int index = 1;
|
||||
@@ -173,7 +170,7 @@ public class DatabaseStore {
|
||||
if (buzzy) {
|
||||
sql += " where (`_display_name` like ? or `_name` = ? or `_mobile` = ?) ";
|
||||
} else {
|
||||
sql += " where (``_name` = ? or `_mobile` = ?) ";
|
||||
sql += " where (`_name` = ? or `_mobile` = ?) ";
|
||||
}
|
||||
|
||||
sql += " and _type <> 2"; //can search normal user(0) and robot(1), can not search things
|
||||
@@ -353,7 +350,7 @@ public class DatabaseStore {
|
||||
|
||||
try {
|
||||
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);
|
||||
|
||||
int index;
|
||||
@@ -378,6 +375,9 @@ public class DatabaseStore {
|
||||
int intvalue = rs.getInt(index++);
|
||||
builder.setState(intvalue);
|
||||
|
||||
intvalue = rs.getInt(index++);
|
||||
builder.setBlacked(intvalue);
|
||||
|
||||
long longvalue = rs.getLong(index++);
|
||||
builder.setTimestamp(longvalue);
|
||||
|
||||
@@ -1631,8 +1631,7 @@ public class DatabaseStore {
|
||||
|
||||
try {
|
||||
MessageDigest md5 = MessageDigest.getInstance("MD5");
|
||||
BASE64Encoder base64en = new BASE64Encoder();
|
||||
String passwdMd5 = base64en.encode(md5.digest(password.getBytes("utf-8")));
|
||||
String passwdMd5 = Base64.getEncoder().encodeToString(md5.digest(password.getBytes("utf-8")));
|
||||
statement.setString(index, passwdMd5);
|
||||
} catch (Exception e) {
|
||||
statement.setString(index, "");
|
||||
@@ -2143,7 +2142,7 @@ public class DatabaseStore {
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
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);
|
||||
|
||||
|
||||
@@ -2157,9 +2156,10 @@ public class DatabaseStore {
|
||||
String uid = rs.getString(1);
|
||||
String alias = rs.getString(2);
|
||||
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);
|
||||
}
|
||||
return out;
|
||||
@@ -2309,10 +2309,11 @@ public class DatabaseStore {
|
||||
PreparedStatement statement = null;
|
||||
try {
|
||||
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 " +
|
||||
"`_alias` = ?," +
|
||||
"`_state` = ?," +
|
||||
"`_blacked` = ?," +
|
||||
"`_dt` = ?";
|
||||
|
||||
|
||||
@@ -2322,9 +2323,11 @@ public class DatabaseStore {
|
||||
statement.setString(index++, request.getFriendUid());
|
||||
statement.setString(index++, request.getAlias());
|
||||
statement.setInt(index++, request.getState());
|
||||
statement.setInt(index++, request.getBlacked());
|
||||
statement.setLong(index++, request.getTimestamp());
|
||||
statement.setString(index++, request.getAlias());
|
||||
statement.setInt(index++, request.getState());
|
||||
statement.setInt(index++, request.getBlacked());
|
||||
statement.setLong(index++, request.getTimestamp());
|
||||
int count = statement.executeUpdate();
|
||||
LOG.info("Update rows {}", count);
|
||||
|
||||
@@ -30,9 +30,9 @@ import io.moquette.spi.IMatchingCondition;
|
||||
import io.moquette.spi.IMessagesStore;
|
||||
import io.moquette.spi.security.Tokenor;
|
||||
import io.moquette.spi.impl.subscriptions.Topic;
|
||||
import io.netty.handler.codec.mqtt.MqttVersion;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import sun.misc.BASE64Encoder;
|
||||
import win.liyufan.im.*;
|
||||
|
||||
import java.security.MessageDigest;
|
||||
@@ -349,7 +349,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
||||
}
|
||||
|
||||
size += bundle.getMessage().getSerializedSize();
|
||||
if (size >= 1 * 1024 * 1024) { //3M
|
||||
if (size >= 512 * 1024) { //3M
|
||||
break;
|
||||
}
|
||||
builder.addMessage(bundle.getMessage());
|
||||
@@ -1039,25 +1039,31 @@ public class MemoryMessagesStore implements IMessagesStore {
|
||||
|
||||
//check the new owner is in member list? is that necessary?
|
||||
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);
|
||||
|
||||
MultiMap<String, WFCMessage.GroupMember> groupMembers = hzInstance.getMultiMap(GROUP_MEMBERS);
|
||||
Collection<WFCMessage.GroupMember> members = groupMembers.get(groupId);
|
||||
if (members == null || members.size() == 0) {
|
||||
members = loadGroupMemberFromDB(hzInstance, groupId);
|
||||
}
|
||||
int modifyMemeberCount = 0;
|
||||
for (WFCMessage.GroupMember member : members) {
|
||||
if (modifyMemeberCount == 2) {
|
||||
break;
|
||||
}
|
||||
if (newOwner.equals(member.getMemberId())) {
|
||||
groupMembers.remove(groupId, member);
|
||||
member = member.toBuilder().setType(GroupMemberType_Owner).setUpdateDt(updateDt).build();
|
||||
databaseStore.persistGroupMember(groupId, Arrays.asList(member));
|
||||
groupMembers.put(groupId, member);
|
||||
modifyMemeberCount++;
|
||||
} else if(member.getType() == GroupMemberType_Owner) {
|
||||
groupMembers.remove(groupId, member);
|
||||
member = member.toBuilder().setType(GroupMemberType_Normal).setUpdateDt(updateDt).build();
|
||||
databaseStore.persistGroupMember(groupId, Arrays.asList(member));
|
||||
groupMembers.put(groupId, member);
|
||||
modifyMemeberCount++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1556,7 +1562,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
||||
|
||||
for (FriendData friendData : friendDatas) {
|
||||
if (friendData.getFriendUid().equals(userId)) {
|
||||
if (friendData.getState() == 2) {
|
||||
if (friendData.getBlacked() == 1) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
@@ -1592,8 +1598,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
||||
String pwd_md5 = rs.getString(2);
|
||||
try {
|
||||
MessageDigest md5 = MessageDigest.getInstance("MD5");
|
||||
BASE64Encoder base64en = new BASE64Encoder();
|
||||
String passwdMd5 = base64en.encode(md5.digest(password.getBytes("utf-8")));
|
||||
String passwdMd5 = Base64.getEncoder().encodeToString(md5.digest(password.getBytes("utf-8")));
|
||||
if (passwdMd5.equals(pwd_md5)) {
|
||||
LOG.info("login success userName={}, userId={}", name, uid);
|
||||
userIdRet.add(uid);
|
||||
@@ -1648,7 +1653,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
||||
}
|
||||
|
||||
@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>();
|
||||
|
||||
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
|
||||
@@ -1658,9 +1663,26 @@ public class MemoryMessagesStore implements IMessagesStore {
|
||||
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) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
.newBuilder()
|
||||
.setFromUid(userId)
|
||||
@@ -1766,7 +1806,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
||||
}
|
||||
}
|
||||
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 {
|
||||
friendData1.setState(request.getStatus());
|
||||
friendData1.setTimestamp(System.currentTimeMillis());
|
||||
@@ -1788,7 +1828,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
||||
}
|
||||
}
|
||||
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 {
|
||||
friendsMap.remove(request.getTargetUid(), friendData2);
|
||||
friendData2.setState(request.getStatus());
|
||||
@@ -1829,10 +1869,10 @@ public class MemoryMessagesStore implements IMessagesStore {
|
||||
databaseStore.persistOrUpdateFriendRequest(existRequest);
|
||||
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);
|
||||
|
||||
FriendData friendData2 = new FriendData(request.getTargetUid(), userId, "", 0, friendData1.getTimestamp());
|
||||
FriendData friendData2 = new FriendData(request.getTargetUid(), userId, "", 0, 0, friendData1.getTimestamp());
|
||||
databaseStore.persistOrUpdateFriendData(friendData2);
|
||||
|
||||
requestMap.remove(userId);
|
||||
@@ -1854,6 +1894,12 @@ public class MemoryMessagesStore implements IMessagesStore {
|
||||
|
||||
@Override
|
||||
public ErrorCode blackUserRequest(String fromUser, String targetUserId, int state, long[] heads) {
|
||||
if (state == 2) {
|
||||
state = 1;
|
||||
} else {
|
||||
state = 0;
|
||||
}
|
||||
|
||||
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
|
||||
MultiMap<String, FriendData> friendsMap = hzInstance.getMultiMap(USER_FRIENDS);
|
||||
|
||||
@@ -1871,9 +1917,9 @@ public class MemoryMessagesStore implements IMessagesStore {
|
||||
}
|
||||
|
||||
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());
|
||||
|
||||
|
||||
@@ -2121,7 +2167,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
||||
public boolean getUserPushHiddenDetail(String userId) {
|
||||
Boolean hidden = userPushHiddenDetail.get(userId);
|
||||
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")) {
|
||||
hidden = false;
|
||||
} else {
|
||||
@@ -2320,6 +2366,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
||||
words) {
|
||||
databaseStore.deleteSensitiveWord(word);
|
||||
}
|
||||
lastUpdateSensitiveTime = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -153,7 +153,7 @@ public interface IMessagesStore {
|
||||
ErrorCode verifyToken(String userId, String token, List<String> serverIPs, List<Integer> ports);
|
||||
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);
|
||||
|
||||
ErrorCode saveAddFriendRequest(String userId, WFCMessage.AddFriendRequest request, long[] head);
|
||||
|
||||
@@ -142,9 +142,8 @@ public class ProtocolProcessor {
|
||||
String clientId = payload.clientIdentifier();
|
||||
LOG.info("Processing CONNECT message. CId={}, username={}", clientId, payload.userName());
|
||||
|
||||
if (msg.variableHeader().version() != MqttVersion.MQTT_3_1.protocolLevel()
|
||||
&& msg.variableHeader().version() != MqttVersion.MQTT_3_1_1.protocolLevel()
|
||||
&& msg.variableHeader().version() != MqttVersion.Wildfire_1.protocolLevel()) {
|
||||
if (msg.variableHeader().version() < MqttVersion.MQTT_3_1_1.protocolLevel() ||
|
||||
msg.variableHeader().version() >= MqttVersion.Wildfire_Max.protocolLevel()) {
|
||||
MqttConnAckMessage badProto = connAck(CONNECTION_REFUSED_UNACCEPTABLE_PROTOCOL_VERSION);
|
||||
|
||||
LOG.error("MQTT protocol version is not valid. CId={}", clientId);
|
||||
|
||||
@@ -178,7 +178,7 @@ public class Qos1PublishHandler extends QosPublishHandler {
|
||||
} else {
|
||||
MemorySessionStore.Session session = m_sessionStore.getSession(clientID);
|
||||
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();
|
||||
GZIPOutputStream gzip;
|
||||
try {
|
||||
|
||||
@@ -43,7 +43,7 @@ final class MqttCodecUtil {
|
||||
return clientId != null && clientId.length() >= MIN_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
|
||||
// that contain more than 23 encoded bytes. And, The Server MAY allow zero-length ClientId.
|
||||
return clientId != null;
|
||||
|
||||
@@ -223,7 +223,7 @@ public final class MqttDecoder extends ReplayingDecoder<DecoderState> {
|
||||
final int willQos = (b1 & 0x18) >> 3;
|
||||
final boolean willFlag = (b1 & 0x04) == 0x04;
|
||||
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;
|
||||
if (!zeroReservedFlag) {
|
||||
// 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 {
|
||||
MQTT_3_1("MQIsdp", (byte) 3),
|
||||
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 byte level;
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>wildfirechat-parent</artifactId>
|
||||
<groupId>cn.wildfirechat</groupId>
|
||||
<version>0.29</version>
|
||||
<version>0.31</version>
|
||||
</parent>
|
||||
<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_Add = "/admin/group/member/add";
|
||||
String Group_Member_Kickoff = "/admin/group/member/del";
|
||||
String Group_Set_Manager = "/admin/group/manager/set";
|
||||
|
||||
|
||||
String Create_Channel = "/admin/channel/create";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
// source: wfcmessage.proto
|
||||
// source: wfcmessage_community.proto
|
||||
|
||||
package cn.wildfirechat.proto;
|
||||
|
||||
@@ -45256,6 +45256,16 @@ public final class WFCMessage {
|
||||
*/
|
||||
com.google.protobuf.ByteString
|
||||
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}
|
||||
@@ -45328,6 +45338,11 @@ public final class WFCMessage {
|
||||
alias_ = input.readBytes();
|
||||
break;
|
||||
}
|
||||
case 40: {
|
||||
bitField0_ |= 0x00000010;
|
||||
blacked_ = input.readInt32();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} 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() {
|
||||
uid_ = "";
|
||||
state_ = 0;
|
||||
updateDt_ = 0L;
|
||||
alias_ = "";
|
||||
blacked_ = 0;
|
||||
}
|
||||
private byte memoizedIsInitialized = -1;
|
||||
public final boolean isInitialized() {
|
||||
@@ -45528,6 +45560,9 @@ public final class WFCMessage {
|
||||
if (((bitField0_ & 0x00000008) == 0x00000008)) {
|
||||
output.writeBytes(4, getAliasBytes());
|
||||
}
|
||||
if (((bitField0_ & 0x00000010) == 0x00000010)) {
|
||||
output.writeInt32(5, blacked_);
|
||||
}
|
||||
getUnknownFields().writeTo(output);
|
||||
}
|
||||
|
||||
@@ -45553,6 +45588,10 @@ public final class WFCMessage {
|
||||
size += com.google.protobuf.CodedOutputStream
|
||||
.computeBytesSize(4, getAliasBytes());
|
||||
}
|
||||
if (((bitField0_ & 0x00000010) == 0x00000010)) {
|
||||
size += com.google.protobuf.CodedOutputStream
|
||||
.computeInt32Size(5, blacked_);
|
||||
}
|
||||
size += getUnknownFields().getSerializedSize();
|
||||
memoizedSerializedSize = size;
|
||||
return size;
|
||||
@@ -45677,6 +45716,8 @@ public final class WFCMessage {
|
||||
bitField0_ = (bitField0_ & ~0x00000004);
|
||||
alias_ = "";
|
||||
bitField0_ = (bitField0_ & ~0x00000008);
|
||||
blacked_ = 0;
|
||||
bitField0_ = (bitField0_ & ~0x00000010);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -45721,6 +45762,10 @@ public final class WFCMessage {
|
||||
to_bitField0_ |= 0x00000008;
|
||||
}
|
||||
result.alias_ = alias_;
|
||||
if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
|
||||
to_bitField0_ |= 0x00000010;
|
||||
}
|
||||
result.blacked_ = blacked_;
|
||||
result.bitField0_ = to_bitField0_;
|
||||
onBuilt();
|
||||
return result;
|
||||
@@ -45753,6 +45798,9 @@ public final class WFCMessage {
|
||||
alias_ = other.alias_;
|
||||
onChanged();
|
||||
}
|
||||
if (other.hasBlacked()) {
|
||||
setBlacked(other.getBlacked());
|
||||
}
|
||||
this.mergeUnknownFields(other.getUnknownFields());
|
||||
return this;
|
||||
}
|
||||
@@ -46006,6 +46054,39 @@ public final class WFCMessage {
|
||||
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)
|
||||
}
|
||||
|
||||
@@ -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" +
|
||||
"\n\007Version\022\017\n\007version\030\001 \002(\003\"8\n\024GetUserSet" +
|
||||
"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" +
|
||||
"(\005\022\021\n\tupdate_dt\030\003 \002(\003\022\r\n\005alias\030\004 \001(\t\"*\n\020" +
|
||||
"GetFriendsResult\022\026\n\005entry\030\001 \003(\0132\007.Friend" +
|
||||
"\"7\n\026GetFriendRequestResult\022\035\n\005entry\030\001 \003(",
|
||||
"\0132\016.FriendRequest\"\243\001\n\021ConnectAckPayload\022" +
|
||||
"\020\n\010msg_head\030\001 \001(\003\022\023\n\013friend_head\030\002 \001(\003\022\026" +
|
||||
"\n\016friend_rq_head\030\003 \001(\003\022\024\n\014setting_head\030\004" +
|
||||
" \001(\003\022\021\n\tnode_addr\030\005 \001(\t\022\021\n\tnode_port\030\006 \001" +
|
||||
"(\005\022\023\n\013server_time\030\007 \001(\003\"P\n\rIMHttpWrapper" +
|
||||
"\022\r\n\005token\030\001 \002(\t\022\021\n\tclient_id\030\002 \002(\t\022\017\n\007re" +
|
||||
"quest\030\003 \002(\t\022\014\n\004data\030\004 \001(\014\"A\n\021SearchUserR" +
|
||||
"equest\022\017\n\007keyword\030\001 \002(\t\022\r\n\005fuzzy\030\002 \001(\005\022\014" +
|
||||
"\n\004page\030\003 \001(\005\"(\n\020SearchUserResult\022\024\n\005entr" +
|
||||
"y\030\001 \003(\0132\005.User\"@\n\026GetChatroomInfoRequest",
|
||||
"\022\023\n\013chatroom_id\030\001 \002(\t\022\021\n\tupdate_dt\030\002 \001(\003" +
|
||||
"\"\227\001\n\014ChatroomInfo\022\r\n\005title\030\001 \002(\t\022\014\n\004desc" +
|
||||
"\030\002 \001(\t\022\020\n\010portrait\030\003 \001(\t\022\024\n\014member_count" +
|
||||
"\030\004 \001(\005\022\021\n\tcreate_dt\030\005 \001(\003\022\021\n\tupdate_dt\030\006" +
|
||||
" \001(\003\022\r\n\005extra\030\007 \001(\t\022\r\n\005state\030\010 \001(\005\"F\n\034Ge" +
|
||||
"tChatroomMemberInfoRequest\022\023\n\013chatroom_i" +
|
||||
"d\030\001 \002(\t\022\021\n\tmax_count\030\002 \001(\005\";\n\022ChatroomMe" +
|
||||
"mberInfo\022\024\n\014member_count\030\001 \001(\005\022\017\n\007member" +
|
||||
"s\030\002 \003(\t\"\026\n\010INT64Buf\022\n\n\002id\030\001 \002(\003\"4\n\023Notif" +
|
||||
"yRecallMessage\022\n\n\002id\030\001 \002(\003\022\021\n\tfrom_user\030",
|
||||
"\002 \002(\t\"/\n\020BlackUserRequest\022\013\n\003uid\030\001 \002(\t\022\016" +
|
||||
"\n\006status\030\002 \002(\005\"\323\001\n\014RouteRequest\022\013\n\003app\030\001" +
|
||||
" \001(\t\022\020\n\010platform\030\002 \001(\005\022\021\n\tpush_type\030\003 \001(" +
|
||||
"\005\022\023\n\013device_name\030\004 \001(\t\022\026\n\016device_version" +
|
||||
"\030\005 \001(\t\022\022\n\nphone_name\030\006 \001(\t\022\020\n\010language\030\007" +
|
||||
" \001(\t\022\024\n\014carrier_name\030\010 \001(\t\022\023\n\013app_versio" +
|
||||
"n\030\t \001(\t\022\023\n\013sdk_version\030\n \001(\t\"D\n\rRouteRes" +
|
||||
"ponse\022\014\n\004host\030\001 \002(\t\022\021\n\tlong_port\030\002 \002(\005\022\022" +
|
||||
"\n\nshort_port\030\003 \002(\005\"5\n\017GetTokenRequest\022\017\n" +
|
||||
"\007user_id\030\001 \002(\t\022\021\n\tclient_id\030\002 \002(\t\"\\\n\022Loa",
|
||||
"dRemoteMessages\022#\n\014conversation\030\001 \002(\0132\r." +
|
||||
"Conversation\022\022\n\nbefore_uid\030\002 \002(\003\022\r\n\005coun" +
|
||||
"t\030\003 \002(\005\"a\n\020MultiCastMessage\022\021\n\tfrom_user" +
|
||||
"\030\001 \002(\t\022 \n\007content\030\002 \002(\0132\017.MessageContent" +
|
||||
"\022\n\n\002to\030\003 \003(\t\022\014\n\004line\030\004 \002(\005B#\n\025cn.wildfir" +
|
||||
"echat.protoB\nWFCMessage"
|
||||
"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\022\017\n\007" +
|
||||
"blacked\030\005 \001(\005\"*\n\020GetFriendsResult\022\026\n\005ent" +
|
||||
"ry\030\001 \003(\0132\007.Friend\"7\n\026GetFriendRequestRes",
|
||||
"ult\022\035\n\005entry\030\001 \003(\0132\016.FriendRequest\"\243\001\n\021C" +
|
||||
"onnectAckPayload\022\020\n\010msg_head\030\001 \001(\003\022\023\n\013fr" +
|
||||
"iend_head\030\002 \001(\003\022\026\n\016friend_rq_head\030\003 \001(\003\022" +
|
||||
"\024\n\014setting_head\030\004 \001(\003\022\021\n\tnode_addr\030\005 \001(\t" +
|
||||
"\022\021\n\tnode_port\030\006 \001(\005\022\023\n\013server_time\030\007 \001(\003" +
|
||||
"\"P\n\rIMHttpWrapper\022\r\n\005token\030\001 \002(\t\022\021\n\tclie" +
|
||||
"nt_id\030\002 \002(\t\022\017\n\007request\030\003 \002(\t\022\014\n\004data\030\004 \001" +
|
||||
"(\014\"A\n\021SearchUserRequest\022\017\n\007keyword\030\001 \002(\t" +
|
||||
"\022\r\n\005fuzzy\030\002 \001(\005\022\014\n\004page\030\003 \001(\005\"(\n\020SearchU" +
|
||||
"serResult\022\024\n\005entry\030\001 \003(\0132\005.User\"@\n\026GetCh",
|
||||
"atroomInfoRequest\022\023\n\013chatroom_id\030\001 \002(\t\022\021" +
|
||||
"\n\tupdate_dt\030\002 \001(\003\"\227\001\n\014ChatroomInfo\022\r\n\005ti" +
|
||||
"tle\030\001 \002(\t\022\014\n\004desc\030\002 \001(\t\022\020\n\010portrait\030\003 \001(" +
|
||||
"\t\022\024\n\014member_count\030\004 \001(\005\022\021\n\tcreate_dt\030\005 \001" +
|
||||
"(\003\022\021\n\tupdate_dt\030\006 \001(\003\022\r\n\005extra\030\007 \001(\t\022\r\n\005" +
|
||||
"state\030\010 \001(\005\"F\n\034GetChatroomMemberInfoRequ" +
|
||||
"est\022\023\n\013chatroom_id\030\001 \002(\t\022\021\n\tmax_count\030\002 " +
|
||||
"\001(\005\";\n\022ChatroomMemberInfo\022\024\n\014member_coun" +
|
||||
"t\030\001 \001(\005\022\017\n\007members\030\002 \003(\t\"\026\n\010INT64Buf\022\n\n\002" +
|
||||
"id\030\001 \002(\003\"4\n\023NotifyRecallMessage\022\n\n\002id\030\001 ",
|
||||
"\002(\003\022\021\n\tfrom_user\030\002 \002(\t\"/\n\020BlackUserReque" +
|
||||
"st\022\013\n\003uid\030\001 \002(\t\022\016\n\006status\030\002 \002(\005\"\323\001\n\014Rout" +
|
||||
"eRequest\022\013\n\003app\030\001 \001(\t\022\020\n\010platform\030\002 \001(\005\022" +
|
||||
"\021\n\tpush_type\030\003 \001(\005\022\023\n\013device_name\030\004 \001(\t\022" +
|
||||
"\026\n\016device_version\030\005 \001(\t\022\022\n\nphone_name\030\006 " +
|
||||
"\001(\t\022\020\n\010language\030\007 \001(\t\022\024\n\014carrier_name\030\010 " +
|
||||
"\001(\t\022\023\n\013app_version\030\t \001(\t\022\023\n\013sdk_version\030" +
|
||||
"\n \001(\t\"D\n\rRouteResponse\022\014\n\004host\030\001 \002(\t\022\021\n\t" +
|
||||
"long_port\030\002 \002(\005\022\022\n\nshort_port\030\003 \002(\005\"5\n\017G" +
|
||||
"etTokenRequest\022\017\n\007user_id\030\001 \002(\t\022\021\n\tclien",
|
||||
"t_id\030\002 \002(\t\"\\\n\022LoadRemoteMessages\022#\n\014conv" +
|
||||
"ersation\030\001 \002(\0132\r.Conversation\022\022\n\nbefore_" +
|
||||
"uid\030\002 \002(\003\022\r\n\005count\030\003 \002(\005\"a\n\020MultiCastMes" +
|
||||
"sage\022\021\n\tfrom_user\030\001 \002(\t\022 \n\007content\030\002 \002(\013" +
|
||||
"2\017.MessageContent\022\n\n\002to\030\003 \003(\t\022\014\n\004line\030\004 " +
|
||||
"\002(\005B#\n\025cn.wildfirechat.protoB\nWFCMessage"
|
||||
};
|
||||
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
|
||||
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
|
||||
@@ -60617,7 +60698,7 @@ public final class WFCMessage {
|
||||
internal_static_Friend_fieldAccessorTable = new
|
||||
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
||||
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 =
|
||||
getDescriptor().getMessageTypes().get(54);
|
||||
internal_static_GetFriendsResult_fieldAccessorTable = new
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<!--<relativePath>../pom.xml</relativePath>-->
|
||||
<artifactId>wildfirechat-parent</artifactId>
|
||||
<groupId>cn.wildfirechat</groupId>
|
||||
<version>0.29</version>
|
||||
<version>0.31</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>distribution</artifactId>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<artifactId>wildfirechat-parent</artifactId>
|
||||
|
||||
<packaging>pom</packaging>
|
||||
<version>0.29</version>
|
||||
<version>0.31</version>
|
||||
<name>Wildfire Chat</name>
|
||||
<description>Wildfire Chat Server</description>
|
||||
<inceptionYear>2019</inceptionYear>
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>wildfirechat-parent</artifactId>
|
||||
<groupId>cn.wildfirechat</groupId>
|
||||
<version>0.29</version>
|
||||
<version>0.31</version>
|
||||
</parent>
|
||||
<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);
|
||||
}
|
||||
|
||||
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 {
|
||||
String path = APIPath.Group_Member_Kickoff;
|
||||
InputKickoffGroupMember kickoffGroupMember = new InputKickoffGroupMember();
|
||||
|
||||
@@ -268,6 +268,24 @@ public class Main {
|
||||
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