Advertisement
Guest User

Untitled

a guest
May 22nd, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 2.68 KB | None | 0 0
  1. package controllers
  2.  
  3. import (
  4.     "net/http"
  5.     "strconv"
  6.     ls "laravel/session"    )
  7. var(
  8.     clients map[int][]*websocket.Conn
  9.     ws *websocket.Conn )
  10.  
  11. func init() {
  12.     clients = make(map[int][]*websocket.Conn)
  13. }
  14.  
  15. // WebSocketController handles WebSocket requests.
  16. type WebSocketController struct {
  17.     beego.Controller
  18. }
  19.  
  20. func (this *WebSocketController) Send() {
  21.     val := this.Ctx.Input.Param(":id")
  22.     id, err := strconv.ParseInt(val, 10, 32)
  23.     if err != nil {
  24.         beego.Error(err)
  25.     }
  26.     msg := this.GetString("msg")
  27.     beego.Debug(id, " : ", msg)
  28.     go this.testSend(int(id), msg)
  29.     this.StopRun()}
  30.  
  31. func (this *WebSocketController) SendData() {
  32.     val := this.Ctx.Input.Param(":id")
  33.     id, err := strconv.ParseInt(val, 10, 32)
  34.     if err != nil {
  35.         beego.Error(err)
  36.     }
  37.     msg := this.GetString("data")
  38.     beego.Debug(id, " : ", msg)
  39.     go this.testSend(int(id), msg)
  40.     this.StopRun()
  41. }
  42. func (this *WebSocketController) Join() {
  43.     userId, err := ls.GetUserId(this.Ctx.GetCookie("laravel_session"))
  44.     if err != nil {
  45.         beego.Debug("Error read session: ", err)
  46.         this.StopRun()
  47.     }
  48.     beego.Debug("Connecting User ID: ", userId)
  49.     // Upgrade from http request to WebSocket.
  50.     ws, err = websocket.Upgrade(this.Ctx.ResponseWriter, this.Ctx.Request, nil, 1024, 1024)
  51.     clients[userId] = append(clients[userId], ws)
  52.     if _, ok := err.(websocket.HandshakeError); ok {
  53.         http.Error(this.Ctx.ResponseWriter, "Not a websocket handshake", 400)
  54.         return
  55.     } else if err != nil {
  56.         beego.Error("Cannot setup WebSocket connection:", err)
  57.         return
  58.     }
  59.  
  60.     for {
  61.         _, p, err := ws.ReadMessage()
  62.         if err != nil {
  63.             beego.Debug("Disconnecting User ID: ", userId)
  64.             this.StopRun()      }
  65.         beego.Debug(string(p))
  66.     }
  67. }
  68. func (this *WebSocketController) testSend(id int, msg string) {
  69.     data := []byte(msg)
  70.     if len(clients) < 1 {
  71.         beego.Debug("Clients not found")
  72.         return
  73.     }
  74.     if id > 0 {
  75.         if len(clients[id]) < 1 {
  76.             beego.Debug("Clients not found")
  77.             return
  78.         }
  79.         for k := range clients[id] {
  80.             ws := clients[id][k]
  81.             if ws != nil {
  82.                 if ws.WriteMessage(websocket.TextMessage, data) != nil {
  83.                     clients[id][k] = nil                }            }        }
  84.         var newSlice []*websocket.Conn
  85.         for k:= range clients[id] {
  86.             if clients[id][k] != nil {
  87.                 newSlice = append(newSlice, clients[id][k])            }        }
  88.         clients[id] = newSlice
  89.         return
  90.     } else {
  91.         for k := range clients {
  92.             this.testSend(k, msg)        }    }}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement