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; } /**