파티를 옮길 때 기존 파티에 남아있는 거 처럼 보이는 문제 수정

This commit is contained in:
2023-09-04 10:24:17 +09:00
parent 9b0c4a121a
commit f7173a4f49
4 changed files with 47 additions and 12 deletions

View File

@ -481,6 +481,34 @@ func (gp *groupParty) AcceptPartyInvitation(w http.ResponseWriter, r *http.Reque
return
}
pids, err := gp.rh.JSONGetString(mid.Hex(), "$.party.id")
if err != nil {
logger.Error("AcceptPartyInvitation failed. gp.rh.JSONGetString returns err :", err)
w.WriteHeader(http.StatusInternalServerError)
return
}
if len(pids) > 0 && len(pids[0]) > 0 {
// 기존에 이미 파티에 들어가 있다.
// 기존 파티에서는 탈퇴
oldgid, _ := primitive.ObjectIDFromHex(pids[0])
oldgd := &groupDoc{
id: oldgid,
rh: gp.rh,
}
// gid에는 제거 메시지 보냄
gp.sendUpstreamMessage(&wshandler.UpstreamMessage{
Target: "#" + oldgd.strid(),
Body: bson.M{
oldgd.tid(mid): bson.M{},
},
Tag: []string{"MemberDocFull"},
})
gp.leaveRoom(oldgid, mid)
}
gd := &groupDoc{
id: gid,
rh: gp.rh,
@ -499,6 +527,9 @@ func (gp *groupParty) AcceptPartyInvitation(w http.ResponseWriter, r *http.Reque
gp.enterRoom(gid, mid)
// 현재 내 파티를 기록
gp.rh.JSONSet(mid.Hex(), "$.party", bson.M{"id": gid.Hex()})
// 새 멤버에 그룹 전체를 알림
gp.sendUpstreamMessage(&wshandler.UpstreamMessage{
Target: mid.Hex(),
@ -531,13 +562,16 @@ func (gp *groupParty) QueryPartyMemberState(w http.ResponseWriter, r *http.Reque
return
}
states, _ := gp.rh.HMGet(gp.rh.Context(), mid, "party_state", "_ts").Result()
if states[0] != nil && len(states[0].(string)) > 0 {
w.Write([]byte(states[0].(string)))
} else if states[1] != nil && len(states[1].(string)) > 0 {
w.Write([]byte("connected"))
states, err := gp.rh.JSONGetString(mid, "$.party.state")
if err == redis.Nil {
return
}
if len(states) > 0 && len(states[0]) > 0 {
w.Write([]byte(states[0]))
} else {
w.Write([]byte("connected"))
}
}
// LeaveParty : 그룹에서 나감 or 내보냄
@ -593,6 +627,8 @@ func (gp *groupParty) LeaveParty(w http.ResponseWriter, r *http.Request) {
return
}
gp.rh.JSONDel(mid.Hex(), "$.party.id")
// mid한테는 빈 GroupDocFull을 보낸다. 그러면 지워짐
gp.sendUpstreamMessage(&wshandler.UpstreamMessage{
Target: mid.Hex(),
@ -624,7 +660,7 @@ func (gp *groupParty) updateMemberDocument(gid groupID, mid accountID, doc bson.
}
if newstate, ok := doc["_state"]; ok {
gp.rh.HSet(gp.rh.Context(), mid.Hex(), "party_state", newstate).Result()
gp.rh.JSONSet(mid.Hex(), "$.party.state", newstate)
}
gp.sendUpstreamMessage(&wshandler.UpstreamMessage{

View File

@ -181,13 +181,10 @@ func (tv *Tavern) RegisterHandlers(ctx context.Context, serveMux *http.ServeMux,
func (tv *Tavern) OnClientMessageReceived(sender *wshandler.Sender, messageType wshandler.WebSocketMessageType, body io.Reader) {
if messageType == wshandler.Connected {
logger.Println("OnClientMessageReceived : connected ", sender.Accid.Hex())
_, err := tv.redison.HSet(tv.redison.Context(), sender.Accid.Hex(), "_ts", time.Now().UTC().Unix()).Result()
tv.redison.Del(tv.redison.Context(), sender.Accid.Hex())
_, err := tv.redison.JSONSet(sender.Accid.Hex(), "$", bson.M{"_ts": time.Now().UTC().Unix()})
if err != nil {
logger.Println("OnClientMessageReceived HSet error :", err)
if *devflag {
tv.redison.Del(tv.redison.Context(), sender.Accid.Hex()).Result()
tv.redison.HSet(tv.redison.Context(), sender.Accid.Hex(), "_ts", time.Now().UTC().Unix()).Result()
}
}
for _, gt := range tv.groups {

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-20230901022951-26e968f7c9bf
repositories.action2quare.com/ayo/gocommon v0.0.0-20230904005440-d396a35713ad
)
require (

2
go.sum
View File

@ -156,3 +156,5 @@ repositories.action2quare.com/ayo/gocommon v0.0.0-20230831121619-9e9d91b5a30f h1
repositories.action2quare.com/ayo/gocommon v0.0.0-20230831121619-9e9d91b5a30f/go.mod h1:PdpZ16O1czKKxCxn+0AFNaEX/0kssYwC3G8jR0V7ybw=
repositories.action2quare.com/ayo/gocommon v0.0.0-20230901022951-26e968f7c9bf h1:lG83p89qnYwtYYLh92Fc5hXHPk3lKxKe1lZx1ShDu/Y=
repositories.action2quare.com/ayo/gocommon v0.0.0-20230901022951-26e968f7c9bf/go.mod h1:PdpZ16O1czKKxCxn+0AFNaEX/0kssYwC3G8jR0V7ybw=
repositories.action2quare.com/ayo/gocommon v0.0.0-20230904005440-d396a35713ad h1:/hwmPT3hKm/eSqvZ9LjamlvptygWZ87fg09OujRu5xo=
repositories.action2quare.com/ayo/gocommon v0.0.0-20230904005440-d396a35713ad/go.mod h1:PdpZ16O1czKKxCxn+0AFNaEX/0kssYwC3G8jR0V7ybw=