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 #*********************************************************************