package com.battery.business.runtime; import java.io.IOException; import org.springframework.boot.ApplicationRunner; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.*; import com.battery.device.api.registry.*; import com.battery.device.api.model.AdapterCapabilities; import com.battery.device.simulator.*; /** 开发模拟器装配可整体移除,业务和真实 BTS 不引用此配置。 */ @Configuration @Profile("dev-simulator") public class DevelopmentSimulatorConfig { /** 按配置的监听端口装配开发模拟器;仅 dev-simulator 生效,容器关闭时释放其端口。 */ @Bean(destroyMethod = "close") @Profile("dev-simulator") public BtsDevelopmentSimulator btsDevelopmentSimulator(BtsSimulatorStateStore stateStore, @Value("${battery.dev-simulator.port:15020}") int simulatorPort) throws IOException { return new BtsDevelopmentSimulator(simulatorPort, stateStore); } /** * 将固定开发适配器按代码装配注册进运行时实例表,不写 t_device_adapter。 * *

其运行时能力只有发现与实时观测,控制能力为不支持,不向设备发送控制命令。

*/ @Bean @Profile("dev-simulator") public ApplicationRunner registerDevelopmentSimulatorAdapter(DeviceAdapterRegistry registry, BtsDevelopmentSimulator simulator, @Value("${battery.dev-simulator.port:15020}") int simulatorPort) { // 固定开发装配不进入 t_device_adapter,直接注册运行时实例。 // 注册模拟器对象本身,使发现与取数落在同一实例上,不再单独注入扩展观测 Bean。 return arguments -> registry.register(developmentSimulatorRuntimeConfig(simulatorPort), simulator); } private AdapterInstanceConfig developmentSimulatorRuntimeConfig(int simulatorPort) { return new AdapterInstanceConfig(BtsDevelopmentSimulator.ADAPTER_CODE, "BTS", BtsDevelopmentSimulator.HOST, simulatorPort, BtsDevelopmentSimulator.POLL_INTERVAL_MS, "Asia/Hong_Kong", true, new AdapterCapabilities(true, true, false, false)); } }