聊天修改
This commit is contained in:
@@ -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)
|
||||
var upgrader = websocket.Upgrader{}
|
||||
@@ -129,9 +129,13 @@ func (c *EventController) TestWebsocket() {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer ws.Close()
|
||||
var (
|
||||
vendorOrderID = c.GetString("vendorOrderID")
|
||||
msgMap = make(map[string][]*model.ImMessageRecord)
|
||||
)
|
||||
//将当前客户端放入map中
|
||||
clients[ws] = true
|
||||
//聊天记录
|
||||
clients[vendorOrderID] = append(clients[vendorOrderID], ws)
|
||||
|
||||
db := dao.GetDB()
|
||||
_, _, err = jxcontext.New(nil, c.GetString("token"), c.Ctx.ResponseWriter, c.Ctx.Request)
|
||||
if err != nil {
|
||||
@@ -141,17 +145,6 @@ func (c *EventController) TestWebsocket() {
|
||||
}
|
||||
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不启用渲染
|
||||
|
||||
@@ -161,11 +154,22 @@ func (c *EventController) TestWebsocket() {
|
||||
err := ws.ReadJSON(&s)
|
||||
if err != nil {
|
||||
globals.SugarLogger.Debugf("页面可能断开啦 ws.ReadJSON error: %v", err.Error())
|
||||
delete(clients, ws) //删除map中的客户端
|
||||
break //结束循环
|
||||
index := 0
|
||||
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 {
|
||||
//接受消息 业务逻辑
|
||||
broadcast <- s
|
||||
msgMap[vendorOrderID] = append(msgMap[vendorOrderID], s...)
|
||||
broadcast <- msgMap
|
||||
for _, v := range s {
|
||||
dao.WrapAddIDCULDEntity(v, "")
|
||||
dao.CreateEntity(db, v)
|
||||
@@ -186,14 +190,26 @@ func handleMessages() {
|
||||
msg := <-broadcast
|
||||
globals.SugarLogger.Debugf("clients len %v", len(clients))
|
||||
//循环map客户端
|
||||
for client := range clients {
|
||||
//把通道中的消息发送给客户端
|
||||
globals.SugarLogger.Debugf("msg %v", utils.Format4Output(msg, false))
|
||||
err := client.WriteJSON(msg)
|
||||
if err != nil {
|
||||
globals.SugarLogger.Debugf("client.WriteJSON error: %v", err)
|
||||
client.Close() //关闭
|
||||
delete(clients, client) //删除map中的客户端
|
||||
for vendorOrderID, mmsg := range msg {
|
||||
for _, client := range clients[vendorOrderID] {
|
||||
//把通道中的消息发送给客户端
|
||||
globals.SugarLogger.Debugf("msg %v", utils.Format4Output(mmsg, false))
|
||||
err := client.WriteJSON(mmsg)
|
||||
if err != nil {
|
||||
globals.SugarLogger.Debugf("client.WriteJSON error: %v", err)
|
||||
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中的客户端
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user