| | |
| | | public final class InMemoryDeviceDiscoveryCandidateStore implements DeviceDiscoveryCandidateStore |
| | | { |
| | | private final Map<String, CabinetCandidate> cabinets = new LinkedHashMap<>(); |
| | | private final Map<String, CollectorCandidate> collectors = new LinkedHashMap<>(); |
| | | |
| | | /** 按设备编码 upsert 本轮检测柜观测;本轮未返回的候选保留到逻辑过期。 */ |
| | | @Override |
| | | public synchronized void recordCabinets(List<CabinetCandidate> candidates) |
| | | { |
| | | candidates.forEach(item -> cabinets.put(item.deviceCode(), item)); |
| | | } |
| | | |
| | | @Override |
| | | public synchronized void replaceCollectors(String adapterCode, List<CollectorCandidate> candidates) |
| | | { |
| | | collectors.values().removeIf(item -> item.adapterCode().equals(adapterCode)); |
| | | candidates.forEach(item -> collectors.put(item.deviceCode(), item)); |
| | | } |
| | | |
| | | /** 删除指定适配器名下的检测柜候选;仅供人工重置或联调清理。 */ |
| | | @Override |
| | | public synchronized void removeAdapter(String adapterCode) |
| | | { |
| | | cabinets.values().removeIf(item -> item.adapterCode().equals(adapterCode)); |
| | | collectors.values().removeIf(item -> item.adapterCode().equals(adapterCode)); |
| | | } |
| | | |
| | | /** 返回指定时刻尚未过期的候选,并清理已过期条目。 */ |
| | | @Override |
| | | public synchronized CandidateSnapshot snapshot(Instant now) |
| | | { |
| | | cabinets.values().removeIf(item -> !item.expiresAt().isAfter(now)); |
| | | collectors.values().removeIf(item -> !item.expiresAt().isAfter(now)); |
| | | return new CandidateSnapshot(List.copyOf(cabinets.values()), List.copyOf(collectors.values())); |
| | | return new CandidateSnapshot(List.copyOf(cabinets.values())); |
| | | } |
| | | } |