Esempio n. 1
1
    def test_all(self):
        z1 = Zyre(b't1')
        z2 = Zyre(b't2')

        z1.set_header(b'test_header', b'test1')
        z2.set_header(b'test_header', b'test2')

        self.assertEquals(z1.start(), 0)
        self.assertEquals(z2.start(), 0)

        e = ZyreEvent(z1)
        self.assertEquals(e.peer_name(), z2.name())
        self.assertEquals(e.peer_uuid(), z2.uuid())
        self.assertEquals(e.type(), b'ENTER')

        e = ZyreEvent(z2)
        self.assertEquals(e.peer_name(), z1.name())
        self.assertEquals(e.peer_uuid(), z1.uuid())
        self.assertEquals(e.type(), b'ENTER')

        z1.join(b'test group')
        z2.join(b'test group')

        e = ZyreEvent(z1)
        self.assertEquals(e.peer_name(), z2.name())
        self.assertEquals(e.peer_uuid(), z2.uuid())
        self.assertEquals(e.type(), b'JOIN')
        self.assertEquals(e.group(), b'test group')

        e = ZyreEvent(z2)
        self.assertEquals(e.peer_name(), z1.name())
        self.assertEquals(e.peer_uuid(), z1.uuid())
        self.assertEquals(e.type(), b'JOIN')
        self.assertEquals(e.group(), b'test group')

        z1.shouts(b'test group', b"Hello World")

        e = ZyreEvent(z2)
        self.assertEquals(e.peer_name(), z1.name())
        self.assertEquals(e.peer_uuid(), z1.uuid())
        self.assertEquals(e.type(), b'SHOUT')
        self.assertEquals(e.group(), b'test group')
        self.assertEquals(e.msg().popstr(), b"Hello World")
Esempio n. 2
0
File: test.py Progetto: Asmod4n/zyre
    def test_all(self):
        z1 = Zyre('t1')
        z2 = Zyre('t2')

        z1.set_header('test_header', 'test1')
        z2.set_header('test_header', 'test2')

        self.assertEquals(z1.start(), 0)
        self.assertEquals(z2.start(), 0)

        e = ZyreEvent(z1)
        self.assertEquals(e.name(), z2.name())
        self.assertEquals(e.sender(), z2.uuid())
        self.assertEquals(e.type(), 'enter')

        e = ZyreEvent(z2)
        self.assertEquals(e.name(), z1.name())
        self.assertEquals(e.sender(), z1.uuid())
        self.assertEquals(e.type(), 'enter')

        z1.join('test group')
        z2.join('test group')

        e = ZyreEvent(z1)
        self.assertEquals(e.name(), z2.name())
        self.assertEquals(e.sender(), z2.uuid())
        self.assertEquals(e.type(), 'join')
        self.assertEquals(e.group(), 'test group')

        e = ZyreEvent(z2)
        self.assertEquals(e.name(), z1.name())
        self.assertEquals(e.sender(), z1.uuid())
        self.assertEquals(e.type(), 'join')
        self.assertEquals(e.group(), 'test group')

        z1.shouts('test group', "Hello World")

        e = ZyreEvent(z2)
        self.assertEquals(e.name(), z1.name())
        self.assertEquals(e.sender(), z1.uuid())
        self.assertEquals(e.type(), 'shout')
        self.assertEquals(e.group(), 'test group')
        self.assertEquals(e.msg().popstr(), "Hello World")
Esempio n. 3
0
    def test_all(self):
        z1 = Zyre('t1')
        z2 = Zyre('t2')

        z1.set_header('test_header', 'test1')
        z2.set_header('test_header', 'test2')

        self.assertEquals(z1.start(), 0)
        self.assertEquals(z2.start(), 0)

        e = ZyreEvent(z1)
        self.assertEquals(e.name(), z2.name())
        self.assertEquals(e.sender(), z2.uuid())
        self.assertEquals(e.type(), 'enter')

        e = ZyreEvent(z2)
        self.assertEquals(e.name(), z1.name())
        self.assertEquals(e.sender(), z1.uuid())
        self.assertEquals(e.type(), 'enter')

        z1.join('test group')
        z2.join('test group')

        e = ZyreEvent(z1)
        self.assertEquals(e.name(), z2.name())
        self.assertEquals(e.sender(), z2.uuid())
        self.assertEquals(e.type(), 'join')
        self.assertEquals(e.group(), 'test group')

        e = ZyreEvent(z2)
        self.assertEquals(e.name(), z1.name())
        self.assertEquals(e.sender(), z1.uuid())
        self.assertEquals(e.type(), 'join')
        self.assertEquals(e.group(), 'test group')

        z1.shouts('test group', "Hello World")

        e = ZyreEvent(z2)
        self.assertEquals(e.name(), z1.name())
        self.assertEquals(e.sender(), z1.uuid())
        self.assertEquals(e.type(), 'shout')
        self.assertEquals(e.group(), 'test group')
        self.assertEquals(e.msg().popstr(), "Hello World")
Esempio n. 4
0
    def actor_fn(self, pipe, arg):
        internal_pipe = Zsock(pipe, False) # We don't own the pipe, so False.
        arg = string_at(arg)

        global port

        zyre_node = Zyre(None)
        zyre_node.set_header (b"TS-PORT", str(port).encode());
        zyre_node.start()
        zyre_node.join(b"broadcast")
        zyre_node.join(b"sync")
        zyre_pipe = zyre_node.socket()

        poller = Zpoller(zyre_pipe, internal_pipe)

        internal_pipe.signal(0)

        print('ZYRE Node started')
        terminated = False
        while not terminated:
            # time.sleep(1)
            # sock = poller.wait(1000)
            # if not sock:
            #     continue
            #
            #
            # ZYRE receive
            #
            # if sock == zyre_pipe:
                e = ZyreEvent(zyre_node)

                # ANY
                if e.type() != b"EVASIVE":
                    e.print()
                    pass

                # ENTER: add to phonebook for external contact (i.e. TimeSync)
                if e.type() == b"ENTER":
                    self.timebook.newpeer(e.peer_uuid(), e.peer_addr(), e.header(b"TS-PORT"))

                # EXIT
                elif e.type() == b"EXIT":
                    print( "ZYRE Node: peer is gone..")

                # JOIN
                elif e.type() == b"JOIN":

                    # SYNC clocks
                    if e.group() == b"sync":
                        pass
                        self.timebook.sync(e.peer_uuid())

                # LEAVE
                elif e.type() == b"LEAVE":
                    print("ZYRE Node: peer left a group..")

                # SHOUT -> process event
                elif e.type() == b"SHOUT" or e.type() == b"WHISPER":

                    # Parsing message
                    data = json.loads(e.msg().popstr().decode())
                    data['from'] = e.peer_uuid()

                    # add group
                    if e.type() == b"SHOUT": data['group'] = e.group().decode()
                    else: data['group'] = 'whisper'

                    self.eventProc(data)
            #
            #
            # #
            # # INTERNAL commands
            # #
            # elif sock == internal_pipe:
            #     msg = Zmsg.recv(internal_pipe)
            #     if not msg: break
            #
            #     command = msg.popstr()
            #     if command == b"$TERM":
            #         print('ZYRE Node TERM')
            #         break
            #
            #     elif command == b"JOIN":
            #         group = msg.popstr()
            #         zyre_node.join(group)
            #
            #     elif command == b"LEAVE":
            #         group = msg.popstr()
            #         zyre_node.leave(group)
            #
            #     elif command == b"SHOUT":
            #         group = msg.popstr()
            #         data = msg.popstr()
            #         zyre_node.shouts(group, data)
            #
            #         # if own group -> send to self too !
            #         groups = zlist_strlist( zyre_node.own_groups() )
            #         if group.decode() in groups:
            #             data = json.loads(data.decode())
            #             data['from'] = 'self'
            #             data['group'] = group.decode()
            #             self.eventProc(data)


        # zyre_node.stop()  # HANGS !
        internal_pipe.__del__()
        zyre_node.__del__()
        print('ZYRE Node stopped')   # WEIRD: print helps the closing going smoothly..
        self.done = True
Esempio n. 5
0
    def actor_fn(self, pipe, netiface):

        # Internal
        internal_pipe = Zsock(pipe, False)  # We don't own the pipe, so False.

        # Poller
        poller = Zpoller(self.zyre.socket(), internal_pipe, self.publisher,
                         self.timereply, None)

        # RUN
        self.interface.log('Node started')
        internal_pipe.signal(0)

        while True:
            sock = poller.wait(500)
            if not sock:
                continue

            #
            # ZYRE receive
            #
            if sock == self.zyre.socket():
                e = ZyreEvent(self.zyre)
                uuid = e.peer_uuid()

                # self.interface.log("ZYREmsg", uuid, e.peer_name().decode(), e.type().decode())

                # ENTER: add to book for external contact (i.e. TimeSync)
                if e.type() == b"ENTER":
                    newpeer = Peer(self, e)
                    existing = None

                    if uuid in self.book:
                        # print ('UUID already exist: replacing')  ## PROBLEM : Same name may appear with different uuid (not a real problem, only if crash and restart with new uuid in a short time..)
                        self.book[uuid].stop()
                        existing = uuid

                    for p in self.book.values():
                        if p.name == newpeer.name:
                            # print ('Name already exist: replacing')
                            p.stop()
                            existing = p.uuid

                    if existing:
                        del self.book[existing]

                    self.book[uuid] = newpeer
                    self.book[uuid].subscribe(self.topics)

                # EVASIVE
                elif e.type() == b"EVASIVE":
                    # if uuid in self.book:
                    #     self.book[uuid].linker(2)
                    pass

                # SILENT
                elif e.type() == b"SILENT":
                    if uuid in self.book:
                        self.book[uuid].linker(1)

                # EXIT
                elif e.type() == b"EXIT":
                    if uuid in self.book:
                        self.book[uuid].linker(0)
                        self.book[uuid].stop()
                        del self.book[uuid]

                # JOIN
                elif e.type() == b"JOIN":
                    # self.interface.log("peer join a group..", e.peer_name(), e.group().decode())

                    # SYNC clocks
                    if e.group() == b"sync":
                        if self.peer(uuid):
                            self.peer(uuid).sync()

                # LEAVE
                elif e.type() == b"LEAVE":
                    # self.interface.log("peer left a group..")
                    pass

                # SHOUT -> process event
                elif e.type() == b"SHOUT" or e.type() == b"WHISPER":

                    # Parsing message
                    data = json.loads(e.msg().popstr().decode())
                    data['from'] = uuid

                    # add group
                    if e.type() == b"SHOUT": data['group'] = e.group().decode()
                    else: data['group'] = 'whisper'

                    self.preProcessor1(data)

            #
            # PUBLISHER event
            #
            elif sock == self.publisher:
                msg = Zmsg.recv(self.publisher)
                if not msg: break
                topic = msg.popstr()

                # Somebody subscribed: push Last Value Cache !
                if len(topic) > 0 and topic[0] == 1:
                    topic = topic[1:]
                    if topic in self.pub_cache:
                        # self.interface.log('XPUB lvc send for', topic.decode())
                        msg = Zmsg.dup(self.pub_cache[topic])
                        Zmsg.send(msg, self.publisher)

                    # else:
                    #     self.interface.log('XPUB lvc empty for', topic.decode())

            #
            # TIMESERVER event
            #
            elif sock == self.timereply:
                msgin = Zmsg.recv(self.timereply)
                msg = Zmsg()
                msg.addstr(str(int(time.time() * PRECISION)).encode())
                Zmsg.send(msg, self.timereply)

            #
            # INTERNAL commands
            #
            elif sock == internal_pipe:
                msg = Zmsg.recv(internal_pipe)
                if not msg or msg.popstr() == b"$TERM":
                    # print('ZYRE Node TERM')
                    break

        internal_pipe.__del__()
        self.interface.log(' - node stopped'
                           )  # WEIRD: print helps the closing going smoothly..
        self.done = True