From 7888c1e0d96396d022897baa5a3b81d1d545e45a Mon Sep 17 00:00:00 2001 From: "heavyrain.lee" Date: Sat, 7 Mar 2020 10:27:23 +0800 Subject: [PATCH] add extran in friendData --- .../action/admin/FriendRelationAction.java | 2 +- .../xiaoleilu/loServer/model/FriendData.java | 12 +++++++++++- .../io/moquette/persistence/DatabaseStore.java | 18 ++++++++++++------ .../persistence/MemoryMessagesStore.java | 11 ++++++----- .../wildfirechat/pojos/InputFriendRequest.java | 9 +++++++++ .../main/java/cn/wildfirechat/sdk/Main.java | 2 +- .../cn/wildfirechat/sdk/RelationAdmin.java | 3 ++- 7 files changed, 42 insertions(+), 15 deletions(-) diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/FriendRelationAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/FriendRelationAction.java index 510462ad..6a765707 100755 --- a/broker/src/main/java/com/xiaoleilu/loServer/action/admin/FriendRelationAction.java +++ b/broker/src/main/java/com/xiaoleilu/loServer/action/admin/FriendRelationAction.java @@ -46,7 +46,7 @@ public class FriendRelationAction extends AdminAction { && !StringUtil.isNullOrEmpty(friendAdd.getUserId()) && !StringUtil.isNullOrEmpty(friendAdd.getFriendUid()) ) { - WFCMessage.HandleFriendRequest friendRequest = WFCMessage.HandleFriendRequest.newBuilder().setTargetUid(friendAdd.getFriendUid()).setStatus(friendAdd.getStatus()).build(); + WFCMessage.HandleFriendRequest friendRequest = WFCMessage.HandleFriendRequest.newBuilder().setTargetUid(friendAdd.getFriendUid()).setStatus(friendAdd.getStatus()).setExtra(friendAdd.getExtra()).build(); RPCCenter.getInstance().sendRequest(friendAdd.getUserId(), null, IMTopic.HandleFriendRequestTopic, friendRequest.toByteArray(), friendAdd.getFriendUid(), TargetEntry.Type.TARGET_TYPE_USER, new RPCCenter.Callback() { @Override public void onSuccess(byte[] result) { diff --git a/broker/src/main/java/com/xiaoleilu/loServer/model/FriendData.java b/broker/src/main/java/com/xiaoleilu/loServer/model/FriendData.java index c2b60ee6..7e0b354b 100755 --- a/broker/src/main/java/com/xiaoleilu/loServer/model/FriendData.java +++ b/broker/src/main/java/com/xiaoleilu/loServer/model/FriendData.java @@ -14,15 +14,17 @@ public class FriendData implements Serializable { private String userId; private String friendUid; private String alias; + private String extra; private int state; private int blacked; private long timestamp; - public FriendData(String userId, String friendUid, String alias, int state, int blacked, long timestamp) { + public FriendData(String userId, String friendUid, String alias, String extra, int state, int blacked, long timestamp) { this.userId = userId; this.friendUid = friendUid; this.alias = alias; + this.extra = extra; this.state = state; this.blacked = blacked; this.timestamp = timestamp; @@ -55,6 +57,14 @@ public class FriendData implements Serializable { this.alias = alias; } + public String getExtra() { + return extra; + } + + public void setExtra(String extra) { + this.extra = extra; + } + public int getState() { return state; } diff --git a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java index 8d64f434..ac7790d1 100644 --- a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java +++ b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java @@ -380,7 +380,7 @@ public class DatabaseStore { try { connection = DBUtil.getConnection(); - String sql = "select `_uid`, `_friend_uid`, `_alias`, `_state`, `_blacked`, `_dt` from t_friend"; + String sql = "select `_uid`, `_friend_uid`, `_alias`, `_state`, `_blacked`, `_dt`, `_extra` from t_friend"; statement = connection.prepareStatement(sql); int index; @@ -411,6 +411,8 @@ public class DatabaseStore { long longvalue = rs.getLong(index++); builder.setTimestamp(longvalue); + builder.setExtra(rs.getString(index++)); + friendsMap.put(builder.getUserId(), builder); } } catch (SQLException e) { @@ -2501,7 +2503,7 @@ public class DatabaseStore { ResultSet rs = null; try { connection = DBUtil.getConnection(); - String sql = "select `_friend_uid`, `_alias`, `_state`, `_blacked`, `_dt` from t_friend where `_uid` = ?"; + String sql = "select `_friend_uid`, `_alias`, `_state`, `_blacked`, `_dt`, `_extra` from t_friend where `_uid` = ?"; statement = connection.prepareStatement(sql); @@ -2517,8 +2519,9 @@ public class DatabaseStore { int state = rs.getInt(3); int blacked = rs.getInt(4); long timestamp = rs.getLong(5); + String extra = rs.getString(6); - FriendData data = new FriendData(userId, uid, alias, state, blacked, timestamp); + FriendData data = new FriendData(userId, uid, alias, extra, state, blacked, timestamp); out.add(data); } return out; @@ -2538,7 +2541,7 @@ public class DatabaseStore { PreparedStatement statement = null; try { connection = DBUtil.getConnection(); - String sql = "update t_friend set `_alias` = '', `_state` = 1, `_blacked` = 0, `_dt` = ? where `_uid` = ? or `_friend_uid` = ?"; + String sql = "update t_friend set `_alias` = '', `_state` = 1, `_blacked` = 0, `_dt` = ?, `_extra` = 0 where `_uid` = ? or `_friend_uid` = ?"; statement = connection.prepareStatement(sql); int index = 1; @@ -2721,12 +2724,13 @@ public class DatabaseStore { PreparedStatement statement = null; try { connection = DBUtil.getConnection(); - String sql = "insert into t_friend (`_uid`, `_friend_uid`, `_alias`, `_state`, `_blacked`, `_dt`) values(?, ?, ?, ?, ?, ?)" + + String sql = "insert into t_friend (`_uid`, `_friend_uid`, `_alias`, `_state`, `_blacked`, `_dt`, `_extra`) values(?, ?, ?, ?, ?, ?, ?)" + " ON DUPLICATE KEY UPDATE " + "`_alias` = ?," + "`_state` = ?," + "`_blacked` = ?," + - "`_dt` = ?"; + "`_dt` = ?," + + "`_extra` = ?"; statement = connection.prepareStatement(sql); @@ -2737,10 +2741,12 @@ public class DatabaseStore { statement.setInt(index++, request.getState()); statement.setInt(index++, request.getBlacked()); statement.setLong(index++, request.getTimestamp()); + statement.setString(index++, request.getExtra()); statement.setString(index++, request.getAlias()); statement.setInt(index++, request.getState()); statement.setInt(index++, request.getBlacked()); statement.setLong(index++, request.getTimestamp()); + statement.setString(index++, request.getExtra()); int count = statement.executeUpdate(); LOG.info("Update rows {}", count); } catch (SQLException e) { diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index b4fd415c..5e6fab51 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -2040,9 +2040,10 @@ public class MemoryMessagesStore implements IMessagesStore { } } if (friendData1 == null) { - friendData1 = new FriendData(userId, request.getTargetUid(), "", request.getStatus(), 0, System.currentTimeMillis()); + friendData1 = new FriendData(userId, request.getTargetUid(), "", request.getExtra(), request.getStatus(), 0, System.currentTimeMillis()); } else { friendData1.setState(request.getStatus()); + friendData1.setExtra(request.getExtra()); friendData1.setTimestamp(System.currentTimeMillis()); } @@ -2062,7 +2063,7 @@ public class MemoryMessagesStore implements IMessagesStore { } } if (friendData2 == null) { - friendData2 = new FriendData(request.getTargetUid(), userId, "", request.getStatus(), 0, friendData1.getTimestamp()); + friendData2 = new FriendData(request.getTargetUid(), userId, "", request.getExtra(), request.getStatus(), 0, friendData1.getTimestamp()); } else { friendsMap.remove(request.getTargetUid(), friendData2); friendData2.setState(request.getStatus()); @@ -2103,10 +2104,10 @@ public class MemoryMessagesStore implements IMessagesStore { databaseStore.persistOrUpdateFriendRequest(existRequest); if(request.getStatus() == ProtoConstants.FriendRequestStatus.RequestStatus_Accepted){ MultiMap friendsMap = hzInstance.getMultiMap(USER_FRIENDS); - FriendData friendData1 = new FriendData(userId, request.getTargetUid(), "", 0, 0, System.currentTimeMillis()); + FriendData friendData1 = new FriendData(userId, request.getTargetUid(), "", request.getExtra(), 0, 0, System.currentTimeMillis()); databaseStore.persistOrUpdateFriendData(friendData1); - FriendData friendData2 = new FriendData(request.getTargetUid(), userId, "", 0, 0, friendData1.getTimestamp()); + FriendData friendData2 = new FriendData(request.getTargetUid(), userId, "", request.getExtra(), 0, 0, friendData1.getTimestamp()); databaseStore.persistOrUpdateFriendData(friendData2); requestMap.remove(userId); @@ -2152,7 +2153,7 @@ public class MemoryMessagesStore implements IMessagesStore { } if (friendData == null) { - friendData = new FriendData(fromUser, targetUserId, "", 1, state, System.currentTimeMillis()); + friendData = new FriendData(fromUser, targetUserId, "", "", 1, state, System.currentTimeMillis()); } friendData.setBlacked(state); friendData.setTimestamp(System.currentTimeMillis()); diff --git a/common/src/main/java/cn/wildfirechat/pojos/InputFriendRequest.java b/common/src/main/java/cn/wildfirechat/pojos/InputFriendRequest.java index 04fd67ce..f2cc2dfd 100755 --- a/common/src/main/java/cn/wildfirechat/pojos/InputFriendRequest.java +++ b/common/src/main/java/cn/wildfirechat/pojos/InputFriendRequest.java @@ -13,6 +13,7 @@ public class InputFriendRequest { private String userId; private String friendUid; private int status; + private String extra; public String getUserId() { @@ -38,4 +39,12 @@ public class InputFriendRequest { public void setStatus(int status) { this.status = status; } + + public String getExtra() { + return extra; + } + + public void setExtra(String extra) { + this.extra = extra; + } } diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/Main.java b/sdk/src/main/java/cn/wildfirechat/sdk/Main.java index fd347732..abb53558 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/Main.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/Main.java @@ -234,7 +234,7 @@ public class Main { System.exit(-1); } - IMResult updateFriendStatusResult = RelationAdmin.setUserFriend("ff1", "ff2", true); + IMResult updateFriendStatusResult = RelationAdmin.setUserFriend("ff1", "ff2", true, "{\"from\":1}"); if (updateFriendStatusResult != null && updateFriendStatusResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("update friend status success"); } else { diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/RelationAdmin.java b/sdk/src/main/java/cn/wildfirechat/sdk/RelationAdmin.java index 31062f88..3de06fde 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/RelationAdmin.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/RelationAdmin.java @@ -6,12 +6,13 @@ import cn.wildfirechat.sdk.model.IMResult; import cn.wildfirechat.sdk.utilities.AdminHttpUtils; public class RelationAdmin { - public static IMResult setUserFriend(String userId, String targetId, boolean isFriend) throws Exception { + public static IMResult setUserFriend(String userId, String targetId, boolean isFriend, String extra) throws Exception { String path = APIPath.Friend_Update_Status; InputFriendRequest input = new InputFriendRequest(); input.setUserId(userId); input.setFriendUid(targetId); input.setStatus(isFriend ? 0 : 1); //历史遗留问题,在IM数据库中0是好友,1是好友被删除。 + input.setExtra(extra); return AdminHttpUtils.httpJsonPost(path, input, Void.class); }