Ejemplo n.º 1
0
 def reset_builder(self):
     self.current_builder = MessageBuilder()
Ejemplo n.º 2
0
 def reset_builder(self):
     self.current_builder = MessageBuilder()
Ejemplo n.º 3
0
class IncomingChannel(Connection):
    """
        Transport connection which consumes messages from 
        message channel, wraps them in producer Envelopes, 
        and enqueues them for asynchronous sending using 
        driven by asyncore.
    """
    LINGER = struct.pack("ii", 0, 0)

    @debug
    def __init__(self, dispatcher, connection):
        super(IncomingChannel, self).__init__(dispatcher.monitor)
        self.dispatcher = dispatcher
        self.setup_connection(connection)
        self.buffer = ByteBuffer()
        self.setup_builder()

    @debug
    def setup_connection(self, connection):
        self.connection = connection
        self.set_socket(self.connection, self.monitor)
        # Ensure that we never block waiting for a socket to close.
        self.connection.setsockopt(SOL_SOCKET, SO_LINGER, self.LINGER)

    @debug
    def setup_builder(self):
        self.reset_builder()
        self.set_terminator(self.current_builder.get_terminator())

    @debug
    def reset_builder(self):
        self.current_builder = MessageBuilder()

    @debug
    def collect_incoming_data(self, bytes):
        self.buffer.write(bytes)

    @debug
    def found_terminator(self):
        self.current_builder.write(self.buffer.read())
        if self.current_builder.iscomplete():
            self.dispatcher.dispatch(self.current_builder.message())
            self.reset_builder()
        self.set_terminator(self.current_builder.get_terminator())

    @debug
    def connect(self, address):
        raise TypeError("connect() called on server channel")

    @debug
    def handle_connect(self):
        pass

    @debug
    def handle_close(self):
        super(IncomingChannel, self).handle_close()
        self.dispatcher.closed(self)

    @debug
    def push(self, message):
        raise TypeError("push() called on server channel")

    @debug
    def push_with_producer(self, envelope):
        raise TypeError("push_with_producer() called on server channel")

    @debug
    def writable(self):
        return False

    @debug
    def readable(self):
        return True

    @debug
    def send(self, data):
        raise TypeError("send() called on server channel")

    @debug
    def recv(self, bufsize):
        return super(IncomingChannel, self).recv(bufsize)

    @debug
    def handle_expt(self):
        message = "%s handling exceptoinal event: closing."
        msglog.log("broadway", message % self, msglog.types.WARN)
        self.close()
Ejemplo n.º 4
0
class IncomingChannel(Connection):
    """
        Transport connection which consumes messages from 
        message channel, wraps them in producer Envelopes, 
        and enqueues them for asynchronous sending using 
        driven by asyncore.
    """
    LINGER = struct.pack("ii",0,0)
    @debug
    def __init__(self, dispatcher, connection):
        super(IncomingChannel, self).__init__(dispatcher.monitor)
        self.dispatcher = dispatcher
        self.setup_connection(connection)
        self.buffer = ByteBuffer()
        self.setup_builder()
    @debug
    def setup_connection(self, connection):
        self.connection = connection
        self.set_socket(self.connection, self.monitor)
        # Ensure that we never block waiting for a socket to close.
        self.connection.setsockopt(SOL_SOCKET, SO_LINGER, self.LINGER)
    @debug
    def setup_builder(self):
        self.reset_builder()
        self.set_terminator(self.current_builder.get_terminator())
    @debug
    def reset_builder(self):
        self.current_builder = MessageBuilder()
    @debug
    def collect_incoming_data(self, bytes):
        self.buffer.write(bytes)
    @debug
    def found_terminator(self):
        self.current_builder.write(self.buffer.read())
        if self.current_builder.iscomplete():
            self.dispatcher.dispatch(self.current_builder.message())
            self.reset_builder()
        self.set_terminator(self.current_builder.get_terminator())
    @debug
    def connect(self, address):
        raise TypeError("connect() called on server channel")
    @debug
    def handle_connect(self):
        pass
    @debug
    def handle_close(self):
        super(IncomingChannel, self).handle_close()
        self.dispatcher.closed(self)
    @debug
    def push(self, message):
        raise TypeError("push() called on server channel")
    @debug
    def push_with_producer(self, envelope):
        raise TypeError("push_with_producer() called on server channel")
    @debug
    def writable(self):
        return False
    @debug
    def readable(self):
        return True
    @debug
    def send(self, data):
        raise TypeError("send() called on server channel")
    @debug
    def recv(self, bufsize):
        return super(IncomingChannel, self).recv(bufsize)
    @debug
    def handle_expt(self):
        message =  "%s handling exceptoinal event: closing."
        msglog.log("broadway", message % self, msglog.types.WARN)
        self.close()