erlang > example

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