mirror of
https://github.com/ergochat/ergo.git
synced 2024-11-22 20:09:41 +01:00
Merge pull request #815 from slingamn/issue814_lusers_registration
fix #814
This commit is contained in:
commit
5a300a9070
@ -1181,7 +1181,8 @@ func (client *Client) destroy(session *Session) {
|
|||||||
// should we destroy the whole client this time?
|
// should we destroy the whole client this time?
|
||||||
// BRB is not respected if this is a destroy of the whole client (i.e., session == nil)
|
// BRB is not respected if this is a destroy of the whole client (i.e., session == nil)
|
||||||
brbEligible := session != nil && (brbState == BrbEnabled || alwaysOn)
|
brbEligible := session != nil && (brbState == BrbEnabled || alwaysOn)
|
||||||
shouldDestroy := !client.destroyed && remainingSessions == 0 && !brbEligible
|
alreadyDestroyed := client.destroyed
|
||||||
|
shouldDestroy := !alreadyDestroyed && remainingSessions == 0 && !brbEligible
|
||||||
if shouldDestroy {
|
if shouldDestroy {
|
||||||
// if it's our job to destroy it, don't let anyone else try
|
// if it's our job to destroy it, don't let anyone else try
|
||||||
client.destroyed = true
|
client.destroyed = true
|
||||||
@ -1230,7 +1231,7 @@ func (client *Client) destroy(session *Session) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// decrement stats if we have no more sessions, even if the client will not be destroyed
|
// decrement stats if we have no more sessions, even if the client will not be destroyed
|
||||||
if shouldDestroy || remainingSessions == 0 {
|
if shouldDestroy || (!alreadyDestroyed && remainingSessions == 0) {
|
||||||
invisible := client.HasMode(modes.Invisible)
|
invisible := client.HasMode(modes.Invisible)
|
||||||
operator := client.HasMode(modes.LocalOperator) || client.HasMode(modes.Operator)
|
operator := client.HasMode(modes.LocalOperator) || client.HasMode(modes.Operator)
|
||||||
client.server.stats.Remove(registered, invisible, operator)
|
client.server.stats.Remove(registered, invisible, operator)
|
||||||
|
@ -54,22 +54,18 @@ func (cmd *Command) Run(server *Server, client *Client, session *Session, msg ir
|
|||||||
return cmd.handler(server, client, msg, rb)
|
return cmd.handler(server, client, msg, rb)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
// after each command, see if we can send registration to the client
|
||||||
|
if !exiting && !client.registered {
|
||||||
|
exiting = server.tryRegister(client, session)
|
||||||
|
}
|
||||||
|
|
||||||
// most servers do this only for PING/PONG, but we'll do it for any command:
|
// most servers do this only for PING/PONG, but we'll do it for any command:
|
||||||
if client.registered {
|
if client.registered {
|
||||||
// touch even if `exiting`, so we record the time of a QUIT accurately
|
// touch even if `exiting`, so we record the time of a QUIT accurately
|
||||||
session.idletimer.Touch()
|
session.idletimer.Touch()
|
||||||
}
|
}
|
||||||
|
|
||||||
if exiting {
|
if !exiting && client.registered && !cmd.leaveClientIdle {
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// after each command, see if we can send registration to the client
|
|
||||||
if !client.registered {
|
|
||||||
exiting = server.tryRegister(client, session)
|
|
||||||
}
|
|
||||||
|
|
||||||
if client.registered && !cmd.leaveClientIdle {
|
|
||||||
client.Active(session)
|
client.Active(session)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user