파티를 옮길 때 기존 파티에 남아있는 거 처럼 보이는 문제 수정
This commit is contained in:
@ -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{
|
||||
|
||||
@ -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
2
go.mod
@ -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
2
go.sum
@ -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=
|
||||
|
||||
Reference in New Issue
Block a user