支持同账号多登陆

pull/30/head
taoshihan1991 4 years ago
parent 707cb69aec
commit 649c587d78

@ -23,7 +23,7 @@ type Message struct{
messageType int messageType int
} }
var clientList = make(map[string]*vistor) var clientList = make(map[string]*vistor)
var kefuList = make(map[string]*websocket.Conn) var kefuList = make(map[string][]*websocket.Conn)
var message = make(chan *Message) var message = make(chan *Message)
type TypeMessage struct { type TypeMessage struct {
@ -78,9 +78,11 @@ func NewChatServer(c *gin.Context){
Data: userInfo, Data: userInfo,
} }
str, _ := json.Marshal(msg) str, _ := json.Marshal(msg)
kefuConn,ok:=kefuList[visitor.to_id] kefuConns:=kefuList[visitor.to_id]
if ok && kefuConn!=nil{ if kefuConns!=nil{
kefuConn.WriteMessage(websocket.TextMessage,str) for _,kefuConn:=range kefuConns{
kefuConn.WriteMessage(websocket.TextMessage,str)
}
} }
} }
} }
@ -130,10 +132,22 @@ func sendPingToClient() {
models.UpdateVisitorStatus(uid,0) models.UpdateVisitorStatus(uid,0)
} }
} }
for kefuId, kfConn := range kefuList { for kefuId, kfConns := range kefuList {
err:=kfConn.WriteMessage(websocket.TextMessage,str)
if err != nil { var newkfConns =make([]*websocket.Conn,0)
for _,kefuConn:=range kfConns{
if(kefuConn==nil){
continue
}
err:=kefuConn.WriteMessage(websocket.TextMessage,str)
if err == nil {
newkfConns=append(newkfConns,kefuConn)
}
}
if newkfConns == nil {
delete(kefuList, kefuId) delete(kefuList, kefuId)
}else{
kefuList[kefuId]=newkfConns
} }
} }
time.Sleep(15 * time.Second) time.Sleep(15 * time.Second)
@ -162,7 +176,8 @@ func sendPingOnlineUsers() {
} }
sort.Strings(visitorIds) sort.Strings(visitorIds)
for kefuId, kfConn := range kefuList { for kefuId, kfConns := range kefuList {
result := make([]map[string]string, 0) result := make([]map[string]string, 0)
for _,visitorId:=range visitorIds{ for _,visitorId:=range visitorIds{
user:=clientList[visitorId] user:=clientList[visitorId]
@ -179,9 +194,17 @@ func sendPingOnlineUsers() {
Data: result, Data: result,
} }
str, _ := json.Marshal(msg) str, _ := json.Marshal(msg)
err:=kfConn.WriteMessage(websocket.TextMessage,str) var newkfConns =make([]*websocket.Conn,0)
if err != nil { for _,kefuConn:=range kfConns{
err:=kefuConn.WriteMessage(websocket.TextMessage,str)
if err == nil {
newkfConns=append(newkfConns,kefuConn)
}
}
if len(newkfConns) == 0 {
delete(kefuList, kefuId) delete(kefuList, kefuId)
}else{
kefuList[kefuId]=newkfConns
} }
} }
} }
@ -225,15 +248,24 @@ func singleBroadcaster(){
Data: userInfo, Data: userInfo,
} }
str, _ := json.Marshal(msg) str, _ := json.Marshal(msg)
kefuConn,ok:=kefuList[user.to_id] kefuConns:=kefuList[user.to_id]
if ok && kefuConn!=nil{ if kefuConns!=nil{
kefuConn.WriteMessage(websocket.TextMessage,str) for k,kefuConn:=range kefuConns{
log.Println(k,"xxxxxxxx")
kefuConn.WriteMessage(websocket.TextMessage,str)
}
} }
//客服上线 //客服上线
case "kfOnline": case "kfOnline":
json.Unmarshal(msgData, &clientMsg) json.Unmarshal(msgData, &clientMsg)
//客服id对应的连接 //客服id对应的连接
kefuList[clientMsg.Id] = conn var newKefuConns =[]*websocket.Conn{conn}
kefuConns:=kefuList[clientMsg.Id]
if kefuConns!=nil{
newKefuConns=append(newKefuConns,kefuConns...)
}
log.Println(newKefuConns)
kefuList[clientMsg.Id] = newKefuConns
//发送给客户 //发送给客户
if len(clientList) == 0 { if len(clientList) == 0 {
continue continue
@ -242,7 +274,6 @@ func singleBroadcaster(){
//客服接手 //客服接手
case "kfConnect": case "kfConnect":
json.Unmarshal(msgData, &clientMsg) json.Unmarshal(msgData, &clientMsg)
kefuList[clientMsg.Id] = conn
visitor,ok := clientList[clientMsg.ToId] visitor,ok := clientList[clientMsg.ToId]
if visitor==nil||!ok{ if visitor==nil||!ok{
continue continue
@ -270,12 +301,19 @@ func singleBroadcaster(){
} }
str, _ := json.Marshal(msg) str, _ := json.Marshal(msg)
conn.WriteMessage(websocket.TextMessage,str) conn.WriteMessage(websocket.TextMessage,str)
//kefuConns,ok := kefuList[clientMsg.Id]
//if kefuConns==nil||!ok{
// continue
//}
//for _,kefuConn:=range kefuConns{
// kefuConn.WriteMessage(websocket.TextMessage,str)
//}
case "chatMessage": case "chatMessage":
json.Unmarshal(msgData, &clientMsg) json.Unmarshal(msgData, &clientMsg)
models.CreateMessage(clientMsg.ToId,clientMsg.Id,clientMsg.Content,"visitor") models.CreateMessage(clientMsg.ToId,clientMsg.Id,clientMsg.Content,"visitor")
conn,ok := kefuList[clientMsg.ToId] kefuConns,ok := kefuList[clientMsg.ToId]
if conn==nil||!ok{ if kefuConns==nil||!ok{
continue continue
} }
msg := TypeMessage{ msg := TypeMessage{
@ -290,7 +328,9 @@ func singleBroadcaster(){
}, },
} }
str, _ := json.Marshal(msg) str, _ := json.Marshal(msg)
conn.WriteMessage(websocket.TextMessage,str) for _,kefuConn:=range kefuConns{
kefuConn.WriteMessage(websocket.TextMessage,str)
}
//心跳 //心跳
case "ping": case "ping":
msg := TypeMessage{ msg := TypeMessage{

Loading…
Cancel
Save