def init_file(self): with open(self.filepath, 'wb') as file: data = PyDatagram() data.add_uint8(0) file.write(PyDatagramIterator(data).get_remaining_bytes())
def get_main_section_state(self) -> WorldState: """ Fetch current world model from the server. """ # send datagram asking for current world data (player's location, other player names, positions etc.) data = PyDatagram() data.add_uint8(WorldStateRequest.ID) self.net_client.writer.send(data, self.net_client.server_connection) # wait for datagram from the server self.net_client.manager.wait_for_readers(self.net_client.timeout / 1000) if not self.net_client.reader.data_available(): raise Exception( "No response from the server about the main section model.") datagram = NetDatagram() if not self.net_client.reader.get_data(datagram): raise Exception("Main section model response unavailable.") iterator = PyDatagramIterator(datagram) world_state_message = self.message_parser(iterator, MessageType.response) return world_state_message.data
def save_file(self): if self.is_loading: return with open(self.filepath, 'wb') as file: dg = PyDatagram() dg.add_uint8(len(self.menu.buttons)) for button in self.menu.buttons: self.save_button(button.get_data(), dg) file.write(PyDatagramIterator(dg).getRemainingBytes())
def _parse_msg_hton(self, msgid, data): msg = PyDatagram() msg.add_uint8(msgid) if msgid == MessageTypes.update_entity: msg.add_uint32(data['netid']) msg.add_string(data['data']) elif msgid == MessageTypes.remove_entity: msg.add_uint32(data['netid']) elif msgid == MessageTypes.register_player: pass elif msgid == MessageTypes.player_id: msg.add_uint32(data['netid']) elif msgid == MessageTypes.player_input: msg.add_uint32(data['netid']) msg.add_int8(data['movement_x']) msg.add_string(data['action_set']) else: raise RuntimeError("Unknown msgid:", msgid) return msg