Example #1
0
    def __call__(self, handler, request_method, raw_request_data):

        try:
            callback_param = handler.environ.get("QUERY_STRING").split('=')[1]
            self.callback = urllib2.unquote(callback_param)
        except IndexError:
            handler.do500(message='"callback" parameter required')
            return

        if request_method == 'OPTIONS':
            handler.write_options(['OPTIONS', 'POST'])
            return []

        if self.session.is_new():
            handler.enable_nocache()
            handler.enable_cookie()
            handler.enable_cors()
            open_frame = '%s("o");\r\n' % self.callback

            handler.write_js(open_frame)
            return []
        elif self.session.is_expired():
            close_error = protocol.close_frame(3000, "Go away!")
            handler.write_text(close_error)
            return []
        elif self.session.is_locked():
            lock_error = protocol.close_frame(2010, "Another connection still open")
            handler.write_text(lock_error)
            return []
        else:
            self.session.lock()
            return [gevent.spawn(self.poll, handler)]
Example #2
0
    def __call__(self, handler, request_method, raw_request_data):
        """
        On the first poll, send back the open frame, one
        subsequent calls actually poll the queue.
        """

        if request_method == 'OPTIONS':
            handler.write_options(['OPTIONS', 'POST'])
            return []

        if self.session.is_new():
            handler.enable_cookie()
            handler.enable_cors()
            handler.write_js(protocol.OPEN)
            return []

        elif self.session.is_network_error():
            interrupt_error = protocol.close_frame(1002, "Connection interrupted")
            handler.write_text(interrupt_error)
            return []

        elif self.session.is_expired():
            close_error = protocol.close_frame(3000, "Go away!")
            handler.write_text(close_error)
            return []

        elif self.session.is_locked():
            lock_error = protocol.close_frame(2010, "Another connection still open")
            self.session.network_error = True
            handler.write_text(lock_error)
            return []
        else:
            self.session.lock()
            return [gevent.spawn(self.poll, handler)]
Example #3
0
    def __call__(self, handler, request_method, raw_request_data):

        try:
            callback_param = handler.environ.get("QUERY_STRING").split('=')[1]
            self.callback = urllib2.unquote(callback_param)
        except IndexError:
            handler.do500(message='"callback" parameter required')
            return

        if request_method == 'OPTIONS':
            handler.write_options(['OPTIONS', 'POST'])
            return []

        if self.session.is_new():
            handler.enable_nocache()
            handler.enable_cookie()
            handler.enable_cors()
            open_frame = '%s("o");\r\n' % self.callback

            handler.write_js(open_frame)
            return []
        elif self.session.is_expired():
            close_error = protocol.close_frame(3000, "Go away!")
            handler.write_text(close_error)
            return []
        elif self.session.is_locked():
            lock_error = protocol.close_frame(2010, "Another connection still open")
            handler.write_text(lock_error)
            return []
        else:
            self.session.lock()
            return [gevent.spawn(self.poll, handler)]
Example #4
0
    def __call__(self, handler, request_method, raw_request_data):
        """
        On the first poll, send back the open frame, one
        subsequent calls actually poll the queue.
        """

        if request_method == 'OPTIONS':
            handler.write_options(['OPTIONS', 'POST'])
            return []

        if self.session.is_new():
            handler.enable_cookie()
            handler.enable_cors()
            handler.write_js(protocol.OPEN)
            return []

        elif self.session.is_network_error():
            interrupt_error = protocol.close_frame(1002, "Connection interrupted")
            handler.write_text(interrupt_error)
            return []

        elif self.session.is_expired():
            close_error = protocol.close_frame(3000, "Go away!")
            handler.write_text(close_error)
            return []

        elif self.session.is_locked():
            lock_error = protocol.close_frame(2010, "Another connection still open")
            self.session.network_error = True
            handler.write_text(lock_error)
            return []
        else:
            self.session.lock()
            return [gevent.spawn(self.poll, handler)]
Example #5
0
    def __call__(self, handler, request_method, raw_request_data):
        """
        """
        if request_method == 'OPTIONS':
            handler.write_options(['OPTIONS', 'POST'])
            return []
        elif self.session.is_network_error():
            writer, written = self.write_prelude(handler)

            try:
                interrupt_error = protocol.close_frame(1002, "Connection interrupted")
                interrupt_error_chunk = handler.raw_chunk(interrupt_error)

                writer.write(interrupt_error_chunk)
                writer.flush()

            except socket.error:
                self.session.expire()

            zero_chunk = handler.raw_chunk('')
            writer.write(zero_chunk)
            self.session.network_error = True
            return []

        elif self.session.is_locked():
            writer, written = self.write_prelude(handler)

            try:
                close_error = protocol.close_frame(2010, "Another connection still open")
                close_error_chunk = handler.raw_chunk(close_error)

                writer.write(close_error_chunk)
                writer.flush()

            except socket.error:
                self.session.expire()

            zero_chunk = handler.raw_chunk('')
            writer.write(zero_chunk)
            self.session.network_error = True
            return []

        self.session.lock()
        return [
            gevent.spawn(self.stream, handler),
        ]
Example #6
0
    def poll(self, socket):
        """
        Spin lock the thread until we have a message on the
        gevent queue.
        """

        while not self.session.expired:
            messages = self.session.get_messages()
            messages = self.encode(messages)

            socket.send(protocol.message_frame(messages))

        close_error = protocol.close_frame(3000, "Go away!", newline=False)
        socket.send(close_error)

        # Session expires, so unlock
        socket.close()
        self.session.unlock()
Example #7
0
    def poll(self, socket):
        """
        Spin lock the thread until we have a message on the
        gevent queue.
        """

        while not self.session.expired:
            messages = self.session.get_messages()
            messages = self.encode(messages)

            socket.send(protocol.message_frame(messages))

        close_error = protocol.close_frame(3000, "Go away!", newline=False)
        socket.send(close_error)

        # Session expires, so unlock
        socket.close()
        self.session.unlock()
Example #8
0
    def __call__(self, socket, request_method, raw_request_data):

        socket.send('o')

        if self.session.is_expired():
            close_error = protocol.close_frame(3000, "Go away!", newline=False)
            socket.send(close_error)
            socket.close()
            return []
        #elif self.session.is_locked():
            #lock_error = protocol.close_frame(2010, "Another connection still open")
            #socket.send(lock_error)
            #socket.close()
            #return []

        self.session.lock()

        return [
            gevent.spawn(self.poll, socket),
            gevent.spawn(self.put, socket),
        ]
Example #9
0
    def __call__(self, socket, request_method, raw_request_data):

        socket.send('o')

        if self.session.is_expired():
            close_error = protocol.close_frame(3000, "Go away!", newline=False)
            socket.send(close_error)
            socket.close()
            return []
        #elif self.session.is_locked():
            #lock_error = protocol.close_frame(2010, "Another connection still open")
            #socket.send(lock_error)
            #socket.close()
            #return []

        self.session.lock()

        return [
            gevent.spawn(self.poll, socket),
            gevent.spawn(self.put, socket),
        ]