修复ConcurrentModificationException

This commit is contained in:
quangz 2022-04-02 08:06:30 +08:00
parent f2759841f9
commit f23c5eee17

View File

@ -3,6 +3,7 @@ package com.genersoft.iot.vmp.media.zlm;
import com.alibaba.fastjson.JSONObject;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@ -39,12 +40,8 @@ public class ZLMHttpHookSubscribe {
private Map<HookType, Map<JSONObject, ZLMHttpHookSubscribe.Event>> allSubscribes = new ConcurrentHashMap<>();
public void addSubscribe(HookType type, JSONObject hookResponse, ZLMHttpHookSubscribe.Event event) {
Map<JSONObject, Event> eventMap = allSubscribes.get(type);
if (eventMap == null) {
eventMap = new HashMap<JSONObject, Event>();
allSubscribes.put(type,eventMap);
}
eventMap.put(hookResponse, event);
allSubscribes.computeIfAbsent(type, k -> new ConcurrentHashMap<>())
.put(hookResponse, event);
}
public ZLMHttpHookSubscribe.Event getSubscribe(HookType type, JSONObject hookResponse) {
@ -81,7 +78,8 @@ public class ZLMHttpHookSubscribe {
Set<Map.Entry<JSONObject, Event>> entries = eventMap.entrySet();
if (entries.size() > 0) {
for (Map.Entry<JSONObject, Event> entry : entries) {
List<Map.Entry<JSONObject, ZLMHttpHookSubscribe.Event>> entriesToRemove = new ArrayList<>();
for (Map.Entry<JSONObject, ZLMHttpHookSubscribe.Event> entry : entries) {
JSONObject key = entry.getKey();
Boolean result = null;
for (String s : key.keySet()) {
@ -93,9 +91,16 @@ public class ZLMHttpHookSubscribe {
}
}
if (null != result && result){
entriesToRemove.add(entry);
}
}
if (!CollectionUtils.isEmpty(entriesToRemove)) {
for (Map.Entry<JSONObject, ZLMHttpHookSubscribe.Event> entry : entriesToRemove) {
entries.remove(entry);
}
}
}
}