解决跨域ws

pull/23/head
陶士涵 4 years ago
parent dc401ae174
commit a603c88a07

@ -5,7 +5,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
"github.com/taoshihan1991/imaptool/models"
myws "github.com/taoshihan1991/imaptool/websocket"
"github.com/taoshihan1991/imaptool/ws"
"log"
"sort"
"time"
@ -276,6 +276,16 @@ func singleBroadcaster() {
Data: userInfo,
}
str, _ := json.Marshal(msg)
//新版
mKefuConns := ws.KefuList[user.to_id]
if mKefuConns != nil {
for _, kefu := range mKefuConns {
kefu.Conn.WriteMessage(websocket.TextMessage, str)
}
}
//兼容旧版
kefuConns := kefuList[user.to_id]
if kefuConns != nil {
for k, kefuConn := range kefuConns {
@ -283,13 +293,7 @@ func singleBroadcaster() {
kefuConn.WriteMessage(websocket.TextMessage, str)
}
}
mKefuConns := myws.KefuList[user.to_id]
if mKefuConns != nil {
for k, kefu := range mKefuConns {
log.Println(k, "xxxxxxxx")
kefu.Conn.WriteMessage(websocket.TextMessage, str)
}
}
//客户上线发微信通知
go SendServerJiang(userInfo["username"])
sendPingOnlineUsers()

@ -4,7 +4,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/taoshihan1991/imaptool/controller"
"github.com/taoshihan1991/imaptool/middleware"
"github.com/taoshihan1991/imaptool/websocket"
"github.com/taoshihan1991/imaptool/ws"
)
func InitApiRouter(engine *gin.Engine) {
@ -14,7 +14,8 @@ func InitApiRouter(engine *gin.Engine) {
engine.POST("/check_auth", middleware.JwtApiMiddleware, controller.MainCheckAuth)
//前后聊天
engine.GET("/chat_server", middleware.Ipblack, controller.NewChatServer)
engine.GET("/ws_kefu", middleware.JwtApiMiddleware, websocket.NewKefuServer)
engine.GET("/ws_kefu", middleware.JwtApiMiddleware, ws.NewKefuServer)
engine.GET("/ws_visitor", ws.NewVisitorServer)
//获取消息
engine.GET("/messages", controller.GetVisitorMessage)

@ -1 +0,0 @@
package websocket

@ -1,4 +1,4 @@
package websocket
package ws
import (
"encoding/json"
@ -25,6 +25,14 @@ func NewKefuServer(c *gin.Context) {
log.Print("upgrade:", err)
return
}
//获取GET参数,创建WS
var kefu User
kefu.Id = kefuInfo.Name
kefu.Name = kefuInfo.Nickname
kefu.Avator = kefuInfo.Avator
kefu.Conn = conn
AddKefuToList(&kefu)
for {
//接受消息
var receive []byte
@ -34,14 +42,6 @@ func NewKefuServer(c *gin.Context) {
return
}
//获取GET参数,创建WS
var kefu User
kefu.Id = kefuInfo.Name
kefu.Name = kefuInfo.Nickname
kefu.Avator = kefuInfo.Avator
kefu.Conn = conn
AddKefuToList(&kefu)
message <- &Message{
conn: conn,
content: receive,
@ -65,6 +65,7 @@ func AddKefuToList(kefu *User) {
}
}
}
log.Println(newKefuConns)
KefuList[kefu.Id] = newKefuConns
}
@ -79,7 +80,7 @@ func kefuServerBackend() {
continue
}
msgType := typeMsg.Type.(string)
log.Println("客户端:", msgType)
log.Println("客户端:", string(message.content))
switch msgType {
//心跳

@ -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)
}
}
}

@ -1,8 +1,9 @@
package websocket
package ws
import (
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
"net/http"
)
type User struct {
@ -45,5 +46,10 @@ func init() {
upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
// 解决跨域问题
CheckOrigin: func(r *http.Request) bool {
return true
},
}
}
Loading…
Cancel
Save