聊天修改

This commit is contained in:
苏尹岚
2020-08-31 17:53:19 +08:00
parent fe42195355
commit 3320ff2438

View File

@@ -29,10 +29,10 @@ type EventController struct {
} }
//连接的客户端,吧每个客户端都放进来 //连接的客户端,吧每个客户端都放进来
var clients = make(map[*websocket.Conn]bool) var clients = make(map[string][]*websocket.Conn)
//广播频道(通道) //广播频道(通道)
var broadcast = make(chan []*model.ImMessageRecord) var broadcast = make(chan map[string][]*model.ImMessageRecord)
// 配置升级程序(升级为websocket) // 配置升级程序(升级为websocket)
var upgrader = websocket.Upgrader{} var upgrader = websocket.Upgrader{}
@@ -129,9 +129,13 @@ func (c *EventController) TestWebsocket() {
log.Fatal(err) log.Fatal(err)
} }
defer ws.Close() defer ws.Close()
var (
vendorOrderID = c.GetString("vendorOrderID")
msgMap = make(map[string][]*model.ImMessageRecord)
)
//将当前客户端放入map中 //将当前客户端放入map中
clients[ws] = true clients[vendorOrderID] = append(clients[vendorOrderID], ws)
//聊天记录
db := dao.GetDB() db := dao.GetDB()
_, _, err = jxcontext.New(nil, c.GetString("token"), c.Ctx.ResponseWriter, c.Ctx.Request) _, _, err = jxcontext.New(nil, c.GetString("token"), c.Ctx.ResponseWriter, c.Ctx.Request)
if err != nil { if err != nil {
@@ -141,17 +145,6 @@ func (c *EventController) TestWebsocket() {
} }
ws.WriteJSON(&msg) ws.WriteJSON(&msg)
} }
// records, _ := dao.GetImMessageRecord(db, c.GetString("vendorOrderID"), "", 0, -1)
// if len(records) > 0 {
// 把消息 写入通道
// broadcast <- records
// } else {
// broadcast <- []*model.ImMessageRecord{
// &model.ImMessageRecord{
// Content: "第一条",
// },
// }
// }
c.EnableRender = false //Beego不启用渲染 c.EnableRender = false //Beego不启用渲染
@@ -161,11 +154,22 @@ func (c *EventController) TestWebsocket() {
err := ws.ReadJSON(&s) err := ws.ReadJSON(&s)
if err != nil { if err != nil {
globals.SugarLogger.Debugf("页面可能断开啦 ws.ReadJSON error: %v", err.Error()) globals.SugarLogger.Debugf("页面可能断开啦 ws.ReadJSON error: %v", err.Error())
delete(clients, ws) //删除map中的客户端 index := 0
break //结束循环 for k, v := range clients[vendorOrderID] {
if v == ws {
index = k
}
}
wsList := clients[vendorOrderID]
clients[vendorOrderID] = clients[vendorOrderID][0:0]
clients[vendorOrderID] = append(clients[vendorOrderID], wsList[0:index]...)
clients[vendorOrderID] = append(clients[vendorOrderID], wsList[index+1:len(wsList)]...)
// delete(clients, ws) //删除map中的客户端
break //结束循环
} else { } else {
//接受消息 业务逻辑 //接受消息 业务逻辑
broadcast <- s msgMap[vendorOrderID] = append(msgMap[vendorOrderID], s...)
broadcast <- msgMap
for _, v := range s { for _, v := range s {
dao.WrapAddIDCULDEntity(v, "") dao.WrapAddIDCULDEntity(v, "")
dao.CreateEntity(db, v) dao.CreateEntity(db, v)
@@ -186,14 +190,26 @@ func handleMessages() {
msg := <-broadcast msg := <-broadcast
globals.SugarLogger.Debugf("clients len %v", len(clients)) globals.SugarLogger.Debugf("clients len %v", len(clients))
//循环map客户端 //循环map客户端
for client := range clients { for vendorOrderID, mmsg := range msg {
//把通道中的消息发送给客户端 for _, client := range clients[vendorOrderID] {
globals.SugarLogger.Debugf("msg %v", utils.Format4Output(msg, false)) //把通道中的消息发送给客户端
err := client.WriteJSON(msg) globals.SugarLogger.Debugf("msg %v", utils.Format4Output(mmsg, false))
if err != nil { err := client.WriteJSON(mmsg)
globals.SugarLogger.Debugf("client.WriteJSON error: %v", err) if err != nil {
client.Close() //关闭 globals.SugarLogger.Debugf("client.WriteJSON error: %v", err)
delete(clients, client) //删除map中的客户端 client.Close() //关闭
index := 0
for k, v := range clients[vendorOrderID] {
if v == client {
index = k
}
}
wsList := clients[vendorOrderID]
clients[vendorOrderID] = clients[vendorOrderID][0:0]
clients[vendorOrderID] = append(clients[vendorOrderID], wsList[0:index]...)
clients[vendorOrderID] = append(clients[vendorOrderID], wsList[index+1:len(wsList)]...)
// delete(clients, client) //删除map中的客户端
}
} }
} }
} }