I'm bugging-in my code. lib_chan does now work as I thoght
here is my test-code, and results. I'm reading プログラミングErlang p. 333
この本についているコードって、結構更新されてるんでしょうかね。現在はR12B3が出たということで、確かにR11B5で動くコードそのままってわけにはいかないかも。
結局、あらかじめ必要なコードをmakeして作っておけということだったので、以下は誰の参考にもならないハマり例ということでした。
$ cat config {port, 2333}. {service, banksystem, password, "qwerty", mfa, bank, exchange, }. $ cat bank.erl -module(bank). -export([exchange/3]). exchange(MM, ArgC, ArgS) -> io:format("bank:exchange starting~n" "ArgC = ~p ArgS=~p~n", [ArgC, ArgS]), loop(MM). loop(MM) -> receive {chan, MM, {todime, Money}} -> MM ! {send, dime(Money)}, loop(MM); {chan, MM, {topenny, Money}} -> MM ! {send, penny(Money)}, loop(MM); {chan, MM, {tobucks, Money}} -> MM ! {send, bucks(Money)}, loop(MM); {chan_closed, MM} -> io:format("exchange stopping~n",), exit(normal) end. dime(Dollar) -> Dollar * 10. penny(Dollar) -> Dollar * 100. bucks(Dollar) -> Dollar. $erl Erlang (BEAM) emulator version 5.5.5 [source] [async-threads:0] [kernel-poll:false] Eshell V5.5.5 (abort with ^G) 1> c(bank). {ok,bank} 2> lib_chan:start_server("./config"). =ERROR REPORT==== 27-Jun-2008::22:35:27 === Error in process <0.31.0> with exit value: {undef,[{lib_chan,start_server,["./config"]},{erl_eval,do_apply,5},{shell,exprs,6},{shell,eval_loop,3}]} ** exited: {undef,[{lib_chan,start_server,["./config"]}, {erl_eval,do_apply,5}, {shell,exprs,6}, {shell,eval_loop,3}]} **
orz... lib_chan is not bundled to Erlang itself. but "Programming Erlang"...
Just compile 'em all!!!(lib_md5 at last)
Server side (for sample code).
1> c(lib_chan). {ok,lib_chan} 2> c(lib_chan_cs). {ok,lib_chan_cs} 3> c(lib_chan_mm). {ok,lib_chan_mm} 4> c(lib_chan_auth). {ok,lib_chan_auth} 5> c("../lib_md5.erl"). {ok,lib_md5} 6> lib_chan:start_server("./config1"). lib_chan starting:"./config1" ConfigData=[{port,2233},{service,math,password,"qwerty",mfa,mod_math,run,}] true mod_math:run starting ArgC = {yes,go} ArgS= 7>
Now, I can see where {yes, go} comes from....
Client side.
1> c(lib_chan). {ok,lib_chan} 2> c(lib_chan_cs). {ok,lib_chan_cs} 3> c(lib_chan_mm). {ok,lib_chan_mm} 4> c(lib_chan_auth). {ok,lib_chan_auth} 5> c("../lib_md5.erl"). {ok,lib_md5} 6> {ok, S} =lib_chan:connect("localhost", 2233, math, "qwerty", {yes, go}). {ok,<0.58.0>} 7> lib_chan:rpc(S, {factorial,20}). 2432902008176640000