コード例 #1
0
ファイル: node_test.py プロジェクト: stjordanis/Pyrlang
def start_stop_with(ev_engine: BaseEngine, py_node_name: str):
    """ Starts the local node node, tries to connect to an externally started
        Erlang node, then stops the local node. Checks whether reference to it
        died (whether GC was able to claim it).
        TODO: It doesn't always claim it. Probably not a bug?
    """
    node = Node(node_name=py_node_name + "@127.0.0.1",
                cookie="COOKIE",
                engine=ev_engine)

    fake_pid = node.register_new_process()
    node.send(sender=fake_pid,
              receiver=(Atom('[email protected]'), Atom('shell')),
              message=Atom('hello'))

    ev_engine.sleep(3)

    import weakref
    import gc

    wref = weakref.ref(node)
    node.destroy()
    del node
    gc.collect()
    assert wref() is None, "Reference to node must be dead at this point"
コード例 #2
0
ファイル: test1.py プロジェクト: beamparticle/Pyrlang
def main():
    node = Pyrlang.Node("[email protected]", "COOKIE")
    node.start()

    pid = node.register_new_process(None)
    node.send(pid, (Atom('[email protected]'), Atom('shell')), Atom('hello'))

    while True:
        # Sleep gives other greenlets time to run
        gevent.sleep(0.1)
コード例 #3
0
def main():
    node = Node("[email protected]", "COOKIE")
    node.start()

    # Attempt to send something will initiate a connection before sending
    pid = node.register_new_process(None)
    # To be able to send to Erlang shell by name first give it a registered
    # name: `erlang:register(shell, self()).`
    node.send(pid, (Atom('[email protected]'), Atom('shell')), Atom('hello'))

    while True:
        # Sleep gives other greenlets time to run
        gevent.sleep(0.1)
コード例 #4
0
 def __init__(self, node) -> None:
     Process.__init__(self, node)
     node.register_name(self, Atom('my_process'))  # optional
     print("registering process - 'my_process'")
コード例 #5
0
ファイル: bridge.py プロジェクト: lwehmeier/erlang_bridge
 def handle_one_inbox_message(self, msg):
     global registeredPublishers
     #print("Incoming", msg)
     remotePid = msg[0]
     action = msg[1]
     if action == Atom('stop'):
         exit(0)
     msgType = msg[2]
     topic = msg[3]
     if action == Atom('subscribe'):
         if topic + "__" + str(msgType) in registeredListeners.keys():
             print("already listening to topic " + topic)
             self._node.send(sender=self.pid_,
                             receiver=remotePid,
                             message=(self.pid_,
                                      (Atom('err'),
                                       Atom('already_subscribed'))))
         else:
             print("subscribing to " + topic)
             if msgType == Atom('string'):
                 sub = rospy.Subscriber(topic, String, callback, topic)
             elif msgType == Atom('int16'):
                 sub = rospy.Subscriber(topic, Int16, callback, topic)
             elif msgType == Atom('vector3'):
                 sub = rospy.Subscriber(topic, Vector3, callback_vector3,
                                        topic)
             else:
                 self._node.send(sender=self.pid_,
                                 receiver=remotePid,
                                 message=(self.pid_,
                                          (Atom('err'),
                                           Atom('unknown_message_type'),
                                           msgType)))
                 return
             registeredListeners[topic + "__" + str(msgType)] = sub
             #print(self.pid_)
             #print(remotePid)
             self._node.send(sender=self.pid_,
                             receiver=remotePid,
                             message=(self.pid_, (Atom('ok'), topic)))
     elif action == Atom('publish'):
         data = msg[4]
         if not topic in registeredPublishers.keys():
             if msgType == Atom('string'):
                 registeredPublishers[topic] = rospy.Publisher(topic,
                                                               String,
                                                               queue_size=0)
                 rospy.sleep(.1)
             if msgType == Atom('int16'):
                 registeredPublishers[topic] = rospy.Publisher(topic,
                                                               Int16,
                                                               queue_size=0)
                 rospy.sleep(.1)
             if msgType == Atom('float32'):
                 registeredPublishers[topic] = rospy.Publisher(topic,
                                                               Float32,
                                                               queue_size=0)
                 rospy.sleep(0.1)
             if msgType == Atom('bool'):
                 registeredPublishers[topic] = rospy.Publisher(topic,
                                                               Bool,
                                                               queue_size=0)
                 rospy.sleep(.1)
         if msgType == Atom('string'):
             registeredPublishers[topic].publish(String(data))
         elif msgType == Atom('int16'):
             registeredPublishers[topic].publish(Int16(data))
         elif msgType == Atom('float32'):
             registeredPublishers[topic].publish(Float32(data))
         elif msgType == Atom('bool'):
             registeredPublishers[topic].publish(Bool(data))
         else:
             self._node.send(sender=self.pid_,
                             receiver=remotePid,
                             message=(self.pid_,
                                      (Atom('err'),
                                       Atom('unknown_message_type'),
                                       msgType)))
             return
         self._node.send(sender=self.pid_,
                         receiver=remotePid,
                         message=(self.pid_, (Atom('ok'), topic)))
     else:
         self._node.send(sender=self.pid_,
                         receiver=remotePid,
                         message=(self.pid_, (Atom('err'),
                                              Atom('invalid_request'))))
コード例 #6
0
ファイル: bridge.py プロジェクト: lwehmeier/erlang_bridge
 def __init__(self, node) -> None:
     Process.__init__(self, node)
     self._node = node
     self._node.register_name(self, Atom('pyBridge'))  # optional
     print("registering process - 'pyBridge'")
コード例 #7
0
ファイル: bridge.py プロジェクト: lwehmeier/erlang_bridge
 def sendTest(self):
     self._node.send(sender=self.pid_,
                     receiver=(Atom('erl@rpi3'), Atom('erlBridge')),
                     message=(self.pid_, (Atom('acc'), (42, 43, 44))))
コード例 #8
0
ファイル: bridge.py プロジェクト: lwehmeier/erlang_bridge
 def sendString(self, topic, data):
     self._node.send(sender=self.pid_,
                     receiver=(Atom('erl@rpi3'), Atom('erlBridge')),
                     message=(self.pid_, (Atom('push'), topic, data)))
コード例 #9
0
ファイル: node_test.py プロジェクト: stjordanis/Pyrlang
    def test_notebook_call(self):
        from Pyrlang.Notebook import Notebook
        nb = Notebook(options={}, node_name=self.node_name_)

        # Try calling with different styles of path
        _, value1 = nb.nb_call({
            Atom("path"): ["datetime", "datetime", "now"],
            Atom("args"): [],
            Atom("kwargs"): {},
            Atom("immediate"): True
        })

        _, _, index2 = nb.nb_call({
            Atom("path"): ["datetime", "datetime", "now"],
            Atom("args"): [],
            Atom("kwargs"): {},
            Atom("immediate"): False
        })
        print(nb.nb_retrieve(index2))

        sleep(0.5)
        _, _, index3 = nb.nb_call({
            Atom("path"): [b"datetime", Atom("datetime"), b"now"],
            Atom("args"): [],
            Atom("kwargs"): {},
            Atom("immediate"):
            False
        })

        # Substitute $pyrlangval for first element of path, and for argument
        _, diff4 = nb.nb_call({
            Atom("path"): [(Atom("$pyrlangval"), index3), "__sub__"],
            Atom("args"): [(Atom("$pyrlangval"), index2)],
            Atom("kwargs"): {},
            Atom("immediate"):
            True
        })
        print("diff ", diff4)

        nb.exit(Atom("normal"))