diff options
Diffstat (limited to 'process.go')
-rw-r--r-- | process.go | 46 |
1 files changed, 23 insertions, 23 deletions
@@ -92,18 +92,9 @@ func (cc *ClientConn) process(pkt mt.Pkt) { return } - ip := cc.RemoteAddr().(*net.UDPAddr).IP.String() - if DefaultAuth().Banned(ip, cc.Name()) { - cc.Log("<-", "banned") - cc.Kick("Banned by proxy.") - return - } - - playersMu.Lock() - _, ok := players[cc.Name()] - if ok { - cc.Log("<-", "already connected") - ack, _ := cc.SendCmd(&mt.ToCltKick{Reason: mt.AlreadyConnected}) + if cc.Name() == "singleplayer" { + cc.Log("<-", "name is singleplayer") + ack, _ := cc.SendCmd(&mt.ToCltKick{Reason: mt.BadName}) select { case <-cc.Closed(): @@ -111,16 +102,13 @@ func (cc *ClientConn) process(pkt mt.Pkt) { cc.Close() } - playersMu.Unlock() return } - players[cc.Name()] = struct{}{} - playersMu.Unlock() - - if cc.Name() == "singleplayer" { - cc.Log("<-", "name is singleplayer") - ack, _ := cc.SendCmd(&mt.ToCltKick{Reason: mt.BadName}) + // user limit + if len(players) >= Conf().UserLimit { + cc.Log("<-", "player limit reached") + ack, _ := cc.SendCmd(&mt.ToCltKick{Reason: mt.TooManyClts}) select { case <-cc.Closed(): @@ -131,10 +119,18 @@ func (cc *ClientConn) process(pkt mt.Pkt) { return } - // user limit - if len(players) >= Conf().UserLimit { - cc.Log("<-", "player limit reached") - ack, _ := cc.SendCmd(&mt.ToCltKick{Reason: mt.TooManyClts}) + ip := cc.RemoteAddr().(*net.UDPAddr).IP.String() + if DefaultAuth().Banned(ip, cc.Name()) { + cc.Log("<-", "banned") + cc.Kick("Banned by proxy.") + return + } + + playersMu.Lock() + _, ok := players[cc.Name()] + if ok { + cc.Log("<-", "already connected") + ack, _ := cc.SendCmd(&mt.ToCltKick{Reason: mt.AlreadyConnected}) select { case <-cc.Closed(): @@ -142,9 +138,13 @@ func (cc *ClientConn) process(pkt mt.Pkt) { cc.Close() } + playersMu.Unlock() return } + players[cc.Name()] = struct{}{} + playersMu.Unlock() + // reply if DefaultAuth().Exists(cc.Name()) { cc.auth.method = mt.SRP |