Packages
ex_esdb
0.4.0
0.11.0
0.10.0
0.9.0
0.8.0
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.1
0.5.0
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14-alpha
0.0.13-alpha
0.0.12-alpha
0.0.11-alpha
0.0.10-alpha
0.0.9-alpha
0.0.8-alpha
0.0.6-alpha
0.0.5-alpha
0.0.4-alpha
0.0.3-alpha
0.0.2-alfa
0.0.1-alfa
ExESDB is a reincarnation of rabbitmq/khepri, specialized for use as a BEAM-native event store.
Current section
Files
Jump to
Current section
Files
src/tracker_group.erl
-module(tracker_group).
-export([join/3, members/2, group_key/2, leave/3, notify_created/3, notify_deleted/3,
notify_updated/3]).
-spec group_key(Store :: atom(), Feature :: atom()) -> integer().
group_key(Store, Feature) ->
erlang:phash2({Store, Feature, trackers}).
created(Feature, Data) ->
{feature_created, Feature, Data}.
deleted(Feature, Data) ->
{feature_deleted, Feature, Data}.
updated(Feature, Data) ->
{feature_updated, Feature, Data}.
-spec join(Store :: atom(), Feature :: atom(), PidOrPids :: pid() | [pid()]) -> ok.
join(Store, Feature, PidOrPids) ->
Group = group_key(Store, Feature),
ok = pg:join('Elixir.Phoenix.PubSub', Group, PidOrPids),
ok.
-spec members(Store :: atom(), Feature :: atom()) -> [pid()].
members(Store, Feature) ->
Group = group_key(Store, Feature),
pg:get_members('Elixir.Phoenix.PubSub', Group).
-spec leave(Store :: atom(), Feature :: atom(), PidOrPids :: pid() | [pid()]) -> ok.
leave(Store, Feature, PidOrPids) ->
Group = group_key(Store, Feature),
ok = pg:leave('Elixir.Phoenix.PubSub', Group, PidOrPids),
ok.
-spec notify_created(Store :: atom(), Feature :: atom(), Data :: map()) -> ok.
notify_created(Store, Feature, Data) ->
Msg = created(Feature, Data),
Pids = members(Store, Feature),
lists:foreach(fun(Pid) -> Pid ! Msg end, Pids).
-spec notify_deleted(Store :: atom(), Feature :: atom(), Data :: map()) -> ok.
notify_deleted(Store, Feature, Data) ->
Msg = deleted(Feature, Data),
Pids = members(Store, Feature),
lists:foreach(fun(Pid) -> Pid ! Msg end, Pids).
-spec notify_updated(Store :: atom(), Feature :: atom(), Data :: map()) -> ok.
notify_updated(Store, Feature, Data) ->
Msg = updated(Feature, Data),
Pids = members(Store, Feature),
lists:foreach(fun(Pid) -> Pid ! Msg end, Pids).