aboutsummaryrefslogtreecommitdiffstats
path: root/src/sqmod/sqmod_test/py/sqmod_test.py
blob: a20989209e1ea9b0ab9abd6975c54e717c6aef0d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from tojauth import TOJAuth
from asyncdb import AsyncDB
import mod
import com
import config
import imc.async
from imc.proxy import Proxy
from square import Square

class sqmod_test(Square):
    _sqmod_name = 'sqmod_test'

    def __init__(self, mod_idendesc, get_link_fn, sqid):
        self._sqid = sqid;
        self._idendesc = mod_idendesc
        self.get_link = get_link_fn
        
        self._accessid = mod.SquareMg.get_accessid_by_sqid(self._sqid)

        self.db = AsyncDB(config.MOD_DBNAME, config.MOD_DBUSER, 
                          config.MOD_DBPASSWORD)

        self._reg_path = 'sq/' + str(self._sqid) + '/'

        Proxy.instance.register_call(
            self._reg_path,'list_jurank',self.list_jurank)
        Proxy.instance.register_call(
            self._reg_path,'update_result',self.update_result)

    def unload(self):
        pass

    def join_square(self,uid):
        return mod.SquareMg.JOIN_ACCEPT

    def quit_square(self,uid):
        pass

    @staticmethod
    def create_square_data():
        pass
    
    @staticmethod
    def delete_square_data():
        pass


    @imc.async.caller
    def list_jurank(self):
        #TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_READ)

        cur = self.db.cursor();
        cur.execute('SELECT "name","song","score","maxcombo" FROM "SQMOD_TEST_JURANK" ORDER BY "score" DESC')

        ret = []
        for data in cur:
            ret.append({
                'name':data[0],
                'song':data[1],
                'score':data[2],
                'maxcombo':data[3],
            })

        return ret

    @imc.async.caller
    def update_result(self,name,song,score,maxcombo):
        #TOJAuth.check_access_func(self._accessid, TOJAuth.ACCESS_READ)

        cur = self.db.cursor();
        cur.execute('SELECT "score" FROM "SQMOD_TEST_JURANK" WHERE "name"=%s AND "song"=%s',
                    (name,song))

        if cur.rowcount == 1:
            if cur.fetchone()[0] > score:
                return 'Success'

        cur.upsert('SQMOD_TEST_JURANK',
                   {'name':name,'song':song},
                   {'score':score,'maxcombo':maxcombo})

        client_links = self.get_link('client')
        subpath = 'sq/' + str(self._sqid) + '/'
        for link in client_links:
            Proxy.instance.call_async(
                link + subpath, 'update_jurank', 10000, None)

        return 'Success'