|
|
|
|
package controller
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"encoding/json"
|
|
|
|
|
|
|
|
|
|
"flx/mister"
|
|
|
|
|
"flx/websocketservers"
|
|
|
|
|
"net/http"
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
"github.com/gorilla/websocket"
|
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// WsPage is a websocketservers handler
|
|
|
|
|
func WsPage(c *gin.Context) {
|
|
|
|
|
|
|
|
|
|
defer func() {
|
|
|
|
|
if r := recover(); r != nil {
|
|
|
|
|
log.Error("WsPage:", r)
|
|
|
|
|
}
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
// change the reqest to websocketservers model
|
|
|
|
|
//将http协议升级成websocket协议
|
|
|
|
|
conn, error := (&websocket.Upgrader{
|
|
|
|
|
//
|
|
|
|
|
ReadBufferSize: 1023,
|
|
|
|
|
//
|
|
|
|
|
WriteBufferSize: 1023,
|
|
|
|
|
//允许跨域
|
|
|
|
|
CheckOrigin: func(r *http.Request) bool {
|
|
|
|
|
return true
|
|
|
|
|
},
|
|
|
|
|
}).Upgrade(c.Writer, c.Request, nil)
|
|
|
|
|
|
|
|
|
|
if error != nil {
|
|
|
|
|
http.NotFound(c.Writer, c.Request)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//可以用传来的参数识别身份
|
|
|
|
|
roomid := c.Query("roomid")
|
|
|
|
|
uid := c.Query("userid") //staffid
|
|
|
|
|
log.Println(roomid, "------roomid-----uid----", uid)
|
|
|
|
|
// websocketservers connect
|
|
|
|
|
//这里是随机生成id
|
|
|
|
|
//每一次连接都会新开一个client,client.id通过uuid生成保证每次都是不同的
|
|
|
|
|
//client := &websocketservers.Client{Id: uuid.NewV4().String(), Socket: conn, Send: make(chan []byte)}
|
|
|
|
|
client := &websocketservers.Client{Id: uid, Socket: conn, Send: make(chan []byte)}
|
|
|
|
|
|
|
|
|
|
//注册一个新的链接
|
|
|
|
|
websocketservers.Manager.Register <- client
|
|
|
|
|
|
|
|
|
|
//启动协程收web端传过来的消息
|
|
|
|
|
go client.Read()
|
|
|
|
|
//启动协程把消息返回给web端
|
|
|
|
|
go client.Write()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 测试 websocket 连通性
|
|
|
|
|
func SendMessageByUid(c *gin.Context) {
|
|
|
|
|
|
|
|
|
|
defer func() {
|
|
|
|
|
if r := recover(); r != nil {
|
|
|
|
|
log.Error("SendMessageByUid:", r)
|
|
|
|
|
}
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
// 先声明map
|
|
|
|
|
var parametermap map[string]interface{}
|
|
|
|
|
// 再使用make函数创建一个非nil的map,nil map不能赋值
|
|
|
|
|
parametermap = make(map[string]interface{})
|
|
|
|
|
err := DecodeJsonPayload(c, ¶metermap)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Println(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if parametermap["userid"] != nil && parametermap["message"] != nil {
|
|
|
|
|
jsonMessage, _ := json.Marshal(&websocketservers.Message{
|
|
|
|
|
ContentType: "ssjk",
|
|
|
|
|
Sender: parametermap["userid"].(string),
|
|
|
|
|
Content: parametermap["message"].(string),
|
|
|
|
|
ContentTime: time.Now().Format("2006-01-02 15:04:05")})
|
|
|
|
|
// log.Println(string(jsonMessage))
|
|
|
|
|
websocketservers.Manager.SendMessageByClientId(jsonMessage, parametermap["userid"].(string))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func WsIndexs(c *gin.Context) {
|
|
|
|
|
|
|
|
|
|
defer func() {
|
|
|
|
|
if r := recover(); r != nil {
|
|
|
|
|
log.Error("WsIndexs:", r)
|
|
|
|
|
}
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
c.Header("content-type", "text/html;charset=utf-8")
|
|
|
|
|
c.String(http.StatusOK, string(mister.MeetingviewHtml))
|
|
|
|
|
return
|
|
|
|
|
}
|