From 7ceb9d16682577b55e67599ed235859ee5759e99 Mon Sep 17 00:00:00 2001 From: liris Date: Tue, 7 Oct 2014 09:10:01 +0900 Subject: [PATCH] - fixed #111 - support for code and reason in on_close callback --- README.rst | 1 + websocket/_app.py | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/README.rst b/README.rst index d5c8bb3..bef6566 100644 --- a/README.rst +++ b/README.rst @@ -208,6 +208,7 @@ ChangeLog - suppress close event message(#107) - detect socket connection state(#109) + - support for code and reason in on_close callback(#111 ) - v0.18.0 diff --git a/websocket/_app.py b/websocket/_app.py index 274fad6..4d8c49b 100644 --- a/websocket/_app.py +++ b/websocket/_app.py @@ -131,7 +131,7 @@ class WebSocketApp(object): if self.sock: raise WebSocketException("socket is already opened") thread = None - break_on_close_op = False + close_frmae = None try: self.sock = WebSocket(self.get_mask_key, sockopt=sockopt, sslopt=sslopt, @@ -158,7 +158,7 @@ class WebSocketApp(object): if r: op_code, frame = self.sock.recv_data_frame(True) if op_code == ABNF.OPCODE_CLOSE: - break_on_close_op = True + close_frmae = frame break elif op_code == ABNF.OPCODE_PING: self._callback(self.on_ping, frame.data) @@ -179,7 +179,8 @@ class WebSocketApp(object): thread.join() self.keep_running = False self.sock.close() - self._callback(self.on_close,*self._get_close_args(frame.data if break_on_close_op else None)) + self._callback(self.on_close, + *self._get_close_args(close_frame.data if close_frame else None)) self.sock = None def _get_close_args(self,data): @@ -189,10 +190,12 @@ class WebSocketApp(object): # if the on_close callback is "old", just return empty list if not self.on_close or len(inspect.getargspec(self.on_close).args) != 3: return [] + if data and len(data) >=2: code = 256*six.byte2int(data[0]) + six.byte2int(data[1]) reason = data[2:].decode('utf-8') return [code,reason] + return [None,None] def _callback(self, callback, *args):