package com.battery.device.bts; import java.time.Instant; import java.util.List; import java.util.Map; import java.util.Set; import com.battery.device.api.DeviceAdapter; import com.battery.device.api.model.AdapterCapabilities; import com.battery.device.api.model.ChannelIdentity; import com.battery.device.api.model.DetectedChannel; import com.battery.device.api.model.RealtimeSnapshot; public final class BtsDeviceAdapter implements DeviceAdapter { private final String adapterCode; private final BtsTransport transport; private final BtsXmlCodec codec; private final AdapterCapabilities capabilities; public BtsDeviceAdapter(String adapterCode, BtsTransport transport, BtsXmlCodec codec) { this(adapterCode, transport, codec, AdapterCapabilities.observeOnly()); } public BtsDeviceAdapter(String adapterCode, BtsTransport transport, BtsXmlCodec codec, AdapterCapabilities capabilities) { this.adapterCode = adapterCode; this.transport = transport; this.codec = codec; this.capabilities = capabilities; } /** 返回本实例登记的适配器编码。 */ @Override public String adapterCode() { return adapterCode; } /** 返回本实例登记的能力标记;BTS 协议路线按只观测装配。 */ @Override public AdapterCapabilities capabilities() { return capabilities; } /** 通过设备信息命令读取通道登记事实,作为发现候选返回。 */ @Override public List discoverChannels() { return codec.parseDeviceInfo(transport.exchange(codec.getDeviceInfoRequest())); } /** 按给定通道集合请求一次实时状态;通道为空时不发请求。 */ @Override public Map inquire(Set channels) { if (channels == null || channels.isEmpty()) return Map.of(); return codec.parseSnapshots(transport.exchange(codec.inquireRequest(channels, false)), Instant.now()); } /** 关闭底层传输连接。 */ @Override public void close() { transport.close(); } }