gob로 변경
This commit is contained in:
@ -276,13 +276,13 @@ func (gp *groupParty) RegisterApiFunctions() {
|
||||
// - body : 멤버의 속성 bson document
|
||||
func (gp *groupParty) JoinParty(w http.ResponseWriter, r *http.Request) {
|
||||
var data struct {
|
||||
Gid primitive.ObjectID `bson:"gid"`
|
||||
Mid primitive.ObjectID `bson:"mid"`
|
||||
Character bson.M `bson:"character"`
|
||||
First bool `bson:"first"`
|
||||
Gid primitive.ObjectID
|
||||
Mid primitive.ObjectID
|
||||
First bool
|
||||
Character bson.M
|
||||
}
|
||||
if err := gocommon.ReadJsonDocumentFromBody(r.Body, &data); err != nil {
|
||||
logger.Println("JoinParty failed. ReadJsonDocumentFromBody returns err :", err)
|
||||
if err := gocommon.MakeDecoder(r).Decode(&data); err != nil {
|
||||
logger.Println("JoinParty failed. DecodeGob returns err :", err)
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
@ -305,7 +305,7 @@ func (gp *groupParty) JoinParty(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
if gd == nil {
|
||||
// 그룹이 없다. 실패
|
||||
w.Write([]byte("{}"))
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
@ -329,11 +329,6 @@ func (gp *groupParty) JoinParty(w http.ResponseWriter, r *http.Request) {
|
||||
Body: gd.loadFull(),
|
||||
Tag: []string{"GroupDocFull"},
|
||||
})
|
||||
enc := json.NewEncoder(w)
|
||||
enc.Encode(map[string]string{
|
||||
"gid": gid.Hex(),
|
||||
"tid": gd.tid(mid),
|
||||
})
|
||||
} else if err != nil {
|
||||
logger.Error("JoinParty failed :", err)
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
@ -368,20 +363,20 @@ func (gp *groupParty) JoinParty(w http.ResponseWriter, r *http.Request) {
|
||||
// - (body) : 검색시 노출되는 document
|
||||
func (gp *groupParty) InviteToParty(w http.ResponseWriter, r *http.Request) {
|
||||
var doc struct {
|
||||
Gid primitive.ObjectID `bson:"gid"`
|
||||
Mid primitive.ObjectID `bson:"mid"`
|
||||
Targetid primitive.ObjectID `bson:"targetid"`
|
||||
Inviter bson.M `bson:"inviter"`
|
||||
Invitee bson.M `bson:"invitee"`
|
||||
Gid primitive.ObjectID
|
||||
Mid primitive.ObjectID
|
||||
Target primitive.ObjectID
|
||||
Inviter bson.M
|
||||
Invitee bson.M
|
||||
}
|
||||
|
||||
if err := gocommon.ReadJsonDocumentFromBody(r.Body, &doc); err != nil {
|
||||
logger.Println("InviteToParty failed. ReadJsonDocumentFromBody returns err :", err)
|
||||
if err := gocommon.MakeDecoder(r).Decode(&doc); err != nil {
|
||||
logger.Println("InviteToParty failed. DecodeGob returns err :", err)
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
targetid := doc.Targetid
|
||||
targetid := doc.Target
|
||||
gid := doc.Gid
|
||||
mid := doc.Mid
|
||||
|
||||
@ -412,6 +407,7 @@ func (gp *groupParty) InviteToParty(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
if gd == nil {
|
||||
gid = primitive.NewObjectID()
|
||||
gd, err = gp.createGroup(gid, mid, doc.Inviter)
|
||||
if err != nil {
|
||||
logger.Println("InviteToParty failed. gp.createGroup() return err :", err)
|
||||
@ -447,19 +443,17 @@ func (gp *groupParty) InviteToParty(w http.ResponseWriter, r *http.Request) {
|
||||
},
|
||||
Tag: []string{"Invitation"},
|
||||
})
|
||||
|
||||
w.Write([]byte(gd.strid()))
|
||||
}
|
||||
|
||||
func (gp *groupParty) AcceptPartyInvitation(w http.ResponseWriter, r *http.Request) {
|
||||
var doc struct {
|
||||
Gid primitive.ObjectID `bson:"gid"`
|
||||
Mid primitive.ObjectID `bson:"mid"`
|
||||
Tid string `bson:"tid"`
|
||||
Character bson.M `bson:"character"`
|
||||
Gid primitive.ObjectID
|
||||
Mid primitive.ObjectID
|
||||
Tid string
|
||||
Character bson.M
|
||||
}
|
||||
if err := gocommon.ReadJsonDocumentFromBody(r.Body, &doc); err != nil {
|
||||
logger.Println("AcceptPartyInvitation failed. ReadJsonDocumentFromBody returns err :", err)
|
||||
if err := gocommon.MakeDecoder(r).Decode(&doc); err != nil {
|
||||
logger.Println("AcceptPartyInvitation failed. DecodeGob returns err :", err)
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
@ -477,7 +471,7 @@ func (gp *groupParty) AcceptPartyInvitation(w http.ResponseWriter, r *http.Reque
|
||||
|
||||
if cnt == 0 {
|
||||
// 만료됨
|
||||
w.Write([]byte("expired"))
|
||||
w.WriteHeader(http.StatusGatewayTimeout)
|
||||
return
|
||||
}
|
||||
|
||||
@ -543,26 +537,22 @@ func (gp *groupParty) AcceptPartyInvitation(w http.ResponseWriter, r *http.Reque
|
||||
}
|
||||
|
||||
func (gp *groupParty) QueryPartyMemberState(w http.ResponseWriter, r *http.Request) {
|
||||
var data struct {
|
||||
Mid primitive.ObjectID `bson:"mid"`
|
||||
}
|
||||
|
||||
if err := gocommon.ReadJsonDocumentFromBody(r.Body, &data); err != nil {
|
||||
logger.Println("DenyPartyInvitation failed. ReadJsonDocumentFromBody returns err :", err)
|
||||
var mid primitive.ObjectID
|
||||
if err := gocommon.MakeDecoder(r).Decode(&mid); err != nil {
|
||||
logger.Println("DenyPartyInvitation failed. DecodeGob returns err :", err)
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
mid := data.Mid
|
||||
|
||||
states, err := gp.rh.JSONGetString(mid.Hex(), "$.party.state")
|
||||
if err == redis.Nil {
|
||||
if cnt, _ := gp.rh.Exists(gp.rh.Context(), mid.Hex()).Result(); cnt == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
states, _ := gp.rh.JSONGetString(mid.Hex(), "$.party.state")
|
||||
if len(states) > 0 && len(states[0]) > 0 {
|
||||
w.Write([]byte(states[0]))
|
||||
gocommon.MakeEncoder(w, r).Encode(states[0])
|
||||
} else {
|
||||
w.Write([]byte("connected"))
|
||||
gocommon.MakeEncoder(w, r).Encode("connected")
|
||||
}
|
||||
}
|
||||
|
||||
@ -610,12 +600,12 @@ func (gp *groupParty) updatePartyDocument(gid groupID, frag bson.M) error {
|
||||
|
||||
func (gp *groupParty) UpdatePartyDocument(w http.ResponseWriter, r *http.Request) {
|
||||
var data struct {
|
||||
Gid primitive.ObjectID `bson:"gid"`
|
||||
Doc bson.M `bson:"doc"`
|
||||
Gid primitive.ObjectID
|
||||
Doc bson.M
|
||||
}
|
||||
|
||||
if err := gocommon.ReadJsonDocumentFromBody(r.Body, &data); err != nil {
|
||||
logger.Println("UpdatePartyDocument failed. ReadJsonDocumentFromBody returns err :", err)
|
||||
if err := gocommon.MakeDecoder(r).Decode(&data); err != nil {
|
||||
logger.Println("UpdatePartyDocument failed. DecodeGob returns err :", err)
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
@ -631,17 +621,13 @@ func (gp *groupParty) UpdatePartyDocument(w http.ResponseWriter, r *http.Request
|
||||
}
|
||||
|
||||
func (gp *groupParty) QueryPartyMembers(w http.ResponseWriter, r *http.Request) {
|
||||
var data struct {
|
||||
Gid primitive.ObjectID `bson:"gid"`
|
||||
}
|
||||
|
||||
if err := gocommon.ReadJsonDocumentFromBody(r.Body, &data); err != nil {
|
||||
logger.Println("QueryPartyMembers failed. ReadJsonDocumentFromBody returns err :", err)
|
||||
var gid primitive.ObjectID
|
||||
if err := gocommon.MakeDecoder(r).Decode(&gid); err != nil {
|
||||
logger.Println("QueryPartyMembers failed. DecodeGob returns err :", err)
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
gid := data.Gid
|
||||
gd := groupDoc{
|
||||
id: gid,
|
||||
rh: gp.rh,
|
||||
@ -654,8 +640,7 @@ func (gp *groupParty) QueryPartyMembers(w http.ResponseWriter, r *http.Request)
|
||||
return
|
||||
}
|
||||
|
||||
enc := json.NewEncoder(w)
|
||||
if err := enc.Encode(members); err != nil {
|
||||
if err := gocommon.MakeEncoder(w, r).Encode(members); err != nil {
|
||||
logger.Error("QueryPartyMembers failed. writeBsonDoc return err :", err)
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
@ -705,27 +690,6 @@ func (gp *groupParty) find(id groupID) (*groupDoc, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (gp *groupParty) memberDisconnected(room string, mid primitive.ObjectID) {
|
||||
gid, err := primitive.ObjectIDFromHex(room)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
gd := &groupDoc{
|
||||
id: gid,
|
||||
rh: gp.rh,
|
||||
}
|
||||
|
||||
gd.removeMember(mid)
|
||||
// 퇴장을 알림
|
||||
gp.sendUpstreamMessage(&wshandler.UpstreamMessage{
|
||||
Target: "#" + room,
|
||||
Body: bson.M{
|
||||
gd.tid(mid): bson.M{},
|
||||
},
|
||||
Tag: []string{"MemberDocFull"},
|
||||
})
|
||||
}
|
||||
|
||||
func (gp *groupParty) ClientDisconnected(ctx wshandler.ApiCallContext) {
|
||||
gids, _ := gp.rh.JSONGetString(ctx.CallBy.Accid.Hex(), "$.party.id")
|
||||
|
||||
@ -734,11 +698,8 @@ func (gp *groupParty) ClientDisconnected(ctx wshandler.ApiCallContext) {
|
||||
gidstr := gids[0]
|
||||
gid, _ := primitive.ObjectIDFromHex(gidstr)
|
||||
|
||||
gp.sendUpstreamMessage(&wshandler.UpstreamMessage{
|
||||
Target: ctx.CallBy.Accid.Hex(),
|
||||
Body: bson.M{"gid": gid},
|
||||
Tag: []string{"GroupDocFull", gidstr},
|
||||
})
|
||||
// 나를 먼저 룸에서 빼야 나한테 메시지가 안감
|
||||
gp.leaveRoom(gid, ctx.CallBy.Accid)
|
||||
|
||||
// gid에는 제거 메시지 보냄
|
||||
gp.sendUpstreamMessage(&wshandler.UpstreamMessage{
|
||||
@ -749,7 +710,7 @@ func (gp *groupParty) ClientDisconnected(ctx wshandler.ApiCallContext) {
|
||||
Tag: []string{"MemberDocFull"},
|
||||
})
|
||||
|
||||
gp.leaveRoom(gid, ctx.CallBy.Accid)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user