From 1097cbb60e325e60af5ade6488b59e624a8fddb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 3 Dec 2020 18:25:02 +0800 Subject: [PATCH] aa --- business/model/message.go | 2 +- controllers/event_controller.go | 41 ++++++++++++++++++++++----------- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/business/model/message.go b/business/model/message.go index 916c9e89b..546e3b758 100644 --- a/business/model/message.go +++ b/business/model/message.go @@ -67,7 +67,7 @@ type ImMessageRecord struct { Weight int `json:"weight"` Height int `json:"height"` // UnReadFlag int `json:"unReadFlag"` //未读标志,为1则此条消息未读 - + Key string `orm:"-" json:"key"` UserInfo *GetUserResult `orm:"-" json:"userInfo"` } diff --git a/controllers/event_controller.go b/controllers/event_controller.go index f41121624..788878154 100644 --- a/controllers/event_controller.go +++ b/controllers/event_controller.go @@ -32,6 +32,7 @@ type EventController struct { //连接的客户端,吧每个客户端都放进来 var clients = make(map[int]map[string]*websocket.Conn) +var clientsHeart = make(map[string]*websocket.Conn) //广播频道(通道) var broadcast = make(chan *model.ImMessageRecord) @@ -74,6 +75,7 @@ func (c *EventController) TestWebsocket() { return } clientUser[userID] = ws + clientsHeart[userID] = ws for _, v := range messageGroups { if len(clients[v.GroupID]) > 0 { clients[v.GroupID][userID] = ws @@ -147,21 +149,32 @@ func handleMessages() { for { //读取通道中的消息 msg := <-broadcast - globals.SugarLogger.Debugf("clients len %v", len(clients)) - //循环map客户端 - for userID, client := range clients[msg.GroupID] { - //把通道中的消息发送给客户端 - user, err := dao.GetUser(dao.GetDB(), msg.UserID) - if err == nil { - msg.UserInfo = user + if msg.GroupID == 0 { + globals.SugarLogger.Debugf("heart %v", utils.Format4Output(msg, false)) + if err := clientsHeart[msg.UserID].WriteJSON(&model.ImMessageRecord{ + Key: "pang", + }); err != nil { + globals.SugarLogger.Debugf("heart client.WriteJSON error: %v", err) + clientsHeart[msg.UserID].Close() //关闭 + delete(clientsHeart, msg.UserID) } - 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[msg.GroupID], userID) - // delete(clients, client) //删除map中的客户端 + } else { + globals.SugarLogger.Debugf("clients len %v", len(clients)) + //循环map客户端 + for userID, client := range clients[msg.GroupID] { + //把通道中的消息发送给客户端 + user, err := dao.GetUser(dao.GetDB(), msg.UserID) + if err == nil { + msg.UserInfo = user + } + 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[msg.GroupID], userID) + // delete(clients, client) //删除map中的客户端 + } } } }