Live: add timer questions
This commit is contained in:
parent
942875536b
commit
628c00b43c
4 changed files with 355 additions and 209 deletions
40
direct.go
40
direct.go
|
@ -14,10 +14,11 @@ import (
|
|||
)
|
||||
|
||||
var (
|
||||
WSClients = map[int64][]WSClient{}
|
||||
WSClientsMutex = sync.RWMutex{}
|
||||
WSAdmin = []WSClient{}
|
||||
WSAdminMutex = sync.RWMutex{}
|
||||
OffsetQuestionTimer uint = 700
|
||||
WSClients = map[int64][]WSClient{}
|
||||
WSClientsMutex = sync.RWMutex{}
|
||||
WSAdmin = []WSClient{}
|
||||
WSAdminMutex = sync.RWMutex{}
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
@ -152,6 +153,7 @@ type WSMessage struct {
|
|||
Stats map[string]interface{} `json:"stats,omitempty"`
|
||||
UserId *int64 `json:"user,omitempty"`
|
||||
Response string `json:"value,omitempty"`
|
||||
Timer uint `json:"timer,omitempty"`
|
||||
}
|
||||
|
||||
func (s *Survey) WSWriteAll(message WSMessage) {
|
||||
|
@ -271,7 +273,20 @@ func SurveyWSAdmin(w http.ResponseWriter, r *http.Request, ps httprouter.Params,
|
|||
if survey, err := getSurvey(sid); err != nil {
|
||||
log.Println("Unable to retrieve survey:", err)
|
||||
} else {
|
||||
survey.Direct = v.QuestionId
|
||||
if v.Timer > 0 {
|
||||
if *survey.Direct != 0 {
|
||||
var z int64 = 0
|
||||
survey.Direct = &z
|
||||
survey.Update()
|
||||
}
|
||||
go func() {
|
||||
time.Sleep(time.Duration(OffsetQuestionTimer+v.Timer) * time.Millisecond)
|
||||
survey.WSWriteAll(WSMessage{Action: "pause"})
|
||||
WSAdminWriteAll(WSMessage{Action: "pause", SurveyId: &survey.Id})
|
||||
}()
|
||||
} else {
|
||||
survey.Direct = v.QuestionId
|
||||
}
|
||||
_, err = survey.Update()
|
||||
if err != nil {
|
||||
log.Println("Unable to update survey:", err)
|
||||
|
@ -348,6 +363,20 @@ func SurveyWSAdmin(w http.ResponseWriter, r *http.Request, ps httprouter.Params,
|
|||
log.Println("Unable to update:", err)
|
||||
}
|
||||
}
|
||||
} else if v.Action == "mark_answered" && v.Response == "all" {
|
||||
if survey, err := getSurvey(sid); err != nil {
|
||||
log.Println("Unable to retrieve survey:", err)
|
||||
} else if asks, err := survey.GetAsks(v.Response == ""); err != nil {
|
||||
log.Println("Unable to retrieve asks:", err)
|
||||
} else {
|
||||
for _, ask := range asks {
|
||||
ask.Answered = true
|
||||
err = ask.Update()
|
||||
if err != nil {
|
||||
log.Println("Unable to update:", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log.Println("Unknown admin action:", v.Action)
|
||||
}
|
||||
|
@ -370,7 +399,6 @@ func (s *Survey) WSAdminWriteAll(message WSMessage) {
|
|||
defer WSAdminMutex.RUnlock()
|
||||
|
||||
for _, ws := range WSAdmin {
|
||||
log.Println("snd", message, ws.sid, s.Id)
|
||||
if ws.sid == s.Id {
|
||||
ws.c <- message
|
||||
}
|
||||
|
|
Reference in a new issue