parent
dc401ae174
commit
a603c88a07
@ -1 +0,0 @@
|
||||
package websocket
|
@ -0,0 +1,95 @@
|
||||
package ws
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/taoshihan1991/imaptool/models"
|
||||
"log"
|
||||
)
|
||||
|
||||
func NewVisitorServer(c *gin.Context) {
|
||||
go kefuServerBackend()
|
||||
conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
|
||||
if err != nil {
|
||||
log.Print("upgrade:", err)
|
||||
return
|
||||
}
|
||||
//获取GET参数,创建WS
|
||||
vistorInfo := models.FindVisitorByVistorId(c.Query("visitor_id"))
|
||||
if vistorInfo.VisitorId == "" {
|
||||
c.JSON(200, gin.H{
|
||||
"code": 400,
|
||||
"msg": "访客不存在",
|
||||
})
|
||||
return
|
||||
}
|
||||
user := &User{
|
||||
Conn: conn,
|
||||
Name: vistorInfo.Name,
|
||||
Avator: vistorInfo.Avator,
|
||||
Id: vistorInfo.VisitorId,
|
||||
To_id: vistorInfo.ToId,
|
||||
}
|
||||
AddVisitorToList(user)
|
||||
|
||||
for {
|
||||
//接受消息
|
||||
var receive []byte
|
||||
messageType, receive, err := conn.ReadMessage()
|
||||
if err != nil {
|
||||
for uid, visitor := range ClientList {
|
||||
if visitor.Conn == conn {
|
||||
log.Println("删除用户", uid)
|
||||
delete(ClientList, uid)
|
||||
models.UpdateVisitorStatus(uid, 0)
|
||||
userInfo := make(map[string]string)
|
||||
userInfo["uid"] = uid
|
||||
userInfo["name"] = visitor.Name
|
||||
msg := TypeMessage{
|
||||
Type: "userOffline",
|
||||
Data: userInfo,
|
||||
}
|
||||
str, _ := json.Marshal(msg)
|
||||
kefuConns := KefuList[visitor.To_id]
|
||||
if kefuConns != nil {
|
||||
for _, kefuConn := range kefuConns {
|
||||
kefuConn.Conn.WriteMessage(websocket.TextMessage, str)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
message <- &Message{
|
||||
conn: conn,
|
||||
content: receive,
|
||||
context: c,
|
||||
messageType: messageType,
|
||||
}
|
||||
}
|
||||
}
|
||||
func AddVisitorToList(user *User) {
|
||||
//用户id对应的连接
|
||||
ClientList[user.Id] = user
|
||||
|
||||
userInfo := make(map[string]string)
|
||||
userInfo["uid"] = user.Id
|
||||
userInfo["username"] = user.Name
|
||||
userInfo["avator"] = user.Avator
|
||||
msg := TypeMessage{
|
||||
Type: "userOnline",
|
||||
Data: userInfo,
|
||||
}
|
||||
str, _ := json.Marshal(msg)
|
||||
|
||||
//新版
|
||||
mKefuConns := KefuList[user.To_id]
|
||||
if mKefuConns != nil {
|
||||
for _, kefu := range mKefuConns {
|
||||
kefu.Conn.WriteMessage(websocket.TextMessage, str)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in new issue