%% @author ping
%% @doc @todo Add description to server.
%% erlang服务器通用框架
-module(server).
-export([start/2,call/2,cast/2]).
start(Name,Mod)->
register(Name,spawn(fun()->loop(Name,Mod,Mod:init())end)).
loop(Name,Mod,State)->
receive
{From,call,Request}->
{Response,NewState} = Mod:handle_call(Request,State),
From ! {Name,Response},
loop(Name,Mod,NewState);
{From,cast,Request}->
NewState = Mod:handle_cast(Request,State),
loop(Name,Mod,NewState)
end.
call(Name,Request)->
Name ! {self(),call,Request},
receive
{Name,Response} -> Response
end.
cast(Name,Request)->
Name ! { self(),call,Request }.
%% @author ping
%% @doc @todo Add description to storage.
-module(storage).
-export([init/0,handle_call/2,add/2,find/1,start/0]).
init()->
dict:new().
handle_call({add,Key,Value},Dict)->
{ok,dict:store(Key, Value, Dict)};
handle_call({find,Key},Dict)->
{dict:find(Key, Dict),Dict}.
add(Key,Value)->
server:call(kv_server, {add,Key,Value}).
find(Key)->
server:call(kv_server, {find,Key}).
start()->
server:start(kv_server, ?MODULE).