648540858
2022-04-02 d42329a0219a5b523acfa93b3a94fa17db91d910
Merge pull request #426 from J1031/bugfix/map_modification_exception

修复ConcurrentModificationException
1个文件已修改
19 ■■■■■ 已修改文件
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java
@@ -3,6 +3,7 @@
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 @@
    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 @@
        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 @@
                    }
                }
                if (null != result && result){
                    entriesToRemove.add(entry);
                }
            }
            if (!CollectionUtils.isEmpty(entriesToRemove)) {
                for (Map.Entry<JSONObject, ZLMHttpHookSubscribe.Event> entry : entriesToRemove) {
                    entries.remove(entry);
                }
            }
        }
    }