접속 종료를 그룹에 알림

This commit is contained in:
2023-07-19 17:02:49 +09:00
parent 07cb4848fe
commit 4f1c79d3b7
5 changed files with 28 additions and 1 deletions

View File

@ -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)
}

View File

@ -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

View File

@ -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

2
go.mod
View File

@ -5,7 +5,7 @@ go 1.20
require (
github.com/go-redis/redis/v8 v8.11.5
go.mongodb.org/mongo-driver v1.11.7
repositories.action2quare.com/ayo/gocommon v0.0.0-20230719003525-e0e911f9e7da
repositories.action2quare.com/ayo/gocommon v0.0.0-20230719073844-112e037f4d4e
)
require (

2
go.sum
View File

@ -134,3 +134,5 @@ repositories.action2quare.com/ayo/gocommon v0.0.0-20230719003337-29b2f258507d h1
repositories.action2quare.com/ayo/gocommon v0.0.0-20230719003337-29b2f258507d/go.mod h1:PdpZ16O1czKKxCxn+0AFNaEX/0kssYwC3G8jR0V7ybw=
repositories.action2quare.com/ayo/gocommon v0.0.0-20230719003525-e0e911f9e7da h1:aXkXUzD06heQQhbvLZurzo+QBDYQrXKjmoLsnv3IV/g=
repositories.action2quare.com/ayo/gocommon v0.0.0-20230719003525-e0e911f9e7da/go.mod h1:PdpZ16O1czKKxCxn+0AFNaEX/0kssYwC3G8jR0V7ybw=
repositories.action2quare.com/ayo/gocommon v0.0.0-20230719073844-112e037f4d4e h1:WoQVMfkti9XZesqlZfU0Lh7Luib4Y7pOKU2YExNvfmo=
repositories.action2quare.com/ayo/gocommon v0.0.0-20230719073844-112e037f4d4e/go.mod h1:PdpZ16O1czKKxCxn+0AFNaEX/0kssYwC3G8jR0V7ybw=