lives: Stop existing timer when changing mind
This commit is contained in:
parent
ce1d61b6c4
commit
5b2fddddc1
17
direct.go
17
direct.go
@ -309,6 +309,7 @@ func SurveyWSAdmin(c *gin.Context) {
|
|||||||
go func(c chan WSMessage, sid int) {
|
go func(c chan WSMessage, sid int) {
|
||||||
var v WSMessage
|
var v WSMessage
|
||||||
var err error
|
var err error
|
||||||
|
var surveyTimer *time.Timer
|
||||||
for {
|
for {
|
||||||
// Reset variable state
|
// Reset variable state
|
||||||
v.Corrected = false
|
v.Corrected = false
|
||||||
@ -326,14 +327,24 @@ func SurveyWSAdmin(c *gin.Context) {
|
|||||||
if survey, err := getSurvey(sid); err != nil {
|
if survey, err := getSurvey(sid); err != nil {
|
||||||
log.Println("Unable to retrieve survey:", err)
|
log.Println("Unable to retrieve survey:", err)
|
||||||
} else {
|
} else {
|
||||||
|
// Skip any existing scheduled timer
|
||||||
|
if surveyTimer != nil {
|
||||||
|
if !surveyTimer.Stop() {
|
||||||
|
<-surveyTimer.C
|
||||||
|
}
|
||||||
|
surveyTimer = nil
|
||||||
|
}
|
||||||
|
|
||||||
survey.Direct = v.QuestionId
|
survey.Direct = v.QuestionId
|
||||||
if v.Timer > 0 {
|
if v.Timer > 0 {
|
||||||
survey.Corrected = false
|
survey.Corrected = false
|
||||||
survey.Update()
|
survey.Update()
|
||||||
|
|
||||||
go func(corrected bool) {
|
// Save corrected state for the callback
|
||||||
time.Sleep(time.Duration(OffsetQuestionTimer+v.Timer) * time.Millisecond)
|
corrected := v.Corrected
|
||||||
|
|
||||||
|
surveyTimer = time.AfterFunc(time.Duration(OffsetQuestionTimer+v.Timer)*time.Millisecond, func() {
|
||||||
|
surveyTimer = nil
|
||||||
if corrected {
|
if corrected {
|
||||||
survey.Corrected = v.Corrected
|
survey.Corrected = v.Corrected
|
||||||
survey.Update()
|
survey.Update()
|
||||||
@ -347,7 +358,7 @@ func SurveyWSAdmin(c *gin.Context) {
|
|||||||
survey.WSWriteAll(WSMessage{Action: "pause"})
|
survey.WSWriteAll(WSMessage{Action: "pause"})
|
||||||
WSAdminWriteAll(WSMessage{Action: "pause", SurveyId: &survey.Id})
|
WSAdminWriteAll(WSMessage{Action: "pause", SurveyId: &survey.Id})
|
||||||
}
|
}
|
||||||
}(v.Corrected)
|
})
|
||||||
v.Corrected = false
|
v.Corrected = false
|
||||||
} else {
|
} else {
|
||||||
survey.Corrected = v.Corrected
|
survey.Corrected = v.Corrected
|
||||||
|
Reference in New Issue
Block a user