Beispiel #1
0
    def verify_game_save(self, location: str, refid: str, packet: int,
                         block: int, exp: int) -> None:
        call = self.call_node()

        game = Node.void('game')
        call.add_child(game)
        game.set_attribute('method', 'save')
        game.set_attribute('refid', refid)
        game.set_attribute('locid', location)
        game.set_attribute('ver', '0')
        game.add_child(Node.u8('headphone', 0))
        game.add_child(Node.u8('hispeed', 16))
        game.add_child(Node.u16('appeal_id', 19))
        game.add_child(Node.u16('frame0', 0))
        game.add_child(Node.u16('frame1', 0))
        game.add_child(Node.u16('frame2', 0))
        game.add_child(Node.u16('frame3', 0))
        game.add_child(Node.u16('frame4', 0))
        last = Node.void('last')
        game.add_child(last)
        last.set_attribute('music_type', '1')
        last.set_attribute('music_id', '29')
        last.set_attribute('sort_type', '4')
        game.add_child(Node.u32('earned_gamecoin_packet', packet))
        game.add_child(Node.u32('earned_gamecoin_block', block))
        game.add_child(Node.u32('gain_exp', exp))
        game.add_child(Node.u32('m_user_cnt', 0))
        game.add_child(Node.bool_array('have_item', [False] * 512))
        game.add_child(Node.bool_array('have_note', [False] * 512))
        tracking = Node.void('tracking')
        game.add_child(tracking)
        m0 = Node.void('m0')
        tracking.add_child(m0)
        m0.add_child(Node.u8('type', 2))
        m0.add_child(Node.u32('id', 5))
        m0.add_child(Node.u32('score', 774566))
        tracking.add_child(Node.time('p_start', Time.now() - 300))
        tracking.add_child(Node.time('p_end', Time.now()))

        # Swap with server
        resp = self.exchange('', call)

        # Verify that response is correct
        self.assert_path(resp, "response/game")
Beispiel #2
0
    def test_packet1(self) -> Node:
        root = Node.void('test')
        root.set_attribute('test', 'test string value')

        # Regular nodes
        root.add_child(Node.void('void_node'))
        root.add_child(Node.s8('s8_node', -1))
        root.add_child(Node.u8('u8_node', 245))
        root.add_child(Node.s16('s16_node', -8000))
        root.add_child(Node.u16('u16_node', 65000))
        root.add_child(Node.s32('s32_node', -2000000000))
        root.add_child(Node.u32('u32_node', 4000000000))
        root.add_child(Node.s64('s64_node', -1234567890000))
        root.add_child(Node.u64('u64_node', 1234567890000))
        root.add_child(Node.binary('bin_node', b'DEADBEEF'))
        root.add_child(Node.string('str_node', 'this is a string!'))
        root.add_child(Node.ipv4('ip4_node', '192.168.1.24'))
        root.add_child(Node.time('time_node', 1234567890))
        root.add_child(Node.float('float_node', 2.5))
        root.add_child(Node.fouru8('4u8_node', [0x20, 0x21, 0x22, 0x23]))
        root.add_child(Node.bool('bool_true_node', True))
        root.add_child(Node.bool('bool_false_node', False))

        # Array nodes
        root.add_child(Node.s8_array('s8_array_node', [-1, -2, 3, 4, -5]))
        root.add_child(Node.u8_array('u8_array_node', [245, 2, 0, 255, 1]))
        root.add_child(Node.s16_array('s16_array_node', [-8000, 8000]))
        root.add_child(Node.u16_array('u16_array_node', [65000, 1, 2, 65535]))
        root.add_child(Node.s32_array('s32_array_node', [-2000000000, -1]))
        root.add_child(Node.u32_array('u32_array_node', [4000000000, 0, 1, 2]))
        root.add_child(
            Node.s64_array('s64_array_node', [-1234567890000, -1, 1, 1337]))
        root.add_child(
            Node.u64_array('u64_array_node', [1234567890000, 123, 456, 7890]))
        root.add_child(
            Node.time_array('time_array_node', [1234567890, 98765432]))
        root.add_child(
            Node.float_array('float_array_node', [2.5, 0.0, 5.0, 20.5]))
        root.add_child(
            Node.bool_array('bool_array_node', [False, True, True, False]))

        # XML escaping
        escape = Node.string(
            'escape_test',
            '\r\n<testing> & \'thing\' "thing" \r\nthing on new line\r\n    ')
        escape.set_attribute('test',
                             '<testing> & \'thing\' "thing" \r\n thing')
        root.add_child(escape)

        # Unicode
        unicode_node = Node.string('unicode', '今日は')
        unicode_node.set_attribute('unicode_attr', 'わたし')
        root.add_child(unicode_node)

        self.assertLoopback(root)
Beispiel #3
0
    def verify_pcbevent_put(self) -> None:
        call = self.call_node()

        # Construct node
        pcbevent = Node.void('pcbevent')
        call.add_child(pcbevent)
        pcbevent.set_attribute('method', 'put')
        pcbevent.add_child(Node.time('time', int(time.time())))
        pcbevent.add_child(Node.u32('seq', 0))

        item = Node.void('item')
        pcbevent.add_child(item)
        item.add_child(Node.string('name', 'boot'))
        item.add_child(Node.s32('value', 1))
        item.add_child(Node.time('time', int(time.time())))

        # Swap with server
        resp = self.exchange('core/pcbevent', call)

        # Verify that response is correct
        self.assert_path(resp, "response/pcbevent")
Beispiel #4
0
    def test_game_packet1(self) -> Node:
        root = Node.void('call')
        root.set_attribute('model', 'M39:J:B:A:2014061900')
        root.set_attribute('srcid', '012010000000DEADBEEF')
        root.set_attribute('tag', '1d0cbcd5')

        pcbevent = Node.void('pcbevent')
        root.add_child(pcbevent)
        pcbevent.set_attribute('method', 'put')

        pcbevent.add_child(Node.time('time', 1438375918))
        pcbevent.add_child(Node.u32('seq', value=0))

        item = Node.void('item')
        pcbevent.add_child(item)

        item.add_child(Node.string('name', 'boot'))
        item.add_child(Node.s32('value', 1))
        item.add_child(Node.time('time', 1438375959))

        self.assertLoopback(root)
Beispiel #5
0
    def handle_ranking_read_request(self, request: Node) -> Node:
        root = Node.void('ranking')

        licenses = Node.void('lic_10')
        root.add_child(licenses)
        originals = Node.void('org_10')
        root.add_child(originals)

        licenses.add_child(Node.time('time', Time.now()))
        originals.add_child(Node.time('time', Time.now()))

        hitchart = self.data.local.music.get_hit_chart(self.game, self.version,
                                                       10)
        rank = 1
        for (mid, _plays) in hitchart:
            record = Node.void('record')
            originals.add_child(record)
            record.add_child(Node.s16('id', mid))
            record.add_child(Node.s16('rank', rank))
            rank = rank + 1

        return root