EnterPublicChannel이 왜 여러번 불림??? 방어코드 추가
This commit is contained in:
@ -111,6 +111,7 @@ func (gc *groupChat) ClientConnected(conn *websocket.Conn, callby *wshandler.Sen
|
||||
|
||||
func (gc *groupChat) ClientDisconnected(msg string, callby *wshandler.Sender) {
|
||||
docs, _ := gc.rh.JSONGetDocuments(callby.Accid.Hex(), "$.channel")
|
||||
logger.Println("groupchat ClientDisconnected docs :", callby.Alias, docs)
|
||||
|
||||
if len(docs) > 0 {
|
||||
for k, v := range docs[0] {
|
||||
@ -118,14 +119,18 @@ func (gc *groupChat) ClientDisconnected(msg string, callby *wshandler.Sender) {
|
||||
chanid := v.(string)
|
||||
gc.leaveRoom(chanid, callby.Accid)
|
||||
if k == "public" {
|
||||
cnt, _ := gc.rh.JSONDel(chanid, "$.members."+callby.Alias)
|
||||
cnt, err := gc.rh.JSONDel(chanid, "$.members."+callby.Alias)
|
||||
if cnt > 0 {
|
||||
gc.rh.JSONNumIncrBy(chanid, "$.size", -1)
|
||||
if cfg, ok := gc.chatConfig.Channels[chanid]; ok {
|
||||
cfg.inoutChan <- "-" + callby.Alias
|
||||
}
|
||||
} else if err != nil {
|
||||
logger.Println("groupchat ClientDisconnected JSONDel err :", err, callby.Alias)
|
||||
} else {
|
||||
logger.Println("groupchat ClientDisconnected JSONDel cnt 0 :", callby.Alias)
|
||||
}
|
||||
} else {
|
||||
logger.Println("groupchat ClientDisconnected leave private channel :", chanid, callby.Alias)
|
||||
gc.sendUpstreamMessage(&wshandler.UpstreamMessage{
|
||||
Target: "#" + chanid,
|
||||
Body: map[string]any{"sender": callby.Alias},
|
||||
@ -137,6 +142,8 @@ func (gc *groupChat) ClientDisconnected(msg string, callby *wshandler.Sender) {
|
||||
}
|
||||
|
||||
func (gc *groupChat) EnterPublicChannel(ctx wshandler.ApiCallContext) {
|
||||
gc.LeavePublicChannel(ctx)
|
||||
|
||||
chanid := ctx.Arguments[0].(string)
|
||||
if cfg, ok := gc.chatConfig.Channels[chanid]; ok {
|
||||
size, err := gc.rh.JSONObjLen(chanid, "$.members")
|
||||
@ -146,6 +153,7 @@ func (gc *groupChat) EnterPublicChannel(ctx wshandler.ApiCallContext) {
|
||||
// 입장
|
||||
_, err := gc.rh.JSONSet(chanid, "$.members."+ctx.CallBy.Alias, 1)
|
||||
if err == nil {
|
||||
logger.Println("groupchat EnterPublicChannel JSONSet :", chanid, ctx.CallBy.Alias)
|
||||
gc.enterRoom(chanid, ctx.CallBy.Accid)
|
||||
gc.rh.JSONSet(ctx.CallBy.Accid.Hex(), "$.channel.public", chanid)
|
||||
cfg.inoutChan <- "+" + ctx.CallBy.Alias
|
||||
@ -179,18 +187,22 @@ func (gc *groupChat) EnterPublicChannel(ctx wshandler.ApiCallContext) {
|
||||
}
|
||||
|
||||
func (gc *groupChat) LeavePublicChannel(ctx wshandler.ApiCallContext) {
|
||||
chanid := ctx.Arguments[0].(string)
|
||||
cnt, _ := gc.rh.JSONDel(ctx.CallBy.Accid.Hex(), "$.channel.public")
|
||||
if cnt > 0 {
|
||||
cnt, _ = gc.rh.JSONDel(chanid, "$.members."+ctx.CallBy.Alias)
|
||||
oldchans, _ := gc.rh.JSONGetString(ctx.CallBy.Accid.Hex(), "$.channel.public")
|
||||
for _, oldchan := range oldchans {
|
||||
cnt, err := gc.rh.JSONDel(oldchan, "$.members."+ctx.CallBy.Alias)
|
||||
if cnt > 0 {
|
||||
gc.leaveRoom(chanid, ctx.CallBy.Accid)
|
||||
gc.rh.JSONNumIncrBy(chanid, "$.size", -1)
|
||||
if cfg, ok := gc.chatConfig.Channels[chanid]; ok {
|
||||
logger.Println("groupchat LeavePublicChannel JSONDel :", oldchan, ctx.CallBy.Alias)
|
||||
gc.leaveRoom(oldchan, ctx.CallBy.Accid)
|
||||
if cfg, ok := gc.chatConfig.Channels[oldchan]; ok {
|
||||
cfg.inoutChan <- "-" + ctx.CallBy.Alias
|
||||
}
|
||||
} else if err != nil {
|
||||
logger.Println("groupchat LeavePublicChannel JSONDel err :", err, oldchan, ctx.CallBy.Alias)
|
||||
} else {
|
||||
logger.Println("groupchat LeavePublicChannel JSONDel cnt 0 :", oldchan, ctx.CallBy.Alias)
|
||||
}
|
||||
}
|
||||
gc.rh.JSONDel(ctx.CallBy.Accid.Hex(), "$.channel.public")
|
||||
}
|
||||
|
||||
func (gc *groupChat) TextMessage(ctx wshandler.ApiCallContext) {
|
||||
|
||||
Reference in New Issue
Block a user