yeg
6 天以前 a04222c873e5e55f48c8d33b5c0bc46fa524ac8d
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
42
43
44
45
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。
     *
     * <p>其运行时能力只有发现与实时观测,控制能力为不支持,不向设备发送控制命令。</p>
     */
    @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));
    }
}