def main(): options = get_options() auth_token = authentication.AuthenticationToken() try: auth_token.authenticate(options.username, options.password) except YggdrasilError as e: print(e) sys.exit() print("Logged in as " + auth_token.username) connection = Connection(options.address, options.port, auth_token) connection.connect() def print_chat(chat_packet): print("Position: " + str(chat_packet.position)) print("Data: " + chat_packet.json_data) connection.register_packet_listener(print_chat, ChatMessagePacket) while True: try: text = input() packet = ChatPacket() packet.message = text connection.write_packet(packet) except KeyboardInterrupt: print("Bye!") sys.exit()
def test_compressed_packet(self): msg = ''.join(choice(string.ascii_lowercase) for i in range(500)) packet = ChatPacket() packet.message = msg self.write_read_packet(packet, 20) self.write_read_packet(packet, -1)
def write_read_packet(self, packet, compression_threshold): for protocol_version in SUPPORTED_PROTOCOL_VERSIONS: context = ConnectionContext(protocol_version=protocol_version) packet_buffer = PacketBuffer() packet.write(packet_buffer, compression_threshold) packet_buffer.reset_cursor() VarInt.read(packet_buffer) compressed_size = VarInt.read(packet_buffer) if compressed_size > 0: decompressed = decompress(packet_buffer.read(compressed_size)) packet_buffer.reset() packet_buffer.send(decompressed) packet_buffer.reset_cursor() packet_id = VarInt.read(packet_buffer) self.assertEqual(packet_id, packet.id) deserialized = ChatPacket(context) deserialized.read(packet_buffer) self.assertEqual(packet.message, deserialized.message)
def test_compressed_packet(self): for protocol_version in SUPPORTED_PROTOCOL_VERSIONS: context = ConnectionContext(protocol_version=protocol_version) msg = ''.join(choice(string.ascii_lowercase) for i in range(500)) packet = ChatPacket(context) packet.message = msg self.write_read_packet(packet, 20) self.write_read_packet(packet, -1)
def send_message(data, addr, connection): data = data.replace(" ", "\ ") data = data.replace("\n", "\\ n") data = data.replace("\r", "\\ r") packet = ChatPacket() packet.message = "/k " + addr connection.write_packet(packet) remainder = len(data) % 90 num_packets = len(data) / 90 for x in range(0, num_packets): packetj = ChatPacket() packetj.message = "/j " + data[x*90:(x+1)*90] print packetj.message connection.write_packet(packetj) if remainder > 0: packetj = ChatPacket() packetj.message = "/j " + data[num_packets*90:] print packetj.message connection.write_packet(packetj) packetl = ChatPacket() packetl.message = "/l" connection.write_packet(packetl)
def test_packet(self): packet = ChatPacket() packet.message = u"κόσμε" packet_buffer = PacketBuffer() packet.write(packet_buffer) packet_buffer.reset_cursor() # Read the length and packet id VarInt.read(packet_buffer) packet_id = VarInt.read(packet_buffer) self.assertEqual(packet_id, packet.id) deserialized = ChatPacket() deserialized.read(packet_buffer) self.assertEqual(packet.message, deserialized.message)
def test_listener(self): message = "hello world" def test_packet(chat_packet): self.assertEqual(chat_packet.message, message) listener = PacketListener(test_packet, ChatPacket) packet = ChatPacket().set_values(message=message) uncalled_packet = KeepAlivePacket().set_values(keep_alive_id=0) listener.call_packet(packet) listener.call_packet(uncalled_packet)
def write_read_packet(self, packet, compression_threshold): packet_buffer = PacketBuffer() packet.write(packet_buffer, compression_threshold) packet_buffer.reset_cursor() VarInt.read(packet_buffer) compressed_size = VarInt.read(packet_buffer) if compressed_size > 0: decompressed = decompress(packet_buffer.read(compressed_size)) packet_buffer.reset() packet_buffer.send(decompressed) packet_buffer.reset_cursor() packet_id = VarInt.read(packet_buffer) self.assertEqual(packet_id, packet.id) deserialized = ChatPacket() deserialized.read(packet_buffer) self.assertEqual(packet.message, deserialized.message)
def test_packet(self): for protocol_version in SUPPORTED_PROTOCOL_VERSIONS: context = ConnectionContext(protocol_version=protocol_version) packet = ChatPacket(context) packet.message = u"κόσμε" packet_buffer = PacketBuffer() packet.write(packet_buffer) packet_buffer.reset_cursor() # Read the length and packet id VarInt.read(packet_buffer) packet_id = VarInt.read(packet_buffer) self.assertEqual(packet_id, packet.id) deserialized = ChatPacket(context) deserialized.read(packet_buffer) self.assertEqual(packet.message, deserialized.message)
def test_listener(self): message = "hello world" def test_packet(chat_packet): self.assertEqual(chat_packet.message, message) for protocol_version in SUPPORTED_PROTOCOL_VERSIONS: context = ConnectionContext(protocol_version=protocol_version) listener = PacketListener(test_packet, ChatPacket) packet = ChatPacket(context).set_values(message=message) uncalled_packet = KeepAlivePacket().set_values(keep_alive_id=0) listener.call_packet(packet) listener.call_packet(uncalled_packet)
def main(): options = get_options() if options.offline: print("Connecting in offline mode") connection = Connection( options.address, options.port, username=options.username) else: auth_token = authentication.AuthenticationToken() try: auth_token.authenticate(options.username, options.password) except YggdrasilError as e: print(e) sys.exit() print("Logged in as " + auth_token.username) connection = Connection( options.address, options.port, auth_token=auth_token) connection.connect() def print_chat(chat_packet): print("Position: " + str(chat_packet.position)) print("Data: " + chat_packet.json_data) connection.register_packet_listener(print_chat, ChatMessagePacket) while True: try: text = input() if text == "/respawn": print("respawning...") packet = ClientStatusPacket() packet.action_id = ClientStatusPacket.RESPAWN connection.write_packet(packet) else: packet = ChatPacket() packet.message = text connection.write_packet(packet) except KeyboardInterrupt: print("Bye!") sys.exit()
def send_message(data, addr, connection): data = data.replace(" ", "\ ") data = data.replace("\n", "\\ n") data = data.replace("\r", "\\ r") packet = ChatPacket() packet.message = "/k " + addr connection.write_packet(packet) remainder = len(data) % 90 num_packets = len(data) / 90 for x in range(0, num_packets): packetj = ChatPacket() packetj.message = "/j " + data[x * 90:(x + 1) * 90] print packetj.message connection.write_packet(packetj) if remainder > 0: packetj = ChatPacket() packetj.message = "/j " + data[num_packets * 90:] print packetj.message connection.write_packet(packetj) packetl = ChatPacket() packetl.message = "/l" connection.write_packet(packetl)