def _start_sending(self): _logger.debug('%s, _start_sending', str(self)) if self._close_ev is not None: return if not Event.isEventSet(self._wev): _logger.debug('%s, _start_sending::addEvent', str(self)) Event.addEvent(self._wev)
def _on_receive(self): _logger.debug('%s, _on_receive', str(self)) buff_size = 2 ** 16 while True: try: recv, addr = self._recv(buff_size) if len(recv) == 0: self._receive_fin() return _logger.debug("%s, received %d bytes", str(self), len(recv)) except self._errorType as msg: if msg.errno != errno.EAGAIN and msg.errno != errno.EINPROGRESS: _logger.warning('%s, recv occurs error(%d): %s', str(self), msg.errno, msg.strerror) self._error = True self._do_close() return if self._decode_error: consumed = [recv] else: try: consumed = self._decode(recv) except Exception as ex: if self._on_decode_error is not None: _logger.debug('decode error: %s', str(ex)) self._decode_error = True else: _logger.error('decode error: %s', str(ex)) _logger.error('%s', traceback.format_exc()) self._error = True self._do_close() return consumed = [recv] stop = False try: for data in consumed: if self._decode_error: ret = self._on_decode_error(self, data) else: ret = self._on_received(self, data, addr) if not ret: stop = True except Exception as ex: if self._decode_error: _logger.error('_onDecodeError error: %s', str(ex)) else: _logger.error('_on_received error: %s', str(ex)) _logger.error('%s', traceback.format_exc()) self._error = True self._do_close() return if stop: self.stop_receiving() if not Event.isEventSet(self._rev): break
def _on_close(self): _logger.debug('%s, _on_close', str(self)) if self._fin_ev is not None: self._fin_ev.del_timer() assert(not Event.isEventSet(self._wev)) assert(not Event.isEventSet(self._rev)) self._close() self._connected = False self._closed = True if self._on_closed is not None: try: self._on_closed(self) except Exception as ex: _logger.error('_on_closed: %s', ex) _logger.error('%s', traceback.format_exc())
def start_receiving(self): _logger.debug('%s, start_receiving', str(self)) if self._close_ev is not None: return if not self._connected or self._fin_received or self.is_closed(): return if not Event.isEventSet(self._rev): _logger.debug('%s, start_receiving::addEvent', str(self)) Event.addEvent(self._rev)
def is_ready_to_send(self): if not self._connected or self.is_closed(): return False return Event.isEventSet(self._wev)
def _stop_sending(self): _logger.debug('%s, _stop_sending', str(self)) if Event.isEventSet(self._wev): _logger.debug('%s, _stop_sending::delEvent', str(self)) Event.delEvent(self._wev)
def stop_receiving(self): _logger.debug('%s, stop_receiving', str(self)) if Event.isEventSet(self._rev): _logger.debug('%s, stop_receiving::delEvent', str(self)) Event.delEvent(self._rev)