diff --git a/broker/config/wildfirechat.conf b/broker/config/wildfirechat.conf index d47f171c..c3dacb8d 100755 --- a/broker/config/wildfirechat.conf +++ b/broker/config/wildfirechat.conf @@ -152,12 +152,30 @@ message.no_forward_admin_message false ## 消息转发功能开启时,转发信息是否带上用户clientId和平台类型。 message.forward_with_client_info false +## 消息转发功能开启时,转发信息是否带上发送者的用户信息 +message.forward_with_sender_info false + +## 消息转发功能开启时,转发信息是否带上目标的信息,单聊时是对方用户信息,群聊时是群组信息,频道时是频道信息 +message.forward_with_target_info false + ## 机器人回调信息是否带上用户clientId和平台类型。 robot.callback_with_client_info false +## 机器人回调信息是否带上发送者的用户信息 +robot.callback_with_sender_info false + +## 机器人回调信息是否带上目标的信息,单聊时是对方用户信息,群聊时是群组信息,频道时是频道信息 +robot.callback_with_target_info false + ## 频道回调信息是否带上用户clientId和平台类型。 channel.callback_with_client_info false +## 频道回调信息是否带上发送者的用户信息。 +channel.callback_with_sender_info false + +## 频道回调信息是否带上频道信息 +channel.callback_with_target_info false + ## 频道回调新方式,在新方式下,如果有callback地址就会总是回调客户端发送的消息(包括owner和订阅者)。automatic属性控制订阅者发送的消息是否发给owner, 0发,1不发。 ## 旧的方式是,automatic为0时,订阅者的消息发给owner,不转发消息到callback地址。为1时,把订阅者的消息转发给callback地址,不发给owner。 channel.new_callback_feature true diff --git a/broker/src/main/java/io/moquette/BrokerConstants.java b/broker/src/main/java/io/moquette/BrokerConstants.java index f60b2e81..d0b6390d 100755 --- a/broker/src/main/java/io/moquette/BrokerConstants.java +++ b/broker/src/main/java/io/moquette/BrokerConstants.java @@ -163,11 +163,18 @@ public final class BrokerConstants { public static final String MESSAGE_Force_Push_Types = "message.force_push_types"; public static final String MESSAGE_Forward_With_Client_Info = "message.forward_with_client_info"; + public static final String MESSAGE_Forward_With_Sender_Info = "message.forward_with_sender_info"; + public static final String MESSAGE_Forward_With_Target_Info = "message.forward_with_target_info"; public static final String BROADCAST_Target_From_User_Table = "message.broadcast.target_from_user_table"; public static final String ROBOT_Callback_With_Client_Info = "robot.callback_with_client_info"; + public static final String ROBOT_Callback_With_Sender_Info = "robot.callback_with_sender_info"; + public static final String ROBOT_Callback_With_Target_Info = "robot.callback_with_target_info"; + public static final String CHANNEL_Callback_With_Client_Info = "channel.callback_with_client_info"; + public static final String CHANNEL_Callback_With_Sender_Info = "channel.callback_with_sender_info"; + public static final String CHANNEL_Callback_With_Target_Info = "channel.callback_with_target_info"; public static final String CHANNEL_New_Callback_Feature = "channel.new_callback_feature"; diff --git a/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java b/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java index 4ce6e798..7db17960 100644 --- a/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java @@ -217,20 +217,13 @@ public class SendMessageHandler extends IMHandler { } message = message.toBuilder().setFromUser(fromUser).setMessageId(messageId).setServerTimestamp(timestamp).build(); - OutputClient outputClient = null; - if(m_messagesStore.isForwardMessageWithClientInfo() && requestSourceType == ProtoConstants.RequestSourceType.Request_From_User && !StringUtil.isNullOrEmpty(clientID)) { - MemorySessionStore.Session session = m_sessionsStore.getSession(clientID); - if(session != null && session.getUsername().equals(fromUser)) { - outputClient = new OutputClient(session.getPlatform(), clientID); - } - } if (!StringUtil.isNullOrEmpty(mForwardUrl) && (mForwardMessageTypes.isEmpty() || mForwardMessageTypes.contains(message.getContent().getType())) && !(isAdmin && mNoForwardAdminMessage) && !mForwardExcludeMessageTypes.contains(message.getContent().getType())) { - publisher.forwardMessage(message, mForwardUrl, outputClient); + publisher.forwardMessage(message, mForwardUrl, clientID); } if(!StringUtil.isNullOrEmpty(mMentionForwardUrl) && message.hasContent() && message.getContent().getMentionedType() != 0 && !(isAdmin && mNoForwardAdminMessage)) { - publisher.forwardMessage(message, mMentionForwardUrl, outputClient); + publisher.forwardMessage(message, mMentionForwardUrl, clientID); } if (!isAdmin) { @@ -239,7 +232,7 @@ public class SendMessageHandler extends IMHandler { if (matched != null && !matched.isEmpty()) { m_messagesStore.storeSensitiveMessage(message); if (!StringUtil.isNullOrEmpty(mSensitiveMessageForwardUrl)) { - publisher.forwardMessage(message, mSensitiveMessageForwardUrl, outputClient); + publisher.forwardMessage(message, mSensitiveMessageForwardUrl, clientID); } if (mSensitiveType == 0) { errorCode = ErrorCode.ERROR_CODE_SENSITIVE_MATCHED; @@ -256,7 +249,7 @@ public class SendMessageHandler extends IMHandler { } else { if(mRemoteSensitiveMessageTypes.contains(message.getContent().getType())) { final WFCMessage.Message finalMsg = message; - publisher.forwardMessageWithCallback(message, mRemoteSensitiveServerUrl, new HttpUtils.HttpCallback() { + publisher.forwardMessageWithCallback(message, mRemoteSensitiveServerUrl, clientID, new HttpUtils.HttpCallback() { @Override public void onSuccess(String content) { if(StringUtil.isNullOrEmpty(content)) { diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 8a8685b3..ca99fef7 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -205,8 +205,16 @@ public class MemoryMessagesStore implements IMessagesStore { private boolean mBroadcastTargetFromUserTable = false; private boolean mForwardMessageWithClientInfo = false; + private boolean mForwardMessageWithSenderInfo = false; + private boolean mForwardMessageWithTargetInfo = false; + private boolean mRobotCallbackWithClientInfo = false; + private boolean mRobotCallbackWithSenderInfo = false; + private boolean mRobotCallbackWithTargetInfo = false; + private boolean mChannelCallbackWithClientInfo = false; + private boolean mChannelCallbackWithSenderInfo = false; + private boolean mChannelCallbackWithTargetInfo = false; private boolean mChannelNewCallbackFeature = true; private Set mUserHideProperties = new HashSet<>(); @@ -608,9 +616,13 @@ public class MemoryMessagesStore implements IMessagesStore { try { mForwardMessageWithClientInfo = Boolean.parseBoolean(server.getConfig().getProperty(BrokerConstants.MESSAGE_Forward_With_Client_Info, "false")); - } catch (Exception e) { - - } + } catch (Exception e) {} + try { + mForwardMessageWithSenderInfo = Boolean.parseBoolean(server.getConfig().getProperty(BrokerConstants.MESSAGE_Forward_With_Sender_Info, "false")); + } catch (Exception e) {} + try { + mForwardMessageWithTargetInfo = Boolean.parseBoolean(server.getConfig().getProperty(BrokerConstants.MESSAGE_Forward_With_Target_Info, "false")); + } catch (Exception e) {} try { mBroadcastTargetFromUserTable = Boolean.parseBoolean(server.getConfig().getProperty(BrokerConstants.BROADCAST_Target_From_User_Table, "false")); @@ -620,17 +632,27 @@ public class MemoryMessagesStore implements IMessagesStore { try { mRobotCallbackWithClientInfo = Boolean.parseBoolean(server.getConfig().getProperty(BrokerConstants.ROBOT_Callback_With_Client_Info, "false")); - } catch (Exception e) { + } catch (Exception e) {} + try { + mRobotCallbackWithSenderInfo = Boolean.parseBoolean(server.getConfig().getProperty(BrokerConstants.ROBOT_Callback_With_Sender_Info, "false")); + } catch (Exception e) {} + try { + mRobotCallbackWithTargetInfo = Boolean.parseBoolean(server.getConfig().getProperty(BrokerConstants.ROBOT_Callback_With_Target_Info, "false")); + } catch (Exception e) {} - } try { mChannelCallbackWithClientInfo = Boolean.parseBoolean(server.getConfig().getProperty(BrokerConstants.CHANNEL_Callback_With_Client_Info, "false")); - } catch (Exception e) { - } + } catch (Exception e) {} + try { + mChannelCallbackWithSenderInfo = Boolean.parseBoolean(server.getConfig().getProperty(BrokerConstants.CHANNEL_Callback_With_Sender_Info, "false")); + } catch (Exception e) {} + try { + mChannelCallbackWithTargetInfo = Boolean.parseBoolean(server.getConfig().getProperty(BrokerConstants.CHANNEL_Callback_With_Target_Info, "false")); + } catch (Exception e) {} + try { mChannelNewCallbackFeature = Boolean.parseBoolean(server.getConfig().getProperty(BrokerConstants.CHANNEL_New_Callback_Feature, "true")); - } catch (Exception e) { - } + } catch (Exception e) {} try { mRecallForwardUrl = server.getConfig().getProperty(BrokerConstants.MESSAGE_RecallMsg_Forward_Url); @@ -4728,16 +4750,46 @@ public class MemoryMessagesStore implements IMessagesStore { return mForwardMessageWithClientInfo; } + @Override + public boolean isForwardMessageWithSenderInfo() { + return mForwardMessageWithSenderInfo; + } + + @Override + public boolean isForwardMessageWithTargetInfo() { + return mForwardMessageWithTargetInfo; + } + @Override public boolean isRobotCallbackWithClientInfo() { return mRobotCallbackWithClientInfo; } + @Override + public boolean isRobotCallbackWithSenderInfo() { + return mRobotCallbackWithSenderInfo; + } + + @Override + public boolean isRobotCallbackWithTargetInfo() { + return mRobotCallbackWithTargetInfo; + } + @Override public boolean isChannelCallbackWithClientInfo() { return mChannelCallbackWithClientInfo; } + @Override + public boolean isChannelCallbackWithSenderInfo() { + return mChannelCallbackWithSenderInfo; + } + + @Override + public boolean isChannelCallbackWithTargetInfo() { + return mChannelCallbackWithTargetInfo; + } + @Override public boolean isChannelNewCallbackFeature() { return mChannelNewCallbackFeature; diff --git a/broker/src/main/java/io/moquette/spi/IMessagesStore.java b/broker/src/main/java/io/moquette/spi/IMessagesStore.java index 6b123e8d..0bc62aac 100755 --- a/broker/src/main/java/io/moquette/spi/IMessagesStore.java +++ b/broker/src/main/java/io/moquette/spi/IMessagesStore.java @@ -242,8 +242,16 @@ public interface IMessagesStore { int getGroupForbiddenClientOperation(); boolean isForwardMessageWithClientInfo(); + boolean isForwardMessageWithSenderInfo(); + boolean isForwardMessageWithTargetInfo(); + boolean isRobotCallbackWithClientInfo(); + boolean isRobotCallbackWithSenderInfo(); + boolean isRobotCallbackWithTargetInfo(); + boolean isChannelCallbackWithClientInfo(); + boolean isChannelCallbackWithSenderInfo(); + boolean isChannelCallbackWithTargetInfo(); boolean isChannelNewCallbackFeature(); boolean isRobotAutoAcceptFriendRequest(); diff --git a/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java b/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java index 30d67746..802b0d47 100755 --- a/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java +++ b/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java @@ -16,14 +16,12 @@ package io.moquette.spi.impl; -import cn.wildfirechat.pojos.OutputClient; -import cn.wildfirechat.pojos.OutputMessageData; +import cn.wildfirechat.pojos.*; import cn.wildfirechat.proto.ProtoConstants; import cn.wildfirechat.proto.WFCMessage; import cn.wildfirechat.push.PushServer; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.util.StringUtil; -import cn.wildfirechat.pojos.OutputNotifyChannelSubscribeStatus; import com.xiaoleilu.loServer.model.FriendData; import io.moquette.persistence.*; import io.moquette.persistence.MemorySessionStore.Session; @@ -47,6 +45,7 @@ import java.util.concurrent.Executors; import java.util.function.BiFunction; import static cn.wildfirechat.common.IMExceptionEvent.EventType.EVENT_CALLBACK_Exception; +import static cn.wildfirechat.proto.ProtoConstants.ConversationType.*; import static cn.wildfirechat.proto.ProtoConstants.PersistFlag.Transparent; public class MessagesPublisher { @@ -283,7 +282,7 @@ public class MessagesPublisher { if (!user.equals(sender)) { WFCMessage.Conversation conversation; - if (conversationType == ProtoConstants.ConversationType.ConversationType_Private) { + if (conversationType == ConversationType_Private) { conversation = WFCMessage.Conversation.newBuilder().setType(conversationType).setLine(line).setTarget(sender).build(); } else { conversation = WFCMessage.Conversation.newBuilder().setType(conversationType).setLine(line).setTarget(target).build(); @@ -398,7 +397,7 @@ public class MessagesPublisher { if(!sendNameLoaded) { List list = new ArrayList<>(); - senderName = getUserDisplayName(sender, conversationType == ProtoConstants.ConversationType.ConversationType_Group ? target : null, list); + senderName = getUserDisplayName(sender, conversationType == ConversationType_Group ? target : null, list); if(!list.isEmpty()) { senderPortrait = list.get(0); } @@ -486,19 +485,10 @@ public class MessagesPublisher { if (userInfo != null && userInfo.getType() == ProtoConstants.UserType.UserType_Robot) { WFCMessage.Robot robot = m_messagesStore.getRobot(user); if (robot != null && !StringUtil.isNullOrEmpty(robot.getCallback())) { - OutputClient outputClient = null; - if(m_messagesStore.isRobotCallbackWithClientInfo() && !StringUtil.isNullOrEmpty(exceptClientId)) { - Session session = m_sessionsStore.getSession(exceptClientId); - if(session != null && session.getUsername().equals(message.getFromUser())) { - outputClient = new OutputClient(session.getPlatform(), exceptClientId); - } - } - - final WFCMessage.Message finalMsg = message; - OutputClient finalOutputClient = outputClient; + OutputMessageData outputMessageData = getOutputMessageWithExtraInfo(message, exceptClientId, m_messagesStore.isRobotCallbackWithClientInfo() , m_messagesStore.isRobotCallbackWithSenderInfo(), m_messagesStore.isRobotCallbackWithTargetInfo()); Server.getServer().getCallbackScheduler().execute(() -> { try { - HttpUtils.httpJsonPost(robot.getCallback(), GsonUtil.gson.toJson(OutputMessageData.fromProtoMessage(finalMsg, finalOutputClient), OutputMessageData.class), HttpUtils.HttpPostType.POST_TYPE_Robot_Message_Callback); + HttpUtils.httpJsonPost(robot.getCallback(), GsonUtil.gson.toJson(outputMessageData, OutputMessageData.class), HttpUtils.HttpPostType.POST_TYPE_Robot_Message_Callback); } catch (Exception e) { e.printStackTrace(); Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception); @@ -530,9 +520,9 @@ public class MessagesPublisher { } String getTargetName(String targetId, int cnvType, String fromUser, List portraitList) { - if (cnvType == ProtoConstants.ConversationType.ConversationType_Private) { + if (cnvType == ConversationType_Private) { return getUserDisplayName(targetId, null, portraitList); - } else if(cnvType == ProtoConstants.ConversationType.ConversationType_Group) { + } else if(cnvType == ConversationType_Group) { WFCMessage.GroupInfo group = m_messagesStore.getGroupInfo(targetId); if(group != null) { if(!StringUtil.isNullOrEmpty(group.getPortrait())) { @@ -545,7 +535,7 @@ public class MessagesPublisher { } return group.getName(); } - } else if(cnvType == ProtoConstants.ConversationType.ConversationType_Channel) { + } else if(cnvType == ConversationType_Channel) { WFCMessage.ChannelInfo channelInfo = m_messagesStore.getChannelInfo(targetId); if (channelInfo != null) { if(!StringUtil.isNullOrEmpty(channelInfo.getPortrait())) { @@ -667,7 +657,7 @@ public class MessagesPublisher { } public void publish2Receivers(WFCMessage.Message message, Set receivers, String exceptClientId, int pullType) { - if (message.getConversation().getType() == ProtoConstants.ConversationType.ConversationType_Channel) { + if (message.getConversation().getType() == ConversationType_Channel) { WFCMessage.ChannelInfo channelInfo = m_messagesStore.getChannelInfo(message.getConversation().getTarget()); boolean forwardMsg; @@ -678,18 +668,10 @@ public class MessagesPublisher { } if (forwardMsg) { - OutputClient outputClient = null; - if(m_messagesStore.isChannelCallbackWithClientInfo() && !StringUtil.isNullOrEmpty(exceptClientId)) { - Session session = m_sessionsStore.getSession(exceptClientId); - if(session != null && session.getUsername().equals(message.getFromUser())) { - outputClient = new OutputClient(session.getPlatform(), exceptClientId); - } - } - - OutputClient finalOutputClient = outputClient; + OutputMessageData outputMessageData = getOutputMessageWithExtraInfo(message, exceptClientId, m_messagesStore.isChannelCallbackWithClientInfo() , m_messagesStore.isChannelCallbackWithSenderInfo(), m_messagesStore.isChannelCallbackWithTargetInfo()); Server.getServer().getCallbackScheduler().execute(() -> { try { - HttpUtils.httpJsonPost(channelInfo.getCallback() + "/message", GsonUtil.gson.toJson(OutputMessageData.fromProtoMessage(message, finalOutputClient), OutputMessageData.class), HttpUtils.HttpPostType.POST_TYPE_Channel_Message_Callback); + HttpUtils.httpJsonPost(channelInfo.getCallback() + "/message", GsonUtil.gson.toJson(outputMessageData, OutputMessageData.class), HttpUtils.HttpPostType.POST_TYPE_Channel_Message_Callback); } catch (Exception e) { e.printStackTrace(); Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception); @@ -741,10 +723,72 @@ public class MessagesPublisher { } - public void forwardMessage(final WFCMessage.Message message, String forwardUrl, OutputClient outputClient) { + private OutputMessageData getOutputMessageWithExtraInfo(WFCMessage.Message message, String clientId, boolean withClient, boolean withSender, boolean withTarget) { + if (message == null) { + return null; + } + + OutputClient outputClient = null; + if (withClient && !StringUtil.isNullOrEmpty(clientId)) { + Session session = m_sessionsStore.getSession(clientId); + if(session != null && session.getUsername().equals(message.getFromUser())) { + outputClient = new OutputClient(session.getPlatform(), clientId); + } + } + + OutputMessageData outputMessageData = OutputMessageData.fromProtoMessage(message, outputClient); + if (withSender) { + WFCMessage.User senderInfo = m_messagesStore.getUserInfo(message.getFromUser()); + outputMessageData.setSenderUserInfo(InputOutputUserInfo.fromPbUser(senderInfo)); + } + + if (withTarget) { + if (message.getConversation().getType() == ConversationType_Private) { + WFCMessage.User targetInfo = m_messagesStore.getUserInfo(message.getConversation().getTarget()); + if (targetInfo != null) { + outputMessageData.setTargetUserInfo(InputOutputUserInfo.fromPbUser(targetInfo)); + } + } else if(message.getConversation().getType() == ConversationType_Group) { + WFCMessage.GroupInfo groupInfo = m_messagesStore.getGroupInfo(message.getConversation().getTarget()); + if (groupInfo != null) { + PojoGroupInfo pojoGroupInfo = new PojoGroupInfo(); + pojoGroupInfo.setExtra(groupInfo.getExtra()); + pojoGroupInfo.setName(groupInfo.getName()); + pojoGroupInfo.setOwner(groupInfo.getOwner()); + pojoGroupInfo.setPortrait(groupInfo.getPortrait()); + pojoGroupInfo.setTarget_id(groupInfo.getTargetId()); + pojoGroupInfo.setType(groupInfo.getType()); + pojoGroupInfo.setMember_count(groupInfo.getMemberCount()); + pojoGroupInfo.setMute(groupInfo.getMute()); + pojoGroupInfo.setJoin_type(groupInfo.getJoinType()); + pojoGroupInfo.setPrivate_chat(groupInfo.getPrivateChat()); + pojoGroupInfo.setSearchable(groupInfo.getSearchable()); + pojoGroupInfo.setMax_member_count(groupInfo.getMemberCount()); + pojoGroupInfo.setHistory_message(groupInfo.getHistoryMessage()); + pojoGroupInfo.setSuper_group(groupInfo.getSuperGroup()>0); + pojoGroupInfo.setDeleted(groupInfo.getDeleted()>0); + pojoGroupInfo.setUpdate_dt(groupInfo.getUpdateDt()); + pojoGroupInfo.setMember_update_dt(groupInfo.getMemberUpdateDt()); + outputMessageData.setTargetGroupInfo(pojoGroupInfo); + } + } else if(message.getConversation().getType() == ConversationType_Channel) { + WFCMessage.ChannelInfo targetInfo = m_messagesStore.getChannelInfo(message.getConversation().getTarget()); + if (targetInfo != null) { + outputMessageData.setTargetChannelInfo(OutputGetChannelInfo.fromPbInfo(targetInfo)); + } + } + } + + return outputMessageData; + } + + + + public void forwardMessage(final WFCMessage.Message message, String forwardUrl, String fromClientId) { + OutputMessageData outputMessageData = getOutputMessageWithExtraInfo(message, fromClientId, m_messagesStore.isForwardMessageWithClientInfo() , m_messagesStore.isForwardMessageWithSenderInfo(), m_messagesStore.isForwardMessageWithTargetInfo()); Server.getServer().getCallbackScheduler().execute(() -> { try { - HttpUtils.httpJsonPost(forwardUrl, GsonUtil.gson.toJson(OutputMessageData.fromProtoMessage(message, outputClient), OutputMessageData.class), HttpUtils.HttpPostType.POST_TYPE_Forward_Message_Callback); + HttpUtils.httpJsonPost(forwardUrl, GsonUtil.gson.toJson(outputMessageData), HttpUtils.HttpPostType.POST_TYPE_Forward_Message_Callback); } catch (Exception e) { e.printStackTrace(); Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception); @@ -752,9 +796,10 @@ public class MessagesPublisher { }); } - public void forwardMessageWithCallback(final WFCMessage.Message message, String forwardUrl, HttpUtils.HttpCallback callback) { + public void forwardMessageWithCallback(final WFCMessage.Message message, String fromClientId, String forwardUrl, HttpUtils.HttpCallback callback) { + OutputMessageData outputMessageData = getOutputMessageWithExtraInfo(message, fromClientId, m_messagesStore.isForwardMessageWithClientInfo() , m_messagesStore.isForwardMessageWithSenderInfo(), m_messagesStore.isForwardMessageWithTargetInfo()); try { - HttpUtils.httpJsonPost(forwardUrl, GsonUtil.gson.toJson(OutputMessageData.fromProtoMessage(message), OutputMessageData.class), new HttpUtils.HttpCallback() { + HttpUtils.httpJsonPost(forwardUrl, GsonUtil.gson.toJson(outputMessageData), new HttpUtils.HttpCallback() { @Override public void onSuccess(String content) { Server.getServer().getImBusinessScheduler().execute(()->{ diff --git a/common/src/main/java/cn/wildfirechat/pojos/OutputMessageData.java b/common/src/main/java/cn/wildfirechat/pojos/OutputMessageData.java index 7f9a81b1..400bbe65 100644 --- a/common/src/main/java/cn/wildfirechat/pojos/OutputMessageData.java +++ b/common/src/main/java/cn/wildfirechat/pojos/OutputMessageData.java @@ -22,6 +22,11 @@ public class OutputMessageData { private long timestamp; private OutputClient client; + private InputOutputUserInfo senderUserInfo; + private InputOutputUserInfo targetUserInfo; + private PojoGroupInfo targetGroupInfo; + private OutputGetChannelInfo targetChannelInfo; + public String getSender() { return sender; } @@ -78,6 +83,38 @@ public class OutputMessageData { this.client = client; } + public InputOutputUserInfo getSenderUserInfo() { + return senderUserInfo; + } + + public void setSenderUserInfo(InputOutputUserInfo senderUserInfo) { + this.senderUserInfo = senderUserInfo; + } + + public InputOutputUserInfo getTargetUserInfo() { + return targetUserInfo; + } + + public void setTargetUserInfo(InputOutputUserInfo targetUserInfo) { + this.targetUserInfo = targetUserInfo; + } + + public PojoGroupInfo getTargetGroupInfo() { + return targetGroupInfo; + } + + public void setTargetGroupInfo(PojoGroupInfo targetGroupInfo) { + this.targetGroupInfo = targetGroupInfo; + } + + public OutputGetChannelInfo getTargetChannelInfo() { + return targetChannelInfo; + } + + public void setTargetChannelInfo(OutputGetChannelInfo targetChannelInfo) { + this.targetChannelInfo = targetChannelInfo; + } + public static OutputMessageData fromProtoMessage(WFCMessage.Message protoMessage) { return fromProtoMessage(protoMessage, null); } diff --git a/distribution/src/main/resources/wildfirechat.conf b/distribution/src/main/resources/wildfirechat.conf index 18f0a991..52d734c7 100755 --- a/distribution/src/main/resources/wildfirechat.conf +++ b/distribution/src/main/resources/wildfirechat.conf @@ -147,12 +147,30 @@ message.no_forward_admin_message false ## 消息转发功能开启时,转发信息是否带上用户clientId和平台类型。 message.forward_with_client_info false +## 消息转发功能开启时,转发信息是否带上发送者的用户信息 +message.forward_with_sender_info false + +## 消息转发功能开启时,转发信息是否带上目标的信息,单聊时是对方用户信息,群聊时是群组信息,频道时是频道信息 +message.forward_with_target_info false + ## 机器人回调信息是否带上用户clientId和平台类型。 robot.callback_with_client_info false +## 机器人回调信息是否带上发送者的用户信息 +robot.callback_with_sender_info false + +## 机器人回调信息是否带上目标的信息,单聊时是对方用户信息,群聊时是群组信息,频道时是频道信息 +robot.callback_with_target_info false + ## 频道回调信息是否带上用户clientId和平台类型。 channel.callback_with_client_info false +## 频道回调信息是否带上发送者的用户信息。 +channel.callback_with_sender_info false + +## 频道回调信息是否带上频道信息 +channel.callback_with_target_info false + ## 频道回调新方式,在新方式下,如果有callback地址就会总是回调客户端发送的消息(包括owner和订阅者)。automatic属性控制订阅者发送的消息是否发给owner, 0发,1不发。 ## 旧的方式是,automatic为0时,订阅者的消息发给owner,不转发消息到callback地址。为1时,把订阅者的消息转发给callback地址,不发给owner。 channel.new_callback_feature true diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/Main.java b/sdk/src/main/java/cn/wildfirechat/sdk/Main.java index 8bea85c5..c37f2633 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/Main.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/Main.java @@ -629,6 +629,22 @@ public class Main { } if(commercialServer) { + PojoGroupMember m4 = new PojoGroupMember(); + m4.setMember_id("user4"); + m4.setAlias("hello user4"); + + PojoGroupMember m5 = new PojoGroupMember(); + m5.setMember_id("user5"); + m5.setAlias("hello user5"); + + voidIMResult = GroupAdmin.addGroupMembers("user1", groupInfo.getTarget_id(), Arrays.asList(m4, m5), null, null, null); + if (voidIMResult != null && voidIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { + System.out.println("add group member success"); + } else { + System.out.println("add group member failure"); + 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"); @@ -1588,6 +1604,22 @@ public class Main { } if(commercialServer) { + PojoGroupMember m4 = new PojoGroupMember(); + m4.setMember_id("user4"); + m4.setAlias("hello user4"); + + PojoGroupMember m5 = new PojoGroupMember(); + m5.setMember_id("user5"); + m5.setAlias("hello user5"); + + voidIMResult = robotService.addGroupMembers(groupInfo.getTarget_id(), Arrays.asList(m4, m5), null, null, null); + if (voidIMResult != null && voidIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { + System.out.println("add group member success"); + } else { + System.out.println("add group member failure"); + System.exit(-1); + } + voidIMResult = robotService.setGroupManager(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"); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/utilities/AdminHttpUtils.java b/sdk/src/main/java/cn/wildfirechat/sdk/utilities/AdminHttpUtils.java index fa6470f5..0fd29d5c 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/utilities/AdminHttpUtils.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/utilities/AdminHttpUtils.java @@ -46,7 +46,7 @@ public class AdminHttpUtils extends JsonUtils { adminSecret = secret.trim(); PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); cm.setValidateAfterInactivity(1000); - int connectTimeout = 5000; // 连接超时时间 + int connectTimeout = 15000; // 连接超时时间 int connectionRequestTimeout = 3000; // 从连接池获取连接的超时时间 RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(connectTimeout)