diff --git a/core/group_chat.go b/core/group_chat.go index 78b3cd9..e5b0edf 100644 --- a/core/group_chat.go +++ b/core/group_chat.go @@ -118,9 +118,12 @@ func (gc *groupChat) ClientDisconnected(msg string, callby *wshandler.Sender) { chanid := v.(string) gc.leaveRoom(chanid, callby.Accid) if k == "public" { - gc.rh.JSONNumIncrBy(chanid, "$.size", -1) - if cfg, ok := gc.chatConfig.Channels[chanid]; ok { - cfg.inoutChan <- "-" + callby.Alias + cnt, _ := 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 { gc.sendUpstreamMessage(&wshandler.UpstreamMessage{ @@ -179,10 +182,13 @@ 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 { - gc.leaveRoom(chanid, ctx.CallBy.Accid) - gc.rh.JSONNumIncrBy(chanid, "$.size", -1) - if cfg, ok := gc.chatConfig.Channels[chanid]; ok { - cfg.inoutChan <- "-" + ctx.CallBy.Alias + cnt, _ = gc.rh.JSONDel(chanid, "$.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 { + cfg.inoutChan <- "-" + ctx.CallBy.Alias + } } } }