Advertisement
Guest User

Untitled

a guest
Sep 2nd, 2016
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.81 KB | None | 0 0
  1. -module(cavv_user).
  2.  
  3. -behavior(gen_server).
  4.  
  5. -define(SERVER(UserId), {via, gproc, {n, l, {?MODULE, UserId}}}).
  6.  
  7. start_link(UserId) ->
  8. gen_server:start_link(?SERVER(UserId), ?MODULE, [UserId], []).
  9.  
  10. change_email_address(UserId, EmailAddress) ->
  11. gen_server:call(?SERVER(AggregateId), {execute_command, #change_user_email_address{user_id=UserId, email_address=EmailAddress}}).
  12.  
  13. -module(cavv_user_sup).
  14.  
  15. -behaviour(supervisor).
  16.  
  17. -define(CHILD(ChildName, Type, Args), {ChildName, {ChildName, start_link, Args}, temporary, 5000, Type, [ChildName]}).
  18.  
  19. start_link() ->
  20. supervisor:start_link({local, ?SERVER}, ?MODULE, []).
  21.  
  22. start_child(UserId) ->
  23. supervisor:start_child(?SERVER, [UserId]).
  24.  
  25. init([]) ->
  26. RestartStrategy = {simple_one_for_one, 1, 5},
  27.  
  28. Children = [?CHILD(cavv_user, worker, [])],
  29.  
  30. {ok, { RestartStrategy, Children} }.
  31.  
  32. cavv_user_dispatch_sup
  33. | |
  34. cavv_user_dispatcher |
  35. (gen_server) |
  36. |
  37. |
  38. cavv_user_sup
  39. | | |
  40. cavv_user_1...cavv_user_N
  41.  
  42. -module(cavv_user_dispatcher).
  43.  
  44. dispatch_command(UserId, Fun) ->
  45. gen_server:call(?SERVER, {dispatch_command, {UserId, Fun}}).
  46.  
  47. handle_call({dispatch_command, {UserId, Fun}}, _From, State) ->
  48. cavv_user_sup:start_child(UserId),
  49. Fun(), %% How to pass: cavv_user:change_email_address(..,..)?
  50. {reply, ok, State};
  51.  
  52. -module(cavv_user_dispatcher).
  53.  
  54. change_user_email_address(UserId, EmailAddress) ->
  55. gen_server:call(?SERVER, {change_user_email_address, {UserId, EmailAddress}}).
  56.  
  57. handle_call({change_user_email_address, {UserId, EmailAddress}}, _From, State) ->
  58. cavv_user_sup:start_child(UserId),
  59. cavv_user:change_email_address(UserId, EmailAddress),
  60. {reply, ok, State};
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement