去掉发房间自定义消息的扩展字段(看注释是贵族使用的,会导致云信消息超长发送失败)
This commit is contained in:
@@ -2591,102 +2591,26 @@ public final class IMNetEaseManager {
|
||||
if (chatRoomMessage == null) {
|
||||
throw new IllegalArgumentException("ChatRoomMessage can't be null!");
|
||||
}
|
||||
// 设置聊天室的贵族信息字段(包括发的人和麦上的所有人)
|
||||
final List<String> accounts = new ArrayList<>();
|
||||
final List<ChatRoomMember> chatRoomMembers = new ArrayList<>();
|
||||
return Single.create((SingleOnSubscribe<List<ChatRoomMember>>) e -> {
|
||||
// 发的人
|
||||
ChatRoomMember roomMember = AvRoomDataManager.get().getChatRoomMember(chatRoomMessage.getFromAccount());
|
||||
if (roomMember != null && roomMember.getExtension() != null) {
|
||||
chatRoomMembers.add(roomMember);
|
||||
} else {
|
||||
accounts.add(chatRoomMessage.getFromAccount());
|
||||
}
|
||||
//只有自定义消息的时候才传坑上的人的ext信息
|
||||
if (chatRoomMessage.getMsgType() == MsgTypeEnum.custom) {
|
||||
// 麦上的人
|
||||
SparseArray<RoomQueueInfo> mMicQueueMemberMap = AvRoomDataManager.get().mMicQueueMemberMap;
|
||||
for (int i = 0; i < mMicQueueMemberMap.size(); i++) {
|
||||
int key = mMicQueueMemberMap.keyAt(i);
|
||||
RoomQueueInfo roomQueueInfo = mMicQueueMemberMap.get(key);
|
||||
if (roomQueueInfo == null || roomQueueInfo.mChatRoomMember == null) continue;
|
||||
// 有拓展字段
|
||||
if (roomQueueInfo.mChatRoomMember.getExtension() != null) {
|
||||
MicMemberInfo micMemberInfo = roomQueueInfo.mChatRoomMember;
|
||||
ChatRoomMember chatRoomMember = new ChatRoomMember();
|
||||
chatRoomMember.setAccount(micMemberInfo.getAccount());
|
||||
chatRoomMember.setAvatar(micMemberInfo.getAvatar());
|
||||
chatRoomMember.setNick(micMemberInfo.getNick());
|
||||
chatRoomMember.setExtension(micMemberInfo.getExtension());
|
||||
chatRoomMembers.add(chatRoomMember);
|
||||
return Single.create((SingleOnSubscribe<ChatRoomMessage>) e -> {
|
||||
NIMChatRoomSDK.getChatRoomService().sendMessage(chatRoomMessage, resend)
|
||||
.setCallback(new RequestCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void param) {
|
||||
e.onSuccess(chatRoomMessage);
|
||||
}
|
||||
|
||||
} else {
|
||||
// 用于重新获取拓展字段
|
||||
accounts.add(roomQueueInfo.mChatRoomMember.getAccount());
|
||||
}
|
||||
}
|
||||
}
|
||||
e.onSuccess(chatRoomMembers);
|
||||
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).flatMap(chatRoomMembers1 -> {
|
||||
if (!ListUtils.isListEmpty(accounts)) {
|
||||
return fetchRoomMembersByIds(accounts);
|
||||
} else {
|
||||
return Single.just(chatRoomMembers1);
|
||||
}
|
||||
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).flatMap(roomMembers -> {
|
||||
// 旧版的人上麦可能并没有extension字段
|
||||
chatRoomMembers.addAll(roomMembers);
|
||||
Map<String, Object> map = new HashMap<>(chatRoomMembers.size());
|
||||
for (int i = 0; i < chatRoomMembers.size(); i++) {
|
||||
Map<String, Object> extension = chatRoomMembers.get(i).getExtension();
|
||||
if (extension == null || extension.get(chatRoomMembers.get(i).getAccount()) == null)
|
||||
continue;
|
||||
//去掉一些不需要的东西,长度超过4096 会导致发消息失败。
|
||||
Map<String, Object> tmp = new HashMap<>();
|
||||
tmp.putAll((Map<? extends String, ?>) extension.get(chatRoomMembers.get(i).getAccount()));
|
||||
tmp.remove("banner");
|
||||
tmp.remove("open_effect");
|
||||
tmp.remove("halo");
|
||||
tmp.remove("headwear");
|
||||
tmp.remove("recommend");
|
||||
tmp.remove("pic");
|
||||
tmp.remove("cardbg");
|
||||
tmp.remove("zonebg");
|
||||
tmp.remove("newUser");
|
||||
tmp.remove("official");
|
||||
tmp.remove("defUser");
|
||||
tmp.remove("hasPrettyErbanNo");
|
||||
tmp.remove("officialAnchorCertificationName");
|
||||
tmp.remove("officialAnchorCertificationIcon");
|
||||
tmp.remove("inRoomNameplateWord");
|
||||
tmp.remove("inRoomNameplatePic");
|
||||
map.put(chatRoomMembers.get(i).getAccount(), tmp);
|
||||
}
|
||||
chatRoomMessage.setLocalExtension(map);
|
||||
chatRoomMessage.setRemoteExtension(map);
|
||||
return Single.create((SingleOnSubscribe<ChatRoomMessage>) e -> {
|
||||
NIMChatRoomSDK.getChatRoomService().sendMessage(
|
||||
chatRoomMessage,
|
||||
resend
|
||||
)
|
||||
.setCallback(new RequestCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void param) {
|
||||
e.onSuccess(chatRoomMessage);
|
||||
}
|
||||
@Override
|
||||
public void onFailed(int code) {
|
||||
e.onError(new Exception("错误码: " + code));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailed(int code) {
|
||||
e.onError(new Exception("错误码: " + code));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onException(Throwable exception) {
|
||||
e.onError(exception);
|
||||
}
|
||||
});
|
||||
});
|
||||
@Override
|
||||
public void onException(Throwable exception) {
|
||||
e.onError(exception);
|
||||
}
|
||||
});
|
||||
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
|
||||
|
||||
}
|
||||
|
||||
public boolean isExitRoom() {
|
||||
|
Reference in New Issue
Block a user