diff --git a/broker/config/wildfirechat.conf b/broker/config/wildfirechat.conf index 02814443..4b2ddb10 100755 --- a/broker/config/wildfirechat.conf +++ b/broker/config/wildfirechat.conf @@ -293,14 +293,17 @@ push.ios.server.address http://localhost:8085/ios/push ##消息转发地址 ##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!! #message.forward.url http://localhost:8888/im_event/message -##需要转发的消息类型,当有多个时以英文逗号分割。如果转发所有消息,请注释掉配置或者设置为空 -#message.forward.types 1,2,3 +##需要转发的消息类型,当有多个时以英文逗号分割,可以用-来指定区间,注意区间不能太大,因为要把区间内的所有数字都放入到Set中。如果转发所有消息,请注释掉配置或者设置为空 +#message.forward.types 1,2,3,5-10 +##需要转发的消息类型,当有多个时以英文逗号分割,可以用-来指定区间,注意区间不能太大,因为要把区间内的所有数字都放入到Set中。 +#message.forward.exclude_types 1,2,3,5-10 ##敏感消息转发地址 ##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!! #message.sensitive.forward.url http://localhost:8888/im_event/message -##提醒消息转发地址,@全体用户和@某个用户消息会回调此地址。此转发不受${message.forward.types}限制。 +##提醒消息转发地址,@全体用户和@某个用户消息会回调此地址。 +##此转发不受${message.forward.types}和${message.forward.exclude_types}限制。 ##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!! #message.mentionmsg.forward.url http://localhost:8888/im_event/message diff --git a/broker/src/main/java/io/moquette/BrokerConstants.java b/broker/src/main/java/io/moquette/BrokerConstants.java index ec6218b4..3088aebe 100755 --- a/broker/src/main/java/io/moquette/BrokerConstants.java +++ b/broker/src/main/java/io/moquette/BrokerConstants.java @@ -124,6 +124,7 @@ public final class BrokerConstants { public static final String MESSAGE_Forward_Url = "message.forward.url"; public static final String MESSAGE_Sensitive_Forward_Url = "message.sensitive.forward.url"; public static final String MESSAGE_Forward_Types = "message.forward.types"; + public static final String MESSAGE_Forward_Exclude_Types = "message.forward.exclude_types"; public static final String MESSAGE_MentionMsg_Forward_Url = "message.mentionmsg.forward.url"; diff --git a/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java b/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java index b0ebb0f5..463017c7 100644 --- a/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java @@ -22,6 +22,7 @@ import cn.wildfirechat.common.ErrorCode; import io.netty.buffer.Unpooled; import win.liyufan.im.*; +import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -33,6 +34,7 @@ public class SendMessageHandler extends IMHandler { private String mForwardUrl = null; private String mSensitiveMessageForwardUrl = null; private Set mForwardMessageTypes = new HashSet<>(); + private Set mForwardExcludeMessageTypes = new HashSet<>(); private String mMentionForwardUrl = null; private int mBlacklistStrategy = 0; //黑名单中时,0失败,1吞掉。 private boolean mNoForwardAdminMessage = false; @@ -47,12 +49,9 @@ public class SendMessageHandler extends IMHandler { mForwardUrl = mServer.getConfig().getProperty(BrokerConstants.MESSAGE_Forward_Url); if (!StringUtil.isNullOrEmpty(mForwardUrl)) { String forwardTypes = mServer.getConfig().getProperty(BrokerConstants.MESSAGE_Forward_Types); - if (!StringUtil.isNullOrEmpty(forwardTypes)) { - String[] tss = forwardTypes.split(","); - for (String ts:tss) { - mForwardMessageTypes.add(Integer.parseInt(ts.trim())); - } - } + parseTypes(mForwardMessageTypes, forwardTypes); + String excludeTypes = mServer.getConfig().getProperty(BrokerConstants.MESSAGE_Forward_Exclude_Types); + parseTypes(mForwardExcludeMessageTypes, excludeTypes); } mSensitiveMessageForwardUrl = mServer.getConfig().getProperty(BrokerConstants.MESSAGE_Sensitive_Forward_Url); mMentionForwardUrl = mServer.getConfig().getProperty(BrokerConstants.MESSAGE_MentionMsg_Forward_Url); @@ -97,6 +96,30 @@ public class SendMessageHandler extends IMHandler { } + private void parseTypes(Collection collection, String types) { + try { + if (!StringUtil.isNullOrEmpty(types)) { + String[] tss = types.split(","); + for (String ts:tss) { + if(ts.contains("-")) { + String[] ss = ts.split("-"); + if(ss.length == 2) { + int begin = Integer.parseInt(ss[0]); + int end = Integer.parseInt(ss[1]); + for (int i = begin; i <= end ; i++) { + collection.add(i); + } + } + } else { + collection.add(Integer.parseInt(ts.trim())); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + @Override public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.Message message, Qos1PublishHandler.IMCallback callback) { ErrorCode errorCode = ErrorCode.ERROR_CODE_SUCCESS; @@ -179,7 +202,7 @@ public class SendMessageHandler extends IMHandler { } } - if (!StringUtil.isNullOrEmpty(mForwardUrl) && (mForwardMessageTypes.isEmpty() || mForwardMessageTypes.contains(message.getContent().getType())) && !(isAdmin && mNoForwardAdminMessage)) { + if (!StringUtil.isNullOrEmpty(mForwardUrl) && (mForwardMessageTypes.isEmpty() || mForwardMessageTypes.contains(message.getContent().getType())) && !(isAdmin && mNoForwardAdminMessage) && !mForwardExcludeMessageTypes.contains(message.getContent().getType())) { publisher.forwardMessage(message, mForwardUrl, outputClient); } diff --git a/distribution/src/main/resources/wildfirechat.conf b/distribution/src/main/resources/wildfirechat.conf index ec152ff6..0aeba7fa 100755 --- a/distribution/src/main/resources/wildfirechat.conf +++ b/distribution/src/main/resources/wildfirechat.conf @@ -289,15 +289,18 @@ push.ios.server.address http://localhost:8085/ios/push ##消息转发地址 ##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!! -#message.forward.url http://localhost:8087/im_event/message -##需要转发的消息类型,当有多个时以英文逗号分割。如果转发所有消息,请注释掉配置或者设置为空 -#message.forward.types 1,2,3 +#message.forward.url http://localhost:8888/im_event/message +##需要转发的消息类型,当有多个时以英文逗号分割,可以用-来指定区间,注意区间不能太大,因为要把区间内的所有数字都放入到Set中。如果转发所有消息,请注释掉配置或者设置为空 +#message.forward.types 1,2,3,5-10 +##需要转发的消息类型,当有多个时以英文逗号分割,可以用-来指定区间,注意区间不能太大,因为要把区间内的所有数字都放入到Set中。 +#message.forward.exclude_types 1,2,3,5-10 ##敏感消息转发地址 ##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!! #message.sensitive.forward.url http://localhost:8888/im_event/message -##提醒消息转发地址,@全体用户和@某个用户消息会回调此地址。此转发不受${message.forward.types}限制。 +##提醒消息转发地址,@全体用户和@某个用户消息会回调此地址。 +##此转发不受${message.forward.types}和${message.forward.exclude_types}限制。 ##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!! #message.mentionmsg.forward.url http://localhost:8888/im_event/message