Following the suggestion that I try TwOtp, I've tried the "kicking the tyres" with that library.
Adapting the sample code to work against my own local node seemed easy enough:
from twisted.internet import reactor
from erlang import OneShotPortMapperFactory, buildNodeName
def gotConnection(inst):
return inst.factory.callRemote(inst, "file", "get_cwd"
).addCallback(gotResult)
def gotResult(resp):
print "Got response", resp
reactor.stop()
def eb(error):
print "Got error", error
reactor.stop()
epmd = OneShotPortMapperFactory('client@chloe.ravnaandtines.com', "cookie")
epmd.connectToNode("servernode@chloe.ravnaandtines.com").addCallback(gotConnection).addErrback(eb)
reactor.run()
which involves rather more baggage than using IronPython against my tidying of the C# port of jinterface, for just a "hello world!", given that the jinterface-derived "hello world!" actually does more work (passing arguments, testing results):
import clr
clr.AddReference("OtpErlang.dll")
from System import Array
from Tinesware.Otp import *
import Tinesware.Otp.Erlang as Erlang
cNode = Self("clientnode@chloe.ravnaandtines.com", "cookie")
sNode = Peer("servernode@chloe.ravnaandtines.com")
connection = cNode.Connect(sNode)
args = Array[Erlang.IObject]([Erlang.Integer(1), Erlang.Integer(2)])
connection.SendRpc("mathserver", "add", args)
sum = connection.ReceiveRpc()
if sum.Value.ToInt32() != 3:
print "Assertion failed, returned = " + sum.Value
else:
print "OK!"
And, like py_interface, I find that this doesn't "just work" either:
C:\Documents and Settings\Steve\My Documents\code\babel\erlang>python twotphw.py Got error [Failure instance: Traceback (failure with no frames): <class 'erlang.epmd.NodeNotFound'>: 1]
which will require a similar amount of rolling sleeves up and getting hands dirty to resolve.


No comments:
Post a Comment