Skip to content

Commit 3ad038f

Browse files
committed
Update websocket_server.py
1 parent 56af8ae commit 3ad038f

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

websocket_server/websocket_server.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ def client_left(self, client, server):
6565
def message_received(self, client, server, message):
6666
pass
6767

68+
def binary_recieved(self, client, server, message):
69+
pass
70+
6871
def set_fn_new_client(self, fn):
6972
self.new_client = fn
7073

@@ -74,6 +77,9 @@ def set_fn_client_left(self, fn):
7477
def set_fn_message_received(self, fn):
7578
self.message_received = fn
7679

80+
def set_fn_binary_recieved(self, fn):
81+
self.binary_recieved = fn
82+
7783
def send_message(self, client, msg):
7884
self._unicast(client, msg)
7985

@@ -162,6 +168,9 @@ def _run_forever(self, threaded):
162168
def _message_received_(self, handler, msg):
163169
self.message_received(self.handler_to_client(handler), self, msg)
164170

171+
def _binary_recieved_(self, handler, msg):
172+
self.binary_recieved(self.handler_to_client(handler), self, msg)
173+
165174
def _ping_received_(self, handler, msg):
166175
handler.send_pong(msg)
167176

@@ -315,8 +324,7 @@ def read_next_message(self):
315324
logger.warning("Continuation frames are not supported.")
316325
return
317326
elif opcode == OPCODE_BINARY:
318-
logger.warning("Binary frames are not supported.")
319-
return
327+
opcode_handler = self.server._binary_recieved_
320328
elif opcode == OPCODE_TEXT:
321329
opcode_handler = self.server._message_received_
322330
elif opcode == OPCODE_PING:
@@ -338,7 +346,7 @@ def read_next_message(self):
338346
for message_byte in self.read_bytes(payload_length):
339347
message_byte ^= masks[len(message_bytes) % 4]
340348
message_bytes.append(message_byte)
341-
opcode_handler(self, message_bytes.decode('utf8'))
349+
opcode_handler(self, message_bytes.decode('utf8') if opcode != OPCODE_BINARY else message_bytes)
342350

343351
def send_message(self, message):
344352
self.send_text(message)
@@ -376,16 +384,15 @@ def send_text(self, message, opcode=OPCODE_TEXT):
376384

377385
# Validate message
378386
if isinstance(message, bytes):
379-
message = try_decode_UTF8(message) # this is slower but ensures we have UTF-8
380-
if not message:
381-
logger.warning("Can\'t send message, message is not valid UTF-8")
382-
return False
387+
payload = message
388+
opcode = OPCODE_BINARY
383389
elif not isinstance(message, str):
384390
logger.warning('Can\'t send message, message has to be a string or bytes. Got %s' % type(message))
385391
return False
392+
else:
393+
payload = encode_to_UTF8(message)
386394

387395
header = bytearray()
388-
payload = encode_to_UTF8(message)
389396
payload_length = len(payload)
390397

391398
# Normal payload

0 commit comments

Comments
 (0)