접속 종료를 그룹에 알림
This commit is contained in:
@ -39,4 +39,5 @@ type group interface {
|
||||
Dismiss(groupID primitive.ObjectID) error
|
||||
UpdateGroupDocument(groupID primitive.ObjectID, doc bson.M) error
|
||||
QueryGroupMembers(groupID primitive.ObjectID) (bson.M, error)
|
||||
MemberDisconnected(room string, mid primitive.ObjectID)
|
||||
}
|
||||
|
||||
@ -523,6 +523,21 @@ func (gm *groupInMemory) UpdateGroupDocument(gid groupID, frag bson.M) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (gm *groupInMemory) MemberDisconnected(room string, mid primitive.ObjectID) {
|
||||
midstr := mid.Hex()
|
||||
deleted, _ := gm.rh.JSONDel(room, "$._members."+midstr)
|
||||
if deleted > 0 {
|
||||
// 퇴장을 알림
|
||||
gm.sendUpstreamMessage(&wshandler.UpstreamMessage{
|
||||
Target: "#" + room,
|
||||
Body: bson.M{
|
||||
midstr: bson.M{},
|
||||
},
|
||||
Tag: []string{"MemberDocFull"},
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (cfg *groupConfig) prepareInMemory(ctx context.Context, typename string, sub *subTavern) (group, error) {
|
||||
// group document
|
||||
// member document
|
||||
|
||||
@ -217,6 +217,15 @@ func (sub *subTavern) OnClientMessageReceived(sender *wshandler.Sender, messageT
|
||||
if messageType == wshandler.Connected {
|
||||
logger.Println("OnClientMessageReceived : connected ", sender.Accid.Hex())
|
||||
} else if messageType == wshandler.Disconnected {
|
||||
var rooms []string
|
||||
dec := json.NewDecoder(body)
|
||||
if err := dec.Decode(&rooms); err == nil {
|
||||
for _, roomname := range rooms {
|
||||
for _, gt := range sub.groups {
|
||||
gt.MemberDisconnected(roomname, sender.Accid)
|
||||
}
|
||||
}
|
||||
}
|
||||
logger.Println("OnClientMessageReceived : disconnected ", sender.Accid.Hex())
|
||||
} else if messageType == wshandler.BinaryMessage {
|
||||
var msg map[string][]any
|
||||
|
||||
Reference in New Issue
Block a user