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")
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)
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")
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)
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