예제 #1
0
 def handle_write_event(self):
     log.debug( "handle_write_event")
     if self._ssl_accepting:
         self._do_ssl_handshake()
     elif self._ssl_closing:
         self._do_ssl_shutdown()
     else:
         asyncore.dispatcher.handle_write_event(self)
예제 #2
0
 def close(self):
     log.debug(traceback.format_stack())
     log.debug("close")
     if (isinstance(self.socket, ssl.SSLSocket) and
         self.socket._sslobj is not None):
         self._do_ssl_shutdown()
     else:
         asyncore.dispatcher.close(self)
예제 #3
0
 def send(self, data):
     log.debug("send")
     try:
         return asyncore.dispatcher.send(self,data)
     except ssl.SSLError as err:
         if err.args[0] in (ssl.SSL_ERROR_EOF, ssl.SSL_ERROR_ZERO_RETURN,
                            ssl.SSL_ERROR_WANT_READ,
                            ssl.SSL_ERROR_WANT_WRITE):
             return 0
         raise
예제 #4
0
 def on_json_message(self, event):
     message = json.loads(event.data)
     if 'private' in message:
         private = message['private'] #ticker, trade, depth
         if  private=='trade':      
             self.EVENT_TRADE.fire(message=message)
         elif private=='ticker': 
             self.EVENT_TICKER_USD.fire(message=message)
         elif private=='depth':   
             self.EVENT_DEPTH_USD.fire(message=message)
     log.debug(event.endpoint + " " + str(message))
예제 #5
0
파일: socketio.py 프로젝트: sirk390/mtgox
 def on_frame(self, event):
     msg_type, msg_id, msg_endpoint, msg_data = re.match("([0-9]):([^:]*):([^:]*):?(.*)", event.frame).groups()
     if msg_type == SocketIO.MSG_CONNECTED:
         if msg_endpoint == "":
             self.state = SocketIO.CONNECTED
             self.EVENT_CONNECTED_SOCKETIO.fire()
         else:
             self.EVENT_CONNECTED_ENDPOINT.fire(endpoint=msg_endpoint, data=msg_data)
     elif msg_type == SocketIO.MSG_JSON_MESSAGE:
         self.EVENT_JSON_MESSAGE.fire(data=msg_data, endpoint=msg_endpoint)
     else:
         log.debug("Unhandled message %s %s" % (msg_type, msg_data))
예제 #6
0
 def recv(self, buffer_size):
     log.debug("recv")
     try:
         return asyncore.dispatcher.recv(self, buffer_size)
     except ssl.SSLError as err:
         if err.args[0] in (ssl.SSL_ERROR_WANT_READ,
                            ssl.SSL_ERROR_WANT_WRITE):
             return b''
         if err.args[0] in (ssl.SSL_ERROR_EOF, ssl.SSL_ERROR_ZERO_RETURN):
             self.handle_close()
             return b''
         raise
예제 #7
0
파일: keys.py 프로젝트: sirk390/mtgox
 def make_key12(self):
     nspaces = random.randint(1, 12)
     max_n = WEBSOCKET_KEY_MAXINT / nspaces
     number_n = random.randint(0, max_n)
     product_n = number_n * nspaces
     log.debug("websocket key: %d %d" % (number_n, product_n))
     key_n = str(product_n)
     for i in range(random.randint(1, 12)):
         c = random.choice(AVAILABLE_KEY_CHARS)
         pos = random.randint(0, len(key_n))
         key_n = key_n[0:pos] + chr(c) + key_n[pos:]
     for i in range(nspaces):
         pos = random.randint(1, len(key_n)-1)
         key_n = key_n[0:pos] + " " + key_n[pos:]
     return number_n, key_n
예제 #8
0
 def _do_ssl_handshake(self):
     log.debug( "_do_ssl_handshake")
     try:
         self.socket.do_handshake()
     except ssl.SSLError as err:
         if err.args[0] in (ssl.SSL_ERROR_WANT_READ,
                            ssl.SSL_ERROR_WANT_WRITE):
             return
         elif err.args[0] == ssl.SSL_ERROR_EOF:
             return self.handle_close()
         raise
     except socket.error as err:
         if err.args[0] == errno.ECONNABORTED:
             return self.handle_close()
     else:
         self._ssl_accepting = False
예제 #9
0
 def _do_ssl_shutdown(self):
     log.debug( "_do_ssl_shutdown")
     self._ssl_closing = True
     try:
         self.socket = self.socket.unwrap()
     except ssl.SSLError as err:
         if err.args[0] in (ssl.SSL_ERROR_WANT_READ,
                            ssl.SSL_ERROR_WANT_WRITE):
             return
     except socket.error as err:
         # Any "socket error" corresponds to a SSL_ERROR_SYSCALL return
         # from OpenSSL's SSL_shutdown(), corresponding to a
         # closed socket condition. See also:
         # http://www.mail-archive.com/[email protected]/msg60710.html
         pass
     self._ssl_closing = False
     asyncore.dispatcher.close(self)
예제 #10
0
파일: socketio.py 프로젝트: sirk390/mtgox
 def keep_alive(self):
     next_heartbeat = time.time()
     try:
         while not self.shuttingdown:
             t =  time.time()
             if self.state == SocketIO.DISCONNECTED:
                 try:
                     self.state = SocketIO.CONNECTING
                     self.connect_socketio()
                 except Exception as e:
                     self.state = SocketIO.DISCONNECTED
                     log.debug(traceback.format_exc())
                     log.warning("Error connecting : " + str(e))
                     time.sleep(SocketIO.RECONNECT_INTERVAL)
             if self.state == SocketIO.CONNECTED and t >= next_heartbeat:
                 # Send heartbeat
                 log.debug("Send heartbeat")
                 self.websocket.send_message('2::')
                 next_heartbeat = t + self.heartbeat_interval - 10
             time.sleep(1)
     except:
         traceback.print_exc()
예제 #11
0
파일: websocket.py 프로젝트: sirk390/mtgox
 def handle_close(self):
     log.debug("handle_close2")
     self.EVENT_DISCONNECTED.fire()
     self.close()
예제 #12
0
파일: websocket.py 프로젝트: sirk390/mtgox
 def send_message(self, data):
     log.debug("send_message" + data)
     self.send('\x00' + data + '\xff')
예제 #13
0
파일: socketio.py 프로젝트: sirk390/mtgox
 def on_disconnected(self, event):
     self.EVENT_DISCONNECTED_SOCKETIO.fire()
     log.debug("disconnected!")
     self.state = SocketIO.DISCONNECTED
예제 #14
0
 def handle_error(self):
     log.debug("handle_error")
     traceback.print_exc()