import logging class Protocol(object): def __init__(self, connection, label, logger=None): self._connection = connection self._label = label if logger is None: logger_name = '%s.protos.%s' % (connection.logger.name, label) self.logger = logging.getLogger(logger_name) else: self.logger = logger @property def connection(self): return self._connection @property def label(self): return self._label def send(self, payload): ''' Send a message through the sjRpc connection. ''' self._connection.send(self._label, payload) def start_message(self, payload_size): ''' Start a new incoming message receipt. By default, this method create a new empty buffer on self._incoming_buf variable. ''' self._incoming_buf = '' def feed(self, data): ''' Handle a chunk of data received from the tunnel. By default, this method append this chunk to the end of the incoming buffer created by default by :meth:`start_message` method. ''' self._incoming_buf += data def end_of_message(self): ''' Signal the end of the currently received message. With default :meth:`start_message` and :meth:`feed` methods, it's a good place to implements the processing of the incoming message. ''' pass def handle_control(self, payload): ''' Handle a control message received from the Rpc0. ''' pass def shutdown(self): pass from sjrpc.core.protocols.rpc import RpcProtocol from sjrpc.core.protocols.tunnel import TunnelProtocol