c5_labsci/web/admin/demo/dyn/sse.go
2026-01-27 00:52:00 +08:00

73 lines
1.4 KiB
Go

package dyn
import (
"ciyon/web/admin"
c "ciyon/zciyon"
"net/http"
"time"
)
func SSE_get(w http.ResponseWriter, r *http.Request) bool {
if !c.SSEInit(w) {
w.Write([]byte("不支持SSE Flush"))
return false
}
post := c.NewCiyPost(w, r)
rsuser, err := admin.Verifyuser(r, c.CiyDB, post)
if err != nil {
c.SSESend_event(w, "请重新登录")
return false
}
if admin.Nopower(c.CiyDB, c.Toint(rsuser["id"]), "p610r") {
c.SSESend_event(w, "您未被授权操作")
return false
}
param := post.Get("bb")
c.SSESend_data(w, param)
for i := 0; i < 100; i++ {
if i%10 == 1 {
c.SSESend_data(w, "sse: "+c.Tostr(i), i)
}
if !c.SSESend_event(w, c.Tostr(i)) {
return true
}
c.Sleep(0.05)
}
c.SSESend_event(w, "ok")
return true
}
func SSE_get_ch(w http.ResponseWriter, r *http.Request) bool {
if !c.SSEInit(w) {
w.Write([]byte("不支持SSE Flush"))
return false
}
post := c.NewCiyPost(w, r)
rsuser, err := admin.Verifyuser(r, c.CiyDB, post)
if err != nil {
c.SSESend_event(w, "请重新登录")
return false
}
if admin.Nopower(c.CiyDB, c.Toint(rsuser["id"]), "p610r") {
c.SSESend_event(w, "您未被授权操作")
return false
}
param := post.Get("param")
c.SSESend_data(w, param)
done := r.Context().Done()
ticker := time.NewTicker(time.Second)
defer ticker.Stop()
for {
select {
case <-done:
return false
case <-ticker.C:
if !c.SSESend_data(w, time.Now().Format(time.RFC3339)) {
return true
}
}
}
}