package main

import (
	commonConfig "cicv-data-closedloop/aarch64/pjisuv/common/config"
	commonService "cicv-data-closedloop/aarch64/pjisuv/common/service"
	slaveConfig "cicv-data-closedloop/aarch64/pjisuv/slave/package/config"
	slaveService "cicv-data-closedloop/aarch64/pjisuv/slave/package/service"
	"cicv-data-closedloop/common/config/c_log"
)

// init 初始化函数
func init() {
	//runtime.GOMAXPROCS(1)
	c_log.InitLog(commonConfig.LogDir, commonConfig.SlaveLogPrefix)
	// 初始化本地配置文件(第1处配置,在本地文件)
	commonConfig.InitLocalConfig()
	// 初始化Oss连接信息
	commonConfig.InitOssConfig()
	// 初始化业务逻辑配置信息,配置文件在oss上(第2处配置,在oss文件)
	commonConfig.InitCloudConfig()
	if commonConfig.CloudConfig.RefreshCloudConfig {
		go commonConfig.RefreshCloudConfig()
	}
	// 初始化数据闭环平台的配置(第3处配置,在数据闭环平台接口)
	commonConfig.InitPlatformConfig()
	// 初始化ros节点
	commonConfig.InitRosConfig()
	// 发送资源占用信息
	go commonConfig.SendResourceUsage()
	// 维护data目录缓存的包数量
	go commonService.BagCacheClean()
	// 磁盘占用过高时根据缓存策略处理copy目录
	go commonService.DiskClean()
	slaveConfig.InitTcpListener()
	commonConfig.InitKillSignalListener(commonConfig.CloudConfig.Hosts[1].Ip)
	// 等待重启,接收到重启信号,会把信号分发给以下channel
	go commonService.WaitKillSelf()
}

// main 主函数
func main() {

	// 1 负责打包数据到data目录
	go commonService.BagRecord(commonConfig.CloudConfig.Hosts[1].Name)
	// 2 负责监控故障,并修改timeWindow
	go slaveService.PrepareTimeWindowProducerQueue()
	// 3
	go slaveService.RunTimeWindowProducerQueue()
	// 4 排队运行时间窗口
	go commonService.RunTimeWindowConsumerQueue()

	// 阻塞主线程,等待其他线程执行。
	select {}

}