area_server実装
-module(area_server_final).
-export([start/0, area/2, time/1]).
start() -> spawn( fun loop/0).
area(Pid, Request) ->
rpc(Pid, Request).
time(Pid) ->
rpc(Pid, {time}).
rpc(Pid, Request) ->
Pid ! {self(), Request},
receive
{Pid, Response} ->
Response
end.
loop() ->
receive
{Sender, {rectangle, Width, Height}} ->
Result = Width * Height,
io:format("[SERVER] Area of rectangle is ~p~n", [Result]),
Sender ! {self(), Result},
loop();
{Sender, {circle, R}} ->
Result = 3.14159 * R * R,
io:format("[SERVER] Area of circle is ~p~n", [Result]),
Sender ! {self(), Result},
loop();
{Sender, {time}} ->
Result = [[erlang]]:time(),
io:format("[SERVER] Time is ~p~n", [Result]),
Sender ! {self(), Result},
loop();
Other ->
io:format("[SERVER] not calculate message type ~p~n", [Other]),
loop()
end.
使用例
3> c(area_server_final).
{ok,area_server}
4> Pid = area_server_final:start().
<0.46.0>
5> area_server_final:time(Pid).
[SERVER] Time is {22,56,48}
{22,56,48}
6> area_server_final:area(Pid, {rectangle, 3, 5}).
[SERVER] Area of rectangle is 15
15
7> area_server_final:area(Pid, {circle, 3}).
[SERVER] Area of circle is 28.274309999999996
28.274309999999996
8> area_server_final:time(Pid).
[SERVER] Time is {22,57,28}
{22,57,28}
9> area_server_final:time(Pid).
[SERVER] Time is {22,57,29}
{22,57,29}
10> area_server_final:time(Pid).
[SERVER] Time is {22,57,30}
{22,57,30}
最終更新:2009年01月24日 23:00