Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -module(m).
- -export([createController/3, createUser/1]).
- -export([handleController/1, handleUser/1]).
- createUser(Name) ->
- register(Name, spawn(?MODULE, handleUser, [Name])).
- handleUser(Name) ->
- {ok, Pid} = trade_fsm:start_link(atom_to_list(Name)),
- io:format("Spawned fsm server: ~p~n", [Pid]),
- register(getFsmName(Name), Pid),
- monitor(process, Pid),
- handleUserMessage(Pid).
- handleUserMessage(FsmPid) ->
- receive
- {trade, OtherName} ->
- OtherFsmName = getFsmName(OtherName),
- trade_fsm:trade(FsmPid, whereis(OtherFsmName)),
- handleUserMessage(FsmPid);
- accept_trade ->
- trade_fsm:accept_trade(FsmPid), handleUserMessage(FsmPid);
- {make_offer, Item} ->
- trade_fsm:make_offer(FsmPid, Item), handleUserMessage(FsmPid);
- {retract_offer, Item} ->
- trade_fsm:retract_offer(FsmPid, Item), handleUserMessage(FsmPid);
- ready ->
- trade_fsm:ready(FsmPid), handleUserMessage(FsmPid);
- cancel ->
- trade_fsm:cancel(FsmPid), handleUserMessage(FsmPid);
- {'DOWN', _, process, _, _} -> erlang:display({self(), user_stopped});
- _ -> handleUserMessage(FsmPid)
- end.
- getFsmName(UserName) ->
- list_to_atom(atom_to_list(UserName) ++ "_fsm").
- getFsmPid(UserName) ->
- FsmName = getFsmName(UserName),
- whereis(FsmName).
- % TO jest to mojego zdania tylko
- % controller functions
- createController(Name, FirstUserName, SecUserName) ->
- register(Name, spawn(?MODULE, handleController, [[FirstUserName, SecUserName]])).
- handleController(Users) ->
- receive
- {remove_own, UserName, Items} ->
- removeItems(remove_own, getFsmPid(UserName), Items),
- [OtherUser | _] = Users -- [UserName],
- removeItems(remove_other, getFsmPid(OtherUser), Items),
- handleController(Users);
- {remove_other, UserName, Items} ->
- removeItems(remove_other, getFsmPid(UserName), Items),
- [OtherUser | _] = Users -- [UserName],
- removeItems(remove_own, getFsmPid(OtherUser), Items),
- handleController(Users);
- _ -> handleController(Users)
- end.
- removeItems(Command, Pid, Items) ->
- % gen_fsm:send_all_state_event(Pid, {Command, Items}).
- gen_fsm:send_event(Pid, {Command, Items}).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement