|
@@ -16,7 +16,8 @@ var (
|
|
dir = "/home/root/competition/"
|
|
dir = "/home/root/competition/"
|
|
commandArgs = []string{"record", "--split", "--duration=1", "/pji_gps", "/data_read"}
|
|
commandArgs = []string{"record", "--split", "--duration=1", "/pji_gps", "/data_read"}
|
|
topic = "/cicv_competition"
|
|
topic = "/cicv_competition"
|
|
- examBeginUrl = "3"
|
|
|
|
|
|
+ urlExamBegin = "36.110.106.142/exam/begin"
|
|
|
|
+ urlExamEnd = "36.110.106.142/exam/end"
|
|
cacheMutex sync.Mutex
|
|
cacheMutex sync.Mutex
|
|
cacheTeamName map[string]time.Time
|
|
cacheTeamName map[string]time.Time
|
|
heartBeatTimeThreshold = 5 * time.Second // 心跳时间
|
|
heartBeatTimeThreshold = 5 * time.Second // 心跳时间
|
|
@@ -26,6 +27,8 @@ var (
|
|
// history record命令无法录制()
|
|
// history record命令无法录制()
|
|
func ForCompetition() {
|
|
func ForCompetition() {
|
|
go dataCollection()
|
|
go dataCollection()
|
|
|
|
+ go examBegin()
|
|
|
|
+ go examEnd()
|
|
}
|
|
}
|
|
|
|
|
|
// 全量数据采集
|
|
// 全量数据采集
|
|
@@ -72,7 +75,7 @@ func examBegin() {
|
|
{
|
|
{
|
|
if !util.ContainsKey(cacheTeamName, teamName) { // 1 如果缓存数组中没有此队名,代表考试开始,缓存此队名,和当前时间戳
|
|
if !util.ContainsKey(cacheTeamName, teamName) { // 1 如果缓存数组中没有此队名,代表考试开始,缓存此队名,和当前时间戳
|
|
cacheTeamName[teamName] = time.Now()
|
|
cacheTeamName[teamName] = time.Now()
|
|
- // todo 发送http请求到begin接口
|
|
|
|
|
|
+ _, _ = util.PostJsonResponseString(urlExamBegin, map[string]string{"teamName": teamName})
|
|
} else { // 2 如果缓存数组中有此队名,代表考试进行中,刷新时间戳
|
|
} else { // 2 如果缓存数组中有此队名,代表考试进行中,刷新时间戳
|
|
cacheTeamName[teamName] = time.Now()
|
|
cacheTeamName[teamName] = time.Now()
|
|
}
|
|
}
|
|
@@ -87,15 +90,15 @@ func examEnd() {
|
|
time.Sleep(time.Duration(1) * time.Second)
|
|
time.Sleep(time.Duration(1) * time.Second)
|
|
cacheMutex.Lock()
|
|
cacheMutex.Lock()
|
|
{
|
|
{
|
|
- keysToDelete := []string{}
|
|
|
|
|
|
+ var keysToDelete []string
|
|
for teamName, heartBeatTime := range cacheTeamName {
|
|
for teamName, heartBeatTime := range cacheTeamName {
|
|
if time.Since(heartBeatTime) > heartBeatTimeThreshold { // 检查缓存中的队名,如果超过心跳时间,则代表考试结束,删除缓存中的队名
|
|
if time.Since(heartBeatTime) > heartBeatTimeThreshold { // 检查缓存中的队名,如果超过心跳时间,则代表考试结束,删除缓存中的队名
|
|
keysToDelete = append(keysToDelete, teamName)
|
|
keysToDelete = append(keysToDelete, teamName)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- for _, key := range keysToDelete { // 检查缓存中的队名,如果超过心跳时间,则代表考试结束,删除缓存中的队名
|
|
|
|
- delete(cacheTeamName, key)
|
|
|
|
- // todo 发送http请求到end接口
|
|
|
|
|
|
+ for _, teamName := range keysToDelete { // 检查缓存中的队名,如果超过心跳时间,则代表考试结束,删除缓存中的队名
|
|
|
|
+ delete(cacheTeamName, teamName)
|
|
|
|
+ _, _ = util.PostJsonResponseString(urlExamEnd, map[string]string{"teamName": teamName})
|
|
}
|
|
}
|
|
}
|
|
}
|
|
cacheMutex.Unlock()
|
|
cacheMutex.Unlock()
|