From 3b21f385cdae7d94fce1ebba6abb06a893f57114 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期二, 02 十一月 2021 10:40:29 +0800 Subject: [PATCH] 对需要向设备发起请求的http请求,使用缓存,等待设备请求返回的时候一次性释放所有请求 --- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java | 66 +++++++++++++++++++++++++++++--- 1 files changed, 59 insertions(+), 7 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 e6a7e41..ecfa666 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,6 +1,8 @@ package com.genersoft.iot.vmp.gb28181.transmit.callback; +import java.util.HashMap; import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.springframework.http.HttpStatus; @@ -45,22 +47,72 @@ public static final String CALLBACK_CMD_BROADCAST = "CALLBACK_BROADCAST"; - private Map<String, DeferredResult> map = new ConcurrentHashMap<String, DeferredResult>(); + private Map<String, Map<String, DeferredResult>> map = new ConcurrentHashMap<>(); - public void put(String key, DeferredResult result) { - map.put(key, result); + public void put(String key, String id, DeferredResult result) { + Map<String, DeferredResult> deferredResultMap = map.get(key); + if (deferredResultMap == null) { + deferredResultMap = new ConcurrentHashMap<>(); + map.put(key, deferredResultMap); + } + deferredResultMap.put(id, result); } - public DeferredResult get(String key) { - return map.get(key); + public DeferredResult get(String key, String id) { + Map<String, DeferredResult> deferredResultMap = map.get(key); + if (deferredResultMap == null) return null; + return deferredResultMap.get(id); } - + + public boolean exist(String key, String id){ + if (key == null) return false; + Map<String, DeferredResult> deferredResultMap = map.get(key); + if (id == null) { + return deferredResultMap != null; + }else { + return deferredResultMap != null && deferredResultMap.get(id) != null; + } + } + + /** + * 閲婃斁鍗曚釜璇锋眰 + * @param msg + */ public void invokeResult(RequestMessage msg) { - DeferredResult result = map.get(msg.getId()); + Map<String, DeferredResult> deferredResultMap = map.get(msg.getKey()); + if (deferredResultMap == null) { + return; + } + DeferredResult result = deferredResultMap.get(msg.getId()); if (result == null) { return; } result.setResult(new ResponseEntity<>(msg.getData(),HttpStatus.OK)); + deferredResultMap.remove(msg.getId()); + if (deferredResultMap.size() == 0) { + map.remove(msg.getKey()); + } + } + + /** + * 閲婃斁鎵�鏈夌殑璇锋眰 + * @param msg + */ + public void invokeAllResult(RequestMessage msg) { + Map<String, DeferredResult> 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) { + return; + } + result.setResult(new ResponseEntity<>(msg.getData(),HttpStatus.OK)); + } + map.remove(msg.getKey()); + } } -- Gitblit v1.8.0