Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package controllers
- import (
- "net/http"
- "strconv"
- ls "laravel/session" )
- var(
- clients map[int][]*websocket.Conn
- ws *websocket.Conn )
- func init() {
- clients = make(map[int][]*websocket.Conn)
- }
- // WebSocketController handles WebSocket requests.
- type WebSocketController struct {
- beego.Controller
- }
- func (this *WebSocketController) Send() {
- val := this.Ctx.Input.Param(":id")
- id, err := strconv.ParseInt(val, 10, 32)
- if err != nil {
- beego.Error(err)
- }
- msg := this.GetString("msg")
- beego.Debug(id, " : ", msg)
- go this.testSend(int(id), msg)
- this.StopRun()}
- func (this *WebSocketController) SendData() {
- val := this.Ctx.Input.Param(":id")
- id, err := strconv.ParseInt(val, 10, 32)
- if err != nil {
- beego.Error(err)
- }
- msg := this.GetString("data")
- beego.Debug(id, " : ", msg)
- go this.testSend(int(id), msg)
- this.StopRun()
- }
- func (this *WebSocketController) Join() {
- userId, err := ls.GetUserId(this.Ctx.GetCookie("laravel_session"))
- if err != nil {
- beego.Debug("Error read session: ", err)
- this.StopRun()
- }
- beego.Debug("Connecting User ID: ", userId)
- // Upgrade from http request to WebSocket.
- ws, err = websocket.Upgrade(this.Ctx.ResponseWriter, this.Ctx.Request, nil, 1024, 1024)
- clients[userId] = append(clients[userId], ws)
- 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
- }
- for {
- _, p, err := ws.ReadMessage()
- if err != nil {
- beego.Debug("Disconnecting User ID: ", userId)
- this.StopRun() }
- beego.Debug(string(p))
- }
- }
- func (this *WebSocketController) testSend(id int, msg string) {
- data := []byte(msg)
- if len(clients) < 1 {
- beego.Debug("Clients not found")
- return
- }
- if id > 0 {
- if len(clients[id]) < 1 {
- beego.Debug("Clients not found")
- return
- }
- for k := range clients[id] {
- ws := clients[id][k]
- if ws != nil {
- if ws.WriteMessage(websocket.TextMessage, data) != nil {
- clients[id][k] = nil } } }
- var newSlice []*websocket.Conn
- for k:= range clients[id] {
- if clients[id][k] != nil {
- newSlice = append(newSlice, clients[id][k]) } }
- clients[id] = newSlice
- return
- } else {
- for k := range clients {
- this.testSend(k, msg) } }}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement