DataHouse/controllers/viewLog.go

58 lines
1.4 KiB
Go

package controllers
import (
"github.com/astaxie/beego"
"github.com/gorilla/websocket"
"git.kingpenguin.tk/chteufleur/datahouse.git/models/variables"
"git.kingpenguin.tk/chteufleur/datahouse.git/watchlog"
"net/http"
)
type WebSocketController struct {
beego.Controller
}
func (c *WebSocketController) Prepare() {
sess := c.GetSession(variables.SessionName)
if sess == nil {
c.Redirect(variables.LoginRouteNoRegex+variables.ViewLogRoute, 302)
} else {
c.Data["IsAuthentificated"] = true
}
c.Data["IsLog"] = true
c.Data["version"] = variables.Version
}
// Get method handles GET requests for WebSocketController.
func (c *WebSocketController) Get() {
c.Data["hostWS"] = "ws://" + c.Ctx.Request.Host + variables.WebSocketLogRoute
c.TplName = "watchlog.tpl"
}
// Join method handles WebSocket requests for WebSocketController.
func (this *WebSocketController) Join() {
// Upgrade from http request to WebSocket.
ws, err := websocket.Upgrade(this.Ctx.ResponseWriter, this.Ctx.Request, nil, 1024, 1024)
if _, ok := err.(websocket.HandshakeError); ok {
http.Error(this.Ctx.ResponseWriter, "Not a websocket handshake", 400)
return
} else if err != nil {
beego.Error("Cannot setup WebSocket connection:", err)
return
}
watchlog.ListWebSocket.PushFront(ws)
// Message receive loop.
for {
_, _, err := ws.ReadMessage()
if err != nil {
return
}
}
this.Ctx.Output.Body([]byte(""))
}