aa
This commit is contained in:
@@ -67,7 +67,7 @@ type ImMessageRecord struct {
|
|||||||
Weight int `json:"weight"`
|
Weight int `json:"weight"`
|
||||||
Height int `json:"height"`
|
Height int `json:"height"`
|
||||||
// UnReadFlag int `json:"unReadFlag"` //未读标志,为1则此条消息未读
|
// UnReadFlag int `json:"unReadFlag"` //未读标志,为1则此条消息未读
|
||||||
|
Key string `orm:"-" json:"key"`
|
||||||
UserInfo *GetUserResult `orm:"-" json:"userInfo"`
|
UserInfo *GetUserResult `orm:"-" json:"userInfo"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ type EventController struct {
|
|||||||
|
|
||||||
//连接的客户端,吧每个客户端都放进来
|
//连接的客户端,吧每个客户端都放进来
|
||||||
var clients = make(map[int]map[string]*websocket.Conn)
|
var clients = make(map[int]map[string]*websocket.Conn)
|
||||||
|
var clientsHeart = make(map[string]*websocket.Conn)
|
||||||
|
|
||||||
//广播频道(通道)
|
//广播频道(通道)
|
||||||
var broadcast = make(chan *model.ImMessageRecord)
|
var broadcast = make(chan *model.ImMessageRecord)
|
||||||
@@ -74,6 +75,7 @@ func (c *EventController) TestWebsocket() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
clientUser[userID] = ws
|
clientUser[userID] = ws
|
||||||
|
clientsHeart[userID] = ws
|
||||||
for _, v := range messageGroups {
|
for _, v := range messageGroups {
|
||||||
if len(clients[v.GroupID]) > 0 {
|
if len(clients[v.GroupID]) > 0 {
|
||||||
clients[v.GroupID][userID] = ws
|
clients[v.GroupID][userID] = ws
|
||||||
@@ -147,21 +149,32 @@ func handleMessages() {
|
|||||||
for {
|
for {
|
||||||
//读取通道中的消息
|
//读取通道中的消息
|
||||||
msg := <-broadcast
|
msg := <-broadcast
|
||||||
globals.SugarLogger.Debugf("clients len %v", len(clients))
|
if msg.GroupID == 0 {
|
||||||
//循环map客户端
|
globals.SugarLogger.Debugf("heart %v", utils.Format4Output(msg, false))
|
||||||
for userID, client := range clients[msg.GroupID] {
|
if err := clientsHeart[msg.UserID].WriteJSON(&model.ImMessageRecord{
|
||||||
//把通道中的消息发送给客户端
|
Key: "pang",
|
||||||
user, err := dao.GetUser(dao.GetDB(), msg.UserID)
|
}); err != nil {
|
||||||
if err == nil {
|
globals.SugarLogger.Debugf("heart client.WriteJSON error: %v", err)
|
||||||
msg.UserInfo = user
|
clientsHeart[msg.UserID].Close() //关闭
|
||||||
|
delete(clientsHeart, msg.UserID)
|
||||||
}
|
}
|
||||||
globals.SugarLogger.Debugf("msg %v", utils.Format4Output(msg, false))
|
} else {
|
||||||
err = client.WriteJSON(msg)
|
globals.SugarLogger.Debugf("clients len %v", len(clients))
|
||||||
if err != nil {
|
//循环map客户端
|
||||||
globals.SugarLogger.Debugf("client.WriteJSON error: %v", err)
|
for userID, client := range clients[msg.GroupID] {
|
||||||
client.Close() //关闭
|
//把通道中的消息发送给客户端
|
||||||
delete(clients[msg.GroupID], userID)
|
user, err := dao.GetUser(dao.GetDB(), msg.UserID)
|
||||||
// delete(clients, client) //删除map中的客户端
|
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中的客户端
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user