[erlang-questions] JInterface, RPC, self()
Steven Edwards
cureadvocate@REDACTED
Sat Jan 24 01:41:08 CET 2009
Thanks. I'll spend some time playing with the code to make sure I
understand it.
On Fri, Jan 23, 2009 at 4:31 PM, Caoyuan <dcaoyuan@REDACTED> wrote:
> http://blogtrader.net/page/dcaoyuan/entry/rpc_server_for_erlang_in
>
> 2009/1/24 Steven Edwards <cureadvocate@REDACTED>:
> > `I still heart Erlang, but we're having some trouble communicating. I'm
> > trying to get RPCs to work correctly, but receive {Pid, Result} fails.
> I'm
> > pretty sure that it fails because I use {mbox, simpleserver@REDACTED} as
> the
> > initial Pid and JInterface responds with a differently named process id.
> > (Same process, but Erlang's representation.)
> >
> > I can get it working through a hack (by returning {pid_result,
> > mbox.whereis("mbox")} from the Java server on a {getpid} request), but is
> > there a more elegant solution?
> >
> > Thanks,
> >
> > Steven
> >
> > //
> >
> > Client:
> >
> > ---
> > -module(client).
> > -export([echo/1, add/2, add2/2]).
> >
> > rpc(Pid, Msg) ->
> > Pid ! {self(), Msg},
> > receive
> > {Pid, Result} -> {pid_received, Result};
> > Result -> {nope, Result}
> > after 750 -> false
> > end.
> >
> > echo(Msg) -> rpc({mbox, simpleserver@REDACTED}, {echo, Msg}).
> >
> > add(X, Y) -> rpc({mbox, simpleserver@REDACTED}, {add, X, Y}).
> >
> > add2(X, Y) -> rpc({mbox, simpleserver@REDACTED}, {add2, X, Y}).
> > ---
> >
> > Server:
> >
> > ---
> > import com.ericsson.otp.erlang.*;
> >
> > public class SimpleServer {
> > public static void main(String[] args) throws Exception {
> > OtpNode self = new OtpNode("simpleserver", "cookie");
> > OtpMbox mbox = self.createMbox("mbox");
> > OtpErlangObject[] tupleElements = new OtpErlangObject[2];
> >
> > OtpEpmd.publishPort(self);
> > tupleElements[0] = mbox.self();
> >
> > while (true) try {
> > OtpErlangTuple terms = (OtpErlangTuple) mbox.receive();
> > OtpErlangPid from = (OtpErlangPid) terms.elementAt(0);
> > OtpErlangTuple msg = (OtpErlangTuple) terms.elementAt(1);
> >
> > String command = msg.elementAt(0).toString();
> >
> > if (command.equals("echo")) {
> > mbox.send(from, new
> > OtpErlangAtom(msg.elementAt(1).toString()));
> > }
> > else if (command.equals("add")) {
> > long x = ((OtpErlangLong) msg.elementAt(1)).longValue();
> > long y = ((OtpErlangLong) msg.elementAt(2)).longValue();
> >
> > mbox.send(from, new OtpErlangLong(x+y));
> > }
> > else if (command.equals("add2")) {
> > long x = ((OtpErlangLong) msg.elementAt(1)).longValue();
> > long y = ((OtpErlangLong) msg.elementAt(2)).longValue();
> > tupleElements[1] = new OtpErlangLong(x+y);
> >
> > mbox.send(from, new OtpErlangTuple(tupleElements));
> > }
> > }
> > catch (OtpErlangExit e) {
> > break;
> > }
> > }
> > }
> > ---
> >
> >
> >
> > _______________________________________________
> > erlang-questions mailing list
> > erlang-questions@REDACTED
> > http://www.erlang.org/mailman/listinfo/erlang-questions
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20090123/b06b454a/attachment.htm>
More information about the erlang-questions
mailing list