- support for code and reason in on_close callback
This commit is contained in:
liris
2014-10-07 09:10:01 +09:00
parent aa42b3912f
commit 7ceb9d1668
2 changed files with 7 additions and 3 deletions

View File

@@ -208,6 +208,7 @@ ChangeLog
- suppress close event message(#107) - suppress close event message(#107)
- detect socket connection state(#109) - detect socket connection state(#109)
- support for code and reason in on_close callback(#111 )
- v0.18.0 - v0.18.0

View File

@@ -131,7 +131,7 @@ class WebSocketApp(object):
if self.sock: if self.sock:
raise WebSocketException("socket is already opened") raise WebSocketException("socket is already opened")
thread = None thread = None
break_on_close_op = False close_frmae = None
try: try:
self.sock = WebSocket(self.get_mask_key, sockopt=sockopt, sslopt=sslopt, self.sock = WebSocket(self.get_mask_key, sockopt=sockopt, sslopt=sslopt,
@@ -158,7 +158,7 @@ class WebSocketApp(object):
if r: if r:
op_code, frame = self.sock.recv_data_frame(True) op_code, frame = self.sock.recv_data_frame(True)
if op_code == ABNF.OPCODE_CLOSE: if op_code == ABNF.OPCODE_CLOSE:
break_on_close_op = True close_frmae = frame
break break
elif op_code == ABNF.OPCODE_PING: elif op_code == ABNF.OPCODE_PING:
self._callback(self.on_ping, frame.data) self._callback(self.on_ping, frame.data)
@@ -179,7 +179,8 @@ class WebSocketApp(object):
thread.join() thread.join()
self.keep_running = False self.keep_running = False
self.sock.close() 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 self.sock = None
def _get_close_args(self,data): 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 the on_close callback is "old", just return empty list
if not self.on_close or len(inspect.getargspec(self.on_close).args) != 3: if not self.on_close or len(inspect.getargspec(self.on_close).args) != 3:
return [] return []
if data and len(data) >=2: if data and len(data) >=2:
code = 256*six.byte2int(data[0]) + six.byte2int(data[1]) code = 256*six.byte2int(data[0]) + six.byte2int(data[1])
reason = data[2:].decode('utf-8') reason = data[2:].decode('utf-8')
return [code,reason] return [code,reason]
return [None,None] return [None,None]
def _callback(self, callback, *args): def _callback(self, callback, *args):