Esempio n. 1
0
        def topic(self, env):
            sub = env['ctx'].socket(zmq.SUB)
            sub.setsockopt(zmq.SUBSCRIBE, '')
            sub.connect('inproc://vows/pubsub')
            stream = ZMQStream(sub, self.io_loop)

            def cb(data):
                self.stop(data)
            stream.on_recv(cb)

            env['pub'].send_multipart(["", "This is expected!"])
            return self.wait()
Esempio n. 2
0
    def __init__(self, context=None, io_loop=None):
        """
        Initialize the sockets and streams. The `socket_definitions`, `sockets`
        and `streams` variables are being created in the subclass by the
        decorator.
        """
        self.context = context or ZmqContext.instance()
        self.io_loop = io_loop or IOLoop.instance()

        for sockname in self.socket_definitions:
            sockdef = self.socket_definitions[sockname]

            if not (isinstance(sockdef, Bind) or isinstance(sockdef, Connect)):
                raise TypeError

            # create the socket
            sock = self.context.socket(sockdef.socktype)

            # set the socket options
            for oname, ovalue in sockdef.opts:
                sock.setsockopt(oname, ovalue)

            # connect or bind
            if isinstance(sockdef, Bind):
                sock.bind(sockdef.sockspec)
            elif isinstance(sockdef, Connect):
                sock.connect(sockdef.sockspec)

            # create the ZMQStream
            stream = ZMQStream(sock, self.io_loop)

            # setup callbacks
            if sockdef.on_recv_name:
                stream.on_recv(getattr(self, sockdef.on_recv_name))
            if sockdef.on_send_name:
                stream.on_send(getattr(self, sockdef.on_send_name))
            if sockdef.on_err_name:
                stream.on_err(getattr(self, sockdef.on_err_name))

            self.sockets[sockname] = sock
            self.streams[sockname] = stream