From cc4c0a010b3282393a2e94882b9c527c7aca6db1 Mon Sep 17 00:00:00 2001 From: HuangXin Date: Tue, 28 Apr 2020 10:45:23 +0800 Subject: [PATCH] =?UTF-8?q?OCT=20REM:=201.=20=E5=A2=9E=E5=8A=A0=E5=A4=84?= =?UTF-8?q?=E7=BD=AE=E8=AE=BE=E5=A4=87=E5=AF=B9=E8=B1=A1=E7=BC=93=E5=AD=98?= =?UTF-8?q?=EF=BC=8C=E9=81=BF=E5=85=8D=E6=AF=8F=E6=AC=A1=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E9=83=BD=E5=88=9B=E5=BB=BA=E4=B8=80=E4=B8=AA=E6=96=B0=E8=AE=BE?= =?UTF-8?q?=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dispose/dispose/DeviceRouter.java | 40 +++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/dispose/dispose/DeviceRouter.java b/src/main/java/com/dispose/dispose/DeviceRouter.java index d143d1c0..76453706 100644 --- a/src/main/java/com/dispose/dispose/DeviceRouter.java +++ b/src/main/java/com/dispose/dispose/DeviceRouter.java @@ -5,12 +5,29 @@ import com.dispose.common.GlobalVar; import com.dispose.common.IPAddrType; import com.dispose.dispose.impl.DPTechImpl; import com.dispose.dispose.impl.VirtualDeviceImpl; +import java.util.concurrent.ConcurrentHashMap; /** * The type Device router. */ public class DeviceRouter { + /** + * The constant deviceCacheMap. + */ + private static final ConcurrentHashMap DEVICE_CACHE_MAP = new ConcurrentHashMap<>(); + + /** + * Gets map key. + * + * @param devType the dev type + * @param ipAddr the ip addr + * @return the map key + */ + private static String getMapKey(int devType, String ipAddr) { + return devType + "_" + ipAddr; + } + /** * Device router factory dispose entry manager. * @@ -20,16 +37,25 @@ public class DeviceRouter { * @return the dispose entry manager */ public static DisposeEntryManager deviceRouterFactory(int devType, String ipAddr, IPAddrType ipType) { + String mapKey = getMapKey(devType, ipAddr); - if (GlobalVar.USED_VIRTUAL_DISPOSE_MODE) { - return new VirtualDeviceImpl(ipAddr); + if (DEVICE_CACHE_MAP.containsKey(mapKey)) { + return DEVICE_CACHE_MAP.get(mapKey); + } else { + if (GlobalVar.USED_VIRTUAL_DISPOSE_MODE) { + DisposeEntryManager dev = new VirtualDeviceImpl(ipAddr); + DEVICE_CACHE_MAP.put(mapKey, dev); + return dev; + } else if (devType == DisposeDeviceType.DPTECH_UMC.getCode()) { + DisposeEntryManager dev = new DPTechImpl(ipAddr); + DEVICE_CACHE_MAP.put(mapKey, dev); + return dev; + } } - if (devType == DisposeDeviceType.DPTECH_UMC.getCode()) { - return new DPTechImpl(ipAddr); - } - - return new VirtualDeviceImpl(ipAddr); + DisposeEntryManager dev = new VirtualDeviceImpl(ipAddr); + DEVICE_CACHE_MAP.put(mapKey, dev); + return dev; } /**