Packages

ROSTER Messaging Protocol

Current section

Files

Jump to
roster src roster_user.erl
Raw

src/roster_user.erl

-module(roster_user).
-author('Maxim Sokhatsky').
-include("SMP.hrl").
-include_lib("kvs/include/user.hrl").
-behaviour(gen_server).
-export(?GEN_SERVER).
-compile(export_all).
start_link(Parameters) -> gen_server:start_link(?MODULE, Parameters, []).
handle_call({get},_,Proc) -> { reply,Proc,Proc };
handle_call(Command,_,Proc) -> { reply,{unknown,Command},Proc }.
init(User) ->
kvs:info(?MODULE,"User ~p spawned ~p",[User#user.id,self()]),
U = case kvs:get(user,User#user.id) of
{ok,Exists} -> Exists;
{error,_} -> User end,
wf:cache({user,U#user.id},self()),
{ok, {U#user{},User#user.id}}.
handle_cast(Msg, State) ->
kvs:info(?MODULE,"Unknown API async: ~p", [Msg]),
{stop, {error, {unknown_cast, Msg}}, State}.
handle_info({'DOWN', _MonitorRef, _Type, _Object, _Info} = Msg, State = #user{id=Id}) ->
kvs:info(?MODULE, "connection closed, shutting down session:~p", [Msg]),
wf:cache({user,Id},undefined),
{stop, normal, State};
handle_info(Info, State=#user{}) ->
kvs:info(?MODULE,"Unrecognized info: ~p", [Info]),
{noreply, State}.
terminate(_Reason, #user{id=Id}) ->
kvs:info(?MODULE,"Terminating session Id cache: ~p", [Id]),
wf:cache({user,Id},undefined),
ok.
code_change(_OldVsn, State, _Extra) ->
{ok, State}.