a
This commit is contained in:
@@ -32,18 +32,16 @@ type EventController struct {
|
||||
|
||||
//连接的客户端,吧每个客户端都放进来
|
||||
var clients = make(map[int]map[string]*websocket.Conn)
|
||||
var heartClients = make(map[string]*websocket.Conn)
|
||||
|
||||
//广播频道(通道)
|
||||
var broadcast = make(chan *model.ImMessageRecord)
|
||||
var heartbit = make(chan *Message)
|
||||
|
||||
// 配置升级程序(升级为websocket)
|
||||
var upgrader = websocket.Upgrader{}
|
||||
|
||||
// 定义我们的消息对象
|
||||
type Message struct {
|
||||
UserID string `json:"userID"`
|
||||
Data string `json:"data"`
|
||||
Data interface{} `json:"data"`
|
||||
}
|
||||
|
||||
// @Title 测试websocket
|
||||
@@ -75,7 +73,6 @@ func (c *EventController) TestWebsocket() {
|
||||
if len(messageGroups) == 0 {
|
||||
return
|
||||
}
|
||||
heartClients[userID] = ws
|
||||
clientUser[userID] = ws
|
||||
for _, v := range messageGroups {
|
||||
if len(clients[v.GroupID]) > 0 {
|
||||
@@ -104,21 +101,12 @@ func (c *EventController) TestWebsocket() {
|
||||
//接收客户端的消息
|
||||
err := ws.ReadJSON(&s)
|
||||
if err != nil {
|
||||
fmt.Println("11111111111111111111111111111111111111111111111111111111111111111111")
|
||||
var m *Message
|
||||
if err2 := ws.ReadJSON(&m); err2 == nil {
|
||||
fmt.Println("22222222222222222222222222222222222222222222222222222", utils.Format4Output(m, false))
|
||||
m.UserID = userID
|
||||
heartbit <- m
|
||||
} else {
|
||||
fmt.Println("22222222222222222222222222222222222222222222222222222", err)
|
||||
globals.SugarLogger.Debugf("页面可能断开啦 ws.ReadJSON error: %v", err.Error())
|
||||
for k, _ := range clients {
|
||||
delete(clients[k], userID)
|
||||
}
|
||||
delete(heartClients, userID)
|
||||
break //结束循环
|
||||
globals.SugarLogger.Debugf("页面可能断开啦 ws.ReadJSON error: %v", err.Error())
|
||||
for k, _ := range clients {
|
||||
delete(clients[k], userID)
|
||||
}
|
||||
// delete(clients, ws) //删除map中的客户端
|
||||
break //结束循环
|
||||
} else {
|
||||
//接受消息 业务逻辑
|
||||
broadcast <- s
|
||||
@@ -157,35 +145,23 @@ func init() {
|
||||
//广播推送消息
|
||||
func handleMessages() {
|
||||
for {
|
||||
select {
|
||||
//读取通道中的消息
|
||||
case 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
|
||||
}
|
||||
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中的客户端
|
||||
}
|
||||
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
|
||||
}
|
||||
case h := <-heartbit:
|
||||
fmt.Println("33333333333333333333333333333333333333333333333333", utils.Format4Output(h, false))
|
||||
globals.SugarLogger.Debugf("h %v", utils.Format4Output(h, false))
|
||||
if err := heartClients[h.UserID].WriteJSON(&Message{
|
||||
Data: "pang",
|
||||
}); err != nil {
|
||||
globals.SugarLogger.Debugf("userheart client.WriteJSON error: %v", err)
|
||||
heartClients[h.UserID].Close()
|
||||
delete(heartClients, h.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中的客户端
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user