package controllers
import (
"encoding/json"
"github.com/astaxie/beego"
"github.com/gorilla/websocket"
"net/http"
"youku/models"
)
type BarrageController struct {
beego.Controller
}
type WsData struct {
CurrentTime int
EpisodesId int
}
var (
// 跨域
upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true
},
}
)
// 获取弹幕websocket
// @router /barrage/ws [*]
func (this *BarrageController) BarrageWs() {
var (
conn *websocket.Conn
err error
data []byte
barrages []models.BarrageData
)
if conn, err = upgrader.Upgrade(this.Ctx.ResponseWriter, this.Ctx.Request, nil); err != nil {
goto ERR
}
for {
if _, data, err = conn.ReadMessage(); err != nil {
goto ERR
}
var wsData WsData
// 获取json数据
json.Unmarshal([]byte(data), &wsData)
endTime := wsData.CurrentTime + 60 // 一分钟内的弹幕
// 获取弹幕列表
_, barrages, err = models.BarrageList(wsData.EpisodesId, wsData.CurrentTime, endTime)
if err == nil {
// 发送数据
if err := conn.WriteJSON(barrages); err != nil {
goto ERR
}
}
}
ERR:
conn.Close()
}