yeg
2026-09-09 f38ca8a9f8454ac2eebdc268c89efd0e436b3cf2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.battery.device.api.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<String, CabinetCandidate> cabinets = new LinkedHashMap<>();
    private final Map<String, CollectorCandidate> collectors = new LinkedHashMap<>();
 
    @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()));
    }
}