message receiver 시그니쳐 변경
This commit is contained in:
@ -409,13 +409,15 @@ type groupContainer struct {
|
||||
|
||||
type groupInMemory struct {
|
||||
*groupConfig
|
||||
groupDocSync func(groupID, []byte) error
|
||||
memberSync func(groupID, accountID, ticketID, *memberDoc, bool) error
|
||||
rpcCall func([]byte) error
|
||||
hasConn func(accountID) *connection
|
||||
sendUpstreamMessage func(*wshandler.UpstreamMessage)
|
||||
sendCloseMessage func(accountID, string)
|
||||
groups groupContainer
|
||||
groupDocSync func(groupID, []byte) error
|
||||
memberSync func(groupID, accountID, ticketID, *memberDoc, bool) error
|
||||
rpcCall func([]byte) error
|
||||
hasConn func(accountID) *connection
|
||||
sendUpstreamMessage func(*wshandler.UpstreamMessage)
|
||||
sendEnterRoomMessage func(groupID, accountID)
|
||||
sendLeaveRoomMessage func(groupID, accountID)
|
||||
sendCloseMessage func(accountID, string)
|
||||
groups groupContainer
|
||||
}
|
||||
|
||||
func (gc *groupContainer) add(id groupID, doc *groupDoc) {
|
||||
@ -615,7 +617,7 @@ func (gm *groupInMemory) Invite(gid groupID, mid accountID, inviterDoc bson.M, i
|
||||
if rconn == nil {
|
||||
// mid가 있는 곳에서 처리를 해야 접속 끊겼을 때 콜백을 먼저 등록할 수 있다.
|
||||
// 콜백이 rconn에 먼저 등록되지 않으면 좀비 group이 생길 가능성이 생긴다.
|
||||
return "", rpc.Make(gm).To(targetid).Call(gid, mid, inviteeDoc, inviterDoc)
|
||||
return gid.Hex(), rpc.Make(gm).To(targetid).Call(gid, mid, inviteeDoc, inviterDoc)
|
||||
}
|
||||
|
||||
// 이제 여기는 mid가 InCharge이면서 rconn이 존재
|
||||
@ -633,6 +635,8 @@ func (gm *groupInMemory) Invite(gid groupID, mid accountID, inviterDoc bson.M, i
|
||||
}
|
||||
gm.groupDocSync(gid, bt)
|
||||
gm.memberSync(gid, mid, tid, newdoc, true)
|
||||
// 내가 wshandler room에 입장
|
||||
gm.sendEnterRoomMessage(gid, mid)
|
||||
} else {
|
||||
// targetid가 이미 멤버인지 미리 확인 가능
|
||||
if !gd.ticket(targetid).IsZero() {
|
||||
@ -670,6 +674,7 @@ func (gm *groupInMemory) AcceptInvitation(gid groupID, mid accountID, tid ticket
|
||||
|
||||
result, isNew := gd.addMember(mid, &tid, member)
|
||||
if result != nil {
|
||||
gm.sendEnterRoomMessage(gid, mid)
|
||||
return gid, gm.memberSync(gid, mid, tid, result, isNew)
|
||||
}
|
||||
|
||||
@ -726,11 +731,11 @@ func (gm *groupInMemory) DropPausedMember(gid primitive.ObjectID, mid primitive.
|
||||
// 드랍해야 한다.
|
||||
if gd.InCharge == mid {
|
||||
// 내가 방장인 경우
|
||||
gm.groupDocSync(gid, nil)
|
||||
return gm.groupDocSync(gid, nil)
|
||||
} else {
|
||||
// 내가 방장이 아닌 경우
|
||||
gd.removeMember(mid, &tid)
|
||||
gm.memberSync(gid, mid, tid, nil, false)
|
||||
return gm.memberSync(gid, mid, tid, nil, false)
|
||||
}
|
||||
}
|
||||
|
||||
@ -852,6 +857,7 @@ func (gm *groupInMemory) Leave(gid groupID, mid accountID, tid ticketID) error {
|
||||
Target: "@" + mid.Hex(),
|
||||
Body: makeTypeMessage(FullGroupDoc{Gid: gid}),
|
||||
})
|
||||
gm.sendLeaveRoomMessage(gid, targetmid)
|
||||
|
||||
return nil
|
||||
}
|
||||
@ -963,6 +969,12 @@ func (cfg *groupConfig) prepareInMemory(ctx context.Context, typename string, su
|
||||
sendUpstreamMessage: func(msg *wshandler.UpstreamMessage) {
|
||||
wsh.SendUpstreamMessage(region, msg)
|
||||
},
|
||||
sendEnterRoomMessage: func(gid groupID, accid accountID) {
|
||||
wsh.EnterRoom(region, gid.Hex(), accid)
|
||||
},
|
||||
sendLeaveRoomMessage: func(gid groupID, accid accountID) {
|
||||
wsh.LeaveRoom(region, gid.Hex(), accid)
|
||||
},
|
||||
sendCloseMessage: func(target accountID, text string) {
|
||||
wsh.SendCloseMessage(region, target.Hex(), text)
|
||||
},
|
||||
|
||||
@ -185,21 +185,22 @@ func (tv *Tavern) Cleanup() {
|
||||
}
|
||||
}
|
||||
|
||||
func (tv *Tavern) SocketMessageReceived(accid primitive.ObjectID, alias string, messageType wshandler.WebSocketMessageType, body io.Reader) {
|
||||
switch messageType {
|
||||
case wshandler.Connected:
|
||||
case wshandler.Disconnected:
|
||||
}
|
||||
// gidtype := msg.Conn.GetTag("gid")
|
||||
// if len(gidtype) > 0 {
|
||||
// tokens := strings.SplitN(gidtype, "@", 2)
|
||||
// gidobj, _ := primitive.ObjectIDFromHex(tokens[0])
|
||||
// gtype := tokens[1]
|
||||
// group := sub.groups[gtype]
|
||||
// if group != nil {
|
||||
// group.PauseMember(gidobj, msg.Alias, msg.Conn)
|
||||
// }
|
||||
}
|
||||
// func (tv *Tavern) SocketMessageReceived(accid primitive.ObjectID, alias string, messageType wshandler.WebSocketMessageType, body io.Reader) {
|
||||
// switch messageType {
|
||||
// case wshandler.Connected:
|
||||
|
||||
// case wshandler.Disconnected:
|
||||
// }
|
||||
// // gidtype := msg.Conn.GetTag("gid")
|
||||
// // if len(gidtype) > 0 {
|
||||
// // tokens := strings.SplitN(gidtype, "@", 2)
|
||||
// // gidobj, _ := primitive.ObjectIDFromHex(tokens[0])
|
||||
// // gtype := tokens[1]
|
||||
// // group := sub.groups[gtype]
|
||||
// // if group != nil {
|
||||
// // group.PauseMember(gidobj, msg.Alias, msg.Conn)
|
||||
// // }
|
||||
// }
|
||||
|
||||
func (tv *Tavern) prepare(ctx context.Context) error {
|
||||
redisClient, err := gocommon.NewRedisClient(config.RedisURL, 0)
|
||||
@ -275,11 +276,11 @@ func (tv *Tavern) RegisterHandlers(ctx context.Context, serveMux *http.ServeMux,
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sub *subTavern) clientMessageReceived(accid primitive.ObjectID, alias string, messageType wshandler.WebSocketMessageType, body io.Reader) {
|
||||
func (sub *subTavern) clientMessageReceived(sender *wshandler.Sender, messageType wshandler.WebSocketMessageType, body io.Reader) {
|
||||
if messageType == wshandler.Connected {
|
||||
sub.cm.add(accid, alias)
|
||||
sub.cm.add(sender.Accid, sender.Alias)
|
||||
} else if messageType == wshandler.Disconnected {
|
||||
sub.cm.remove(accid)
|
||||
sub.cm.remove(sender.Accid)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user