Proper py3 support!

This commit is contained in:
Nathan Adams
2014-09-05 00:03:32 +02:00
parent e82a44f580
commit db2d357623
3 changed files with 14 additions and 16 deletions

View File

@@ -8,14 +8,12 @@ class Connection:
self.received = bytearray() self.received = bytearray()
def read(self, length): def read(self, length):
result = ""
result = self.received[:length] result = self.received[:length]
self.received = self.received[length:] self.received = self.received[length:]
return result return result
def write(self, data): def write(self, data):
if not isinstance(data, bytearray): if isinstance(data, str):
data = bytearray(data) data = bytearray(data)
self.sent.extend(data) self.sent.extend(data)
@@ -45,40 +43,40 @@ class Connection:
remaining = value remaining = value
for i in range(5): for i in range(5):
if remaining & ~0x7F == 0: if remaining & ~0x7F == 0:
self.write(chr(remaining)) self.write(struct.pack("!B", remaining))
return return
self.write(chr(remaining & 0x7F | 0x80)) self.write(struct.pack("!B", remaining & 0x7F | 0x80))
remaining >>= 7 remaining >>= 7
raise ValueError("The value %d is too big to send in a varint" % value) raise ValueError("The value %d is too big to send in a varint" % value)
def read_utf(self): def read_utf(self):
length = self.read_varint() length = self.read_varint()
return str(self.read(length)).encode('utf8') return self.read(length).decode('utf8')
def write_utf(self, value): def write_utf(self, value):
self.write_varint(len(value)) self.write_varint(len(value))
self.write(bytearray(value.decode('utf8'), 'utf8')) self.write(bytearray(value, 'utf8'))
def read_short(self): def read_short(self):
return struct.unpack(">h", str(self.read(2)))[0] return struct.unpack(">h", self.read(2))[0]
def write_short(self, value): def write_short(self, value):
self.write(struct.pack(">h", value)) self.write(struct.pack(">h", value))
def read_ushort(self): def read_ushort(self):
return struct.unpack(">H", str(self.read(2)))[0] return struct.unpack(">H", self.read(2))[0]
def write_ushort(self, value): def write_ushort(self, value):
self.write(struct.pack(">H", value)) self.write(struct.pack(">H", value))
def read_long(self): def read_long(self):
return struct.unpack(">q", str(self.read(8)))[0] return struct.unpack(">q", self.read(8))[0]
def write_long(self, value): def write_long(self, value):
self.write(struct.pack(">q", value)) self.write(struct.pack(">q", value))
def read_ulong(self): def read_ulong(self):
return struct.unpack(">Q", str(self.read(8)))[0] return struct.unpack(">Q", self.read(8))[0]
def write_ulong(self, value): def write_ulong(self, value):
self.write(struct.pack(">Q", value)) self.write(struct.pack(">Q", value))
@@ -110,9 +108,9 @@ class TCPSocketConnection(Connection):
raise TypeError("SocketConnection does not support remaining()") raise TypeError("SocketConnection does not support remaining()")
def read(self, length): def read(self, length):
result = "" result = bytearray()
while len(result) < length: while len(result) < length:
result += self.socket.recv(length - len(result)) result.extend(self.socket.recv(length - len(result)))
return result return result
def write(self, data): def write(self, data):

View File

@@ -18,5 +18,5 @@ class MinecraftServer:
"status": json.loads(pinger.read_status()), "status": json.loads(pinger.read_status()),
"latency": pinger.test_ping(), "latency": pinger.test_ping(),
} }
except ValueError as ex: except ValueError:
raise IOError("The server responded with invalid json") raise IOError("The server responded with invalid json")

View File

@@ -147,7 +147,7 @@ class TestConnection(TestCase):
buffer = self.connection.read_buffer() buffer = self.connection.read_buffer()
self.assertEqual(buffer.received, bytearray.fromhex("7FAA")) self.assertEqual(buffer.received, bytearray.fromhex("7FAA"))
self.assertEqual(self.connection.flush(), "") self.assertEqual(self.connection.flush(), bytearray())
def test_writeBuffer(self): def test_writeBuffer(self):
buffer = Connection() buffer = Connection()