diff --git a/core/group_memory.go b/core/group_memory.go index 5da87ab..3fd009c 100644 --- a/core/group_memory.go +++ b/core/group_memory.go @@ -10,7 +10,6 @@ import ( "fmt" "net/url" "os" - "reflect" "strings" "sync" "time" @@ -93,7 +92,7 @@ func (gd *groupDoc) updateBodyWithBson(src []byte) ([]byte, error) { return bson.Marshal(gd.Body) } -func (gd *groupDoc) updateBodyWithJson(src []byte) []byte { +func (gd *groupDoc) updateBodyWithJson(src []byte) GroupDocBody { gd.Lock() defer gd.Unlock() @@ -102,10 +101,10 @@ func (gd *groupDoc) updateBodyWithJson(src []byte) []byte { return nil } - return makeTypeMessage(gd.Body) + return gd.Body } -func (gd *groupDoc) updateBodyBsonToJson(bsonSrc []byte) []byte { +func (gd *groupDoc) updateBodyBsonToJson(bsonSrc []byte) GroupDocBody { gd.Lock() defer gd.Unlock() @@ -114,7 +113,7 @@ func (gd *groupDoc) updateBodyBsonToJson(bsonSrc []byte) []byte { return nil } - return makeTypeMessage(gd.Body) + return gd.Body } func (gd *groupDoc) updateBody(bsonSrc []byte) error { @@ -378,7 +377,7 @@ func (gd *groupDoc) iterateMembers(cb func(ticketID, *memberDoc)) { } } -func (gd *groupDoc) serializeFull(gid groupID) []byte { +func (gd *groupDoc) serializeFull(gid groupID) FullGroupDoc { gd.Lock() defer gd.Unlock() @@ -395,11 +394,11 @@ func (gd *groupDoc) serializeFull(gid groupID) []byte { }) } - return makeTypeMessage(FullGroupDoc{ + return FullGroupDoc{ Gid: gid, AllMembers: output, Body: gd.Body, - }) + } } type groupContainer struct { @@ -498,13 +497,6 @@ func (gm *groupInMemory) FindTicketID(gid groupID, mid groupID) ticketID { return primitive.NilObjectID } -func makeTypeMessage[T any](msg T) []byte { - var ptr *T - name := reflect.TypeOf(ptr).Elem().Name() - bt, _ := json.Marshal(bson.M{name: msg}) - return bt -} - // func sendTypedMessageDirect[T any](rconn *wshandler.Richconn, msg T) { // bt, _ := json.Marshal(makeTypeMessage(msg)) // rconn.WriteBytes(bt) @@ -559,7 +551,8 @@ func (gm *groupInMemory) InviteImplement(gid groupID, mid accountID, inviteeDoc // inviter한테 알려줘야 한다. gm.sendUpstreamMessage(&wshandler.UpstreamMessage{ Target: "@" + mid.Hex(), - Body: makeTypeMessage(InvitationFail(inviteeDoc)), + Body: inviteeDoc, + Tag: []string{"InvitationFail"}, }) return nil } @@ -577,12 +570,13 @@ func (gm *groupInMemory) InviteImplement(gid groupID, mid accountID, inviteeDoc gm.memberSync(gid, targetid, tid, newdoc, false) gm.sendUpstreamMessage(&wshandler.UpstreamMessage{ Target: "@" + targetid.Hex(), - Body: makeTypeMessage(Invitation{ + Body: Invitation{ GroupID: gid, TicketID: tid, Inviter: inviterDoc, ExpireAtUTC: newdoc.InviteExpire.Unix(), - }), + }, + Tag: []string{"Invitation"}, }) return nil @@ -855,7 +849,8 @@ func (gm *groupInMemory) Leave(gid groupID, mid accountID, tid ticketID) error { // 나한테는 빈 FullGroupDoc을 보낸다. gm.sendUpstreamMessage(&wshandler.UpstreamMessage{ Target: "@" + mid.Hex(), - Body: makeTypeMessage(FullGroupDoc{Gid: gid}), + Body: FullGroupDoc{Gid: gid}, + Tag: []string{"FullGroupDoc", gid.Hex()}, }) gm.sendLeaveRoomMessage(gid, targetmid) @@ -875,6 +870,7 @@ func (gm *groupInMemory) UpdateMemberDocument(gid groupID, mid accountID, doc bs gm.sendUpstreamMessage(&wshandler.UpstreamMessage{ Target: "#" + gid.Hex(), Body: gd.updateBodyWithJson(personalized), + Tag: []string{"GroupDocBody"}, }) return nil @@ -1015,16 +1011,17 @@ func (cfg *groupConfig) prepareInMemory(ctx context.Context, typename string, su if len(remain) == 0 { // gid 그룹 삭제 // 그룹 안에 있는 멤버에게 알림 - bt := makeTypeMessage(FullGroupDoc{Gid: gid}) gm.sendUpstreamMessage(&wshandler.UpstreamMessage{ Target: "#" + gid.Hex(), - Body: bt, + Body: FullGroupDoc{Gid: gid}, + Tag: []string{"FullGroupDoc"}, }) gm.groups.delete(gid) } else if string(senderHost) != config.macAddr { gm.sendUpstreamMessage(&wshandler.UpstreamMessage{ Target: "#" + gid.Hex(), Body: gd.updateBodyBsonToJson(remain), + Tag: []string{"GroupDocBody"}, }) } } else if string(senderHost) != config.macAddr { @@ -1090,7 +1087,8 @@ func (cfg *groupConfig) prepareInMemory(ctx context.Context, typename string, su } gm.sendUpstreamMessage(&wshandler.UpstreamMessage{ Target: "#" + gid.Hex(), - Body: makeTypeMessage(PublicMemberDoc{Tid: tid}), + Body: PublicMemberDoc{Tid: tid}, + Tag: []string{"PublicMemberDoc"}, }) } else { if isNewMember && updated.rconn == nil && rconn != nil { @@ -1099,10 +1097,11 @@ func (cfg *groupConfig) prepareInMemory(ctx context.Context, typename string, su // 업데이트 된 플레이어(새로 들어온 플레이어 포함)를 모두에게 알려준다. 본인 포함, invitee 제외 gm.sendUpstreamMessage(&wshandler.UpstreamMessage{ Target: "#" + gid.Hex(), - Body: makeTypeMessage(PublicMemberDoc{ + Body: PublicMemberDoc{ Tid: tid, memberDocCommon: updated.memberDocCommon, - }), + }, + Tag: []string{"PublicMemberDoc"}, }) } @@ -1113,6 +1112,7 @@ func (cfg *groupConfig) prepareInMemory(ctx context.Context, typename string, su gm.sendUpstreamMessage(&wshandler.UpstreamMessage{ Target: "@" + mid.Hex(), Body: gd.serializeFull(gid), + Tag: []string{"FullGroupDoc"}, }) } } diff --git a/go.mod b/go.mod index 5a5cc28..85d88e6 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.19 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-20230711033135-d7b26608df94 + repositories.action2quare.com/ayo/gocommon v0.0.0-20230711053010-4acb81a20d9c ) require ( diff --git a/go.sum b/go.sum index 50ed0b8..ddd9add 100644 --- a/go.sum +++ b/go.sum @@ -110,3 +110,7 @@ repositories.action2quare.com/ayo/gocommon v0.0.0-20230711005604-a42eb2888e97 h1 repositories.action2quare.com/ayo/gocommon v0.0.0-20230711005604-a42eb2888e97/go.mod h1:ng62uGMGXyQSeuxePG5gJAMtip4Rnspu5Tu7hgvaXns= repositories.action2quare.com/ayo/gocommon v0.0.0-20230711033135-d7b26608df94 h1:VrNj5gBFFN9/roWCxyBCZ2gu5k58eremNHQvQNPrfrU= repositories.action2quare.com/ayo/gocommon v0.0.0-20230711033135-d7b26608df94/go.mod h1:ng62uGMGXyQSeuxePG5gJAMtip4Rnspu5Tu7hgvaXns= +repositories.action2quare.com/ayo/gocommon v0.0.0-20230711035757-9fd0dd00cb7d h1:RdxKmMc7kHrTk+SvTYse2IGxmdDhbEDeM0fKAUW+G+w= +repositories.action2quare.com/ayo/gocommon v0.0.0-20230711035757-9fd0dd00cb7d/go.mod h1:ng62uGMGXyQSeuxePG5gJAMtip4Rnspu5Tu7hgvaXns= +repositories.action2quare.com/ayo/gocommon v0.0.0-20230711053010-4acb81a20d9c h1:SktFqjnc/UOMjJrq/brSw5lQjW1IA+KkB5YgeovusmQ= +repositories.action2quare.com/ayo/gocommon v0.0.0-20230711053010-4acb81a20d9c/go.mod h1:ng62uGMGXyQSeuxePG5gJAMtip4Rnspu5Tu7hgvaXns=