From 91b209d0faba0ebed7ae9fd3f7d7085fe3dfe987 Mon Sep 17 00:00:00 2001 From: imhao183 Date: Thu, 26 Dec 2019 19:32:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=98=AF=E5=90=A6=E5=85=81?= =?UTF-8?q?=E8=AE=B8=E9=99=8C=E7=94=9F=E4=BA=BA=E8=81=8A=E5=A4=A9=E7=9A=84?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- broker/config/wildfirechat.conf | 3 +++ .../java/io/moquette/BrokerConstants.java | 4 ++++ .../imhandler/SendMessageHandler.java | 7 ++++--- .../persistence/MemoryMessagesStore.java | 21 +++++++++++++++---- .../java/io/moquette/spi/IMessagesStore.java | 2 +- .../src/main/resources/wildfirechat.conf | 3 +++ 6 files changed, 32 insertions(+), 8 deletions(-) diff --git a/broker/config/wildfirechat.conf b/broker/config/wildfirechat.conf index 5c6c8c65..fa08ebb1 100755 --- a/broker/config/wildfirechat.conf +++ b/broker/config/wildfirechat.conf @@ -61,6 +61,9 @@ message.remote_history_message 0 ##服务器为每个用户缓存的消息数量。这个值改得太大,拉取消息时间变长,另外会占用大量内存。 message.max_queue 1024 +##是否允许陌生人聊天 +message.disable_stranger_chat false + #********************************************************************* # hazelcase configuration #********************************************************************* diff --git a/broker/src/main/java/io/moquette/BrokerConstants.java b/broker/src/main/java/io/moquette/BrokerConstants.java index b7c11754..b8845451 100755 --- a/broker/src/main/java/io/moquette/BrokerConstants.java +++ b/broker/src/main/java/io/moquette/BrokerConstants.java @@ -117,6 +117,10 @@ public final class BrokerConstants { public static final String MESSAGE_Max_Queue = "message.max_queue"; + public static final String MESSAGE_Disable_Stranger_Chat = "message.disable_stranger_chat"; + + + private BrokerConstants() { diff --git a/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java b/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java index 9de0458b..1dc5f970 100644 --- a/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java @@ -39,6 +39,7 @@ public class SendMessageHandler extends IMHandler { } catch (Exception e) { e.printStackTrace(); } + } @Override @@ -56,12 +57,12 @@ public class SendMessageHandler extends IMHandler { } if (message.getConversation().getType() == ProtoConstants.ConversationType.ConversationType_Private) { - if (m_messagesStore.isBlacked(message.getConversation().getTarget(), fromUser)) { - return ErrorCode.ERROR_CODE_IN_BLACK_LIST; + errorCode = m_messagesStore.isAllowUserMessage(message.getConversation().getTarget(), fromUser); + if (errorCode != ErrorCode.ERROR_CODE_SUCCESS) { + return errorCode; } } - if (message.getConversation().getType() == ProtoConstants.ConversationType.ConversationType_Group ) { errorCode = m_messagesStore.canSendMessageInGroup(fromUser, message.getConversation().getTarget()); if (errorCode != ErrorCode.ERROR_CODE_SUCCESS) { diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 0ba32860..0b45a2a5 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -25,6 +25,7 @@ import com.hazelcast.util.StringUtil; import com.xiaoleilu.loServer.model.FriendData; import cn.wildfirechat.pojos.InputOutputUserBlockStatus; import cn.wildfirechat.common.ErrorCode; +import io.moquette.BrokerConstants; import io.moquette.server.Constants; import io.moquette.server.Server; import io.moquette.spi.IMatchingCondition; @@ -118,12 +119,20 @@ public class MemoryMessagesStore implements IMessagesStore { private ConcurrentHashMap userPushHiddenDetail = new ConcurrentHashMap<>(); private ConcurrentHashMap userConvSlientMap = new ConcurrentHashMap<>(); + private boolean mDisableStrangerChat = false; + MemoryMessagesStore(Server server, DatabaseStore databaseStore) { m_Server = server; this.databaseStore = databaseStore; IS_MESSAGE_ROAMING = "1".equals(m_Server.getConfig().getProperty(MESSAGE_ROAMING)); IS_MESSAGE_REMOTE_HISTORY_MESSAGE = "1".equals(m_Server.getConfig().getProperty(MESSAGE_Remote_History_Message)); Constants.MAX_MESSAGE_QUEUE = Integer.parseInt(m_Server.getConfig().getProperty(MESSAGE_Max_Queue)); + + try { + mDisableStrangerChat = Boolean.parseBoolean(Server.getConfig().getProperty(BrokerConstants.MESSAGE_Disable_Stranger_Chat)); + } catch (Exception e) { + e.printStackTrace(); + } } @Override @@ -1624,7 +1633,7 @@ public class MemoryMessagesStore implements IMessagesStore { } @Override - public boolean isBlacked(String fromUser, String userId) { + public ErrorCode isAllowUserMessage(String fromUser, String userId) { HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); MultiMap friendsMap = hzInstance.getMultiMap(USER_FRIENDS); @@ -1637,14 +1646,18 @@ public class MemoryMessagesStore implements IMessagesStore { for (FriendData friendData : friendDatas) { if (friendData.getFriendUid().equals(userId)) { if (friendData.getBlacked() == 1) { - return true; + return ErrorCode.ERROR_CODE_IN_BLACK_LIST; } else { - return false; + return ErrorCode.ERROR_CODE_SUCCESS; } } } - return false; + if (mDisableStrangerChat) { + return ErrorCode.ERROR_CODE_NOT_RIGHT; + } + + return ErrorCode.ERROR_CODE_SUCCESS; } @Override diff --git a/broker/src/main/java/io/moquette/spi/IMessagesStore.java b/broker/src/main/java/io/moquette/spi/IMessagesStore.java index 690535d6..de350de4 100755 --- a/broker/src/main/java/io/moquette/spi/IMessagesStore.java +++ b/broker/src/main/java/io/moquette/spi/IMessagesStore.java @@ -167,7 +167,7 @@ public interface IMessagesStore { ErrorCode deleteFriend(String userId, String friendUid, long[] head); ErrorCode blackUserRequest(String fromUser, String targetUserId, int status, long[] head); ErrorCode SyncFriendRequestUnread(String userId, long unreadDt, long[] head); - boolean isBlacked(String fromUser, String userId); + ErrorCode isAllowUserMessage(String fromUser, String userId); ErrorCode setFriendAliasRequest(String fromUser, String targetUserId, String alias, long[] head); ErrorCode handleJoinChatroom(String userId, String clientId, String chatroomId); diff --git a/distribution/src/main/resources/wildfirechat.conf b/distribution/src/main/resources/wildfirechat.conf index 82cd7bf0..5f32367d 100755 --- a/distribution/src/main/resources/wildfirechat.conf +++ b/distribution/src/main/resources/wildfirechat.conf @@ -52,6 +52,9 @@ message.remote_history_message 0 ##服务器为每个用户缓存的消息数量。这个值改得太大,拉取消息时间变长,另外会占用大量内存。 message.max_queue 1024 +##是否允许陌生人聊天 +message.disable_stranger_chat false + #********************************************************************* # hazelcase configuration #*********************************************************************