You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
723 B
50 lines
723 B
package ws
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/gorilla/websocket"
|
|
"log"
|
|
"net/http"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
type Ws struct {
|
|
}
|
|
|
|
var users sync.Map
|
|
|
|
func init() {
|
|
users = sync.Map{}
|
|
}
|
|
|
|
var upGrader = websocket.Upgrader{
|
|
CheckOrigin: func(r *http.Request) bool {
|
|
return true
|
|
},
|
|
}
|
|
|
|
// @Title websocket
|
|
func (w *Ws) Ws(c *gin.Context) {
|
|
ws, err := upGrader.Upgrade(c.Writer, c.Request, nil)
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer ws.Close()
|
|
id := time.Now().UnixNano()
|
|
users.Store(id, ws)
|
|
defer func() {
|
|
users.Delete(id)
|
|
}()
|
|
for {
|
|
mt, message, err := ws.ReadMessage()
|
|
if err != nil {
|
|
return
|
|
}
|
|
log.Println(c.IsWebsocket())
|
|
if err := ws.WriteMessage(mt, message); err != nil {
|
|
break
|
|
}
|
|
}
|
|
}
|