[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kajongg] src: Merge branch 'Applications/16.08' into Applications/16.12
From:       Wolfgang Rohdewald <wolfgang () rohdewald ! de>
Date:       2016-12-03 18:59:19
Message-ID: E1cDFWp-0001rI-IW () code ! kde ! org
[Download RAW message or body]

Git commit aa4ab8ed24f2704f70fbefd6db773a8392e78520 by Wolfgang Rohdewald.
Committed on 03/12/2016 at 18:58.
Pushed by wrohdewald into branch 'master'.

Merge branch 'Applications/16.08' into Applications/16.12

* Applications/16.08:
  Debug.table: also log client info like kajongg version

A  +3    -0    src/user.py

https://commits.kde.org/kajongg/aa4ab8ed24f2704f70fbefd6db773a8392e78520

diff --cc src/user.py
index 260b41d,0000000..781e28c
mode 100644,000000..100644
--- a/src/user.py
+++ b/src/user.py
@@@ -1,145 -1,0 +1,148 @@@
 +#!/usr/bin/env python
 +# -*- coding: utf-8 -*-
 +
 +"""
 +Copyright (C) 2009-2014 Wolfgang Rohdewald <wolfgang@rohdewald.de>
 +
 +Kajongg is free software you can redistribute it and/or modify
 +it under the terms of the GNU General Public License as published by
 +the Free Software Foundation either version 2 of the License, or
 +(at your option) any later version.
 +
 +This program is distributed in the hope that it will be useful,
 +but WITHOUT ANY WARRANTY without even the implied warranty of
 +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 +GNU General Public License for more details.
 +
 +You should have received a copy of the GNU General Public License
 +along with this program if not, write to the Free Software
 +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 +
 +The DBPasswordChecker is based on an example from the book
 +Twisted Network Programming Essentials by Abe Fettig, 2006
 +O'Reilly Media, Inc., ISBN 0-596-10032-9
 +"""
 +
 +import datetime
 +
 +from twisted.internet.defer import fail
 +from twisted.spread import pb
 +
 +from common import Internal, Debug, Options, nativeString
 +from servercommon import srvError
 +from log import logDebug, m18nE
 +from query import Query
 +
 +class User(pb.Avatar):
 +
 +    """the twisted avatar"""
 +
 +    def __init__(self, userid):
 +        self.name = Query(
 +            'select name from player where id=?',
 +            (userid,
 +            )).records[0][0]
 +        self.mind = None
 +        self.server = None
 +        self.dbIdent = None
 +        self.voiceId = None
 +        self.maxGameId = None
 +        self.lastPing = None
 +        self.pinged()
 +
 +    def pinged(self):
 +        """time of last ping or message from user"""
 +        self.lastPing = datetime.datetime.now()
 +
 +    def source(self):
 +        """how did he connect?"""
 +        result = str(self.mind.broker.transport.getPeer())
 +        if 'UNIXAddress' in result:
 +            # socket: we want to get the socket name
 +            result = Options.socket
 +        return result
 +
 +    def attached(self, mind):
 +        """override pb.Avatar.attached"""
 +        self.mind = mind
 +        self.server.login(self)
 +
 +    def detached(self, dummyMind):
 +        """override pb.Avatar.detached"""
 +        if Debug.connections:
 +            logDebug(
 +                u'%s: connection detached from %s' %
 +                (self, self.source()))
 +        self.server.logout(self)
 +        self.mind = None
 +
 +    def perspective_setClientProperties(
 +            self, dbIdent, voiceId, maxGameId, clientVersion=None):
 +        """perspective_* methods are to be called remotely"""
 +        self.dbIdent = dbIdent
 +        self.voiceId = voiceId
 +        self.maxGameId = maxGameId
 +        clientVersion = nativeString(clientVersion)
 +        serverVersion = Internal.defaultPort
 +        if clientVersion != serverVersion:
 +            # we assume that versions x.y.* are compatible
 +            if clientVersion is None:
 +                # client passed no version info
 +                return fail(srvError(pb.Error,
 +                                     m18nE(
 +                                         'Your client has a version older than \
4.9.0 but you need %1 for this server'),  +                                     \
serverVersion))  +            else:
 +                commonDigits = len([x for x in zip(
 +                    clientVersion.split(b'.'),
 +                    serverVersion.split(b'.'))
 +                                    if x[0] == x[1]])
 +                if commonDigits < 2:
 +                    return fail(srvError(pb.Error,
 +                                         m18nE(
 +                                             'Your client has version %1 but you \
need %2 for this server'),  +                                         clientVersion \
or '<4.9.0',  +                                         \
'.'.join(serverVersion.split('.')[:2]) + '.*')) ++        if Debug.table:
++            logDebug(u'client has dbIdent={} voiceId={} maxGameId={} clientVersion \
{}'.format( ++                self.dbIdent, self.voiceId, self.maxGameId, \
clientVersion))  +        self.server.sendTables(self)
 +
 +    def perspective_ping(self):
 +        """perspective_* methods are to be called remotely"""
 +        return self.pinged()
 +
 +    def perspective_needRulesets(self, rulesetHashes):
 +        """perspective_* methods are to be called remotely"""
 +        return self.server.needRulesets(rulesetHashes)
 +
 +    def perspective_joinTable(self, tableid):
 +        """perspective_* methods are to be called remotely"""
 +        return self.server.joinTable(self, tableid)
 +
 +    def perspective_leaveTable(self, tableid):
 +        """perspective_* methods are to be called remotely"""
 +        return self.server.leaveTable(self, tableid)
 +
 +    def perspective_newTable(
 +            self, ruleset, playOpen, autoPlay, wantedGame, tableId=None):
 +        """perspective_* methods are to be called remotely"""
 +        wantedGame = nativeString(wantedGame)
 +        return self.server.newTable(self, ruleset, playOpen, autoPlay, wantedGame, \
tableId)  +
 +    def perspective_startGame(self, tableid):
 +        """perspective_* methods are to be called remotely"""
 +        return self.server.startGame(self, tableid)
 +
 +    def perspective_logout(self):
 +        """perspective_* methods are to be called remotely"""
 +        self.detached(None)
 +
 +    def perspective_chat(self, chatString):
 +        """perspective_* methods are to be called remotely"""
 +        return self.server.chat(chatString)
 +
 +    def __unicode__(self):
 +        return self.name
 +
 +


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic