From a53dce38c2f58c0bfd37203e46dc57aa56025f45 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期四, 17 十一月 2022 18:22:24 +0800 Subject: [PATCH] Merge pull request #673 from 648540858/wvp-28181-2.0-multi-network --- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java | 75 ++++++++++++++++++++++++++----------- 1 files changed, 52 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java index ba65581..a351445 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java @@ -1,14 +1,14 @@ package com.genersoft.iot.vmp.gb28181.transmit.callback; -import java.util.HashMap; +import com.genersoft.iot.vmp.vmanager.bean.DeferredResultEx; +import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; +import org.springframework.web.context.request.async.DeferredResult; + +import java.util.Collection; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; - -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Component; -import org.springframework.web.context.request.async.DeferredResult; /** * @description: 寮傛璇锋眰澶勭悊 @@ -51,31 +51,48 @@ public static final String CALLBACK_CMD_BROADCAST = "CALLBACK_BROADCAST"; - private Map<String, Map<String, DeferredResult>> map = new ConcurrentHashMap<>(); + private Map<String, Map<String, DeferredResultEx>> map = new ConcurrentHashMap<>(); - public void put(String key, String id, DeferredResult result) { - Map<String, DeferredResult> deferredResultMap = map.get(key); + public void put(String key, String id, DeferredResultEx result) { + Map<String, DeferredResultEx> deferredResultMap = map.get(key); if (deferredResultMap == null) { deferredResultMap = new ConcurrentHashMap<>(); map.put(key, deferredResultMap); } deferredResultMap.put(id, result); } - - public DeferredResult get(String key, String id) { - Map<String, DeferredResult> deferredResultMap = map.get(key); + + public void put(String key, String id, DeferredResult result) { + Map<String, DeferredResultEx> deferredResultMap = map.get(key); if (deferredResultMap == null) { + deferredResultMap = new ConcurrentHashMap<>(); + map.put(key, deferredResultMap); + } + deferredResultMap.put(id, new DeferredResultEx(result)); + } + + public DeferredResultEx get(String key, String id) { + Map<String, DeferredResultEx> deferredResultMap = map.get(key); + if (deferredResultMap == null || ObjectUtils.isEmpty(id)) { return null; } return deferredResultMap.get(id); + } + + public Collection<DeferredResultEx> getAllByKey(String key) { + Map<String, DeferredResultEx> deferredResultMap = map.get(key); + if (deferredResultMap == null) { + return null; + } + return deferredResultMap.values(); } public boolean exist(String key, String id){ if (key == null) { return false; } - Map<String, DeferredResult> deferredResultMap = map.get(key); + Map<String, DeferredResultEx> deferredResultMap = map.get(key); if (id == null) { return deferredResultMap != null; }else { @@ -88,15 +105,15 @@ * @param msg */ public void invokeResult(RequestMessage msg) { - Map<String, DeferredResult> deferredResultMap = map.get(msg.getKey()); + Map<String, DeferredResultEx> deferredResultMap = map.get(msg.getKey()); if (deferredResultMap == null) { return; } - DeferredResult result = deferredResultMap.get(msg.getId()); + DeferredResultEx result = deferredResultMap.get(msg.getId()); if (result == null) { return; } - result.setResult(msg.getData()); + result.getDeferredResult().setResult(msg.getData()); deferredResultMap.remove(msg.getId()); if (deferredResultMap.size() == 0) { map.remove(msg.getKey()); @@ -108,18 +125,30 @@ * @param msg */ public void invokeAllResult(RequestMessage msg) { - Map<String, DeferredResult> deferredResultMap = map.get(msg.getKey()); + Map<String, DeferredResultEx> deferredResultMap = map.get(msg.getKey()); if (deferredResultMap == null) { return; } - Set<String> ids = deferredResultMap.keySet(); - for (String id : ids) { - DeferredResult result = deferredResultMap.get(id); - if (result == null) { + synchronized (this) { + deferredResultMap = map.get(msg.getKey()); + if (deferredResultMap == null) { return; } - result.setResult(msg.getData()); + Set<String> ids = deferredResultMap.keySet(); + for (String id : ids) { + DeferredResultEx result = deferredResultMap.get(id); + if (result == null) { + return; + } + if (result.getFilter() != null) { + Object handler = result.getFilter().handler(msg.getData()); + result.getDeferredResult().setResult(handler); + }else { + result.getDeferredResult().setResult(msg.getData()); + } + + } + map.remove(msg.getKey()); } - map.remove(msg.getKey()); } } -- Gitblit v1.8.0