package com.battery.device.discovery; import java.time.Instant; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** 测试使用的候选存储,实现与 Redis 适配器相同的逻辑过期语义。 */ public final class InMemoryDeviceDiscoveryCandidateStore implements DeviceDiscoveryCandidateStore { private final Map cabinets = new LinkedHashMap<>(); private final Map collectors = new LinkedHashMap<>(); @Override public synchronized void recordCabinets(List candidates) { candidates.forEach(item -> cabinets.put(item.deviceCode(), item)); } @Override public synchronized void replaceCollectors(String adapterCode, List 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())); } }