View Source Multiverses.Tracker (multiverses_pubsub v0.4.0)
using-multiverses-with-phoenix-tracker
Using Multiverses With Phoenix Tracker
Now set up your configuration:
in-config-exs
in config.exs
config :my_app, Phoenix.PubSub, Phoenix.PubSub
config :my_app, Phoenix.Tracker, Phoenix.Tracker
in-test-exs
in test.exs
config :my_app, Phoenix.PubSub, Multiverse.PubSub
config :my_app, Phoenix.Tracker, Multiverse.Tracker
create-your-tracker-module
Create your tracker module
implement a minimal tracker as follows:
Note that the handle_diff
callback will be executed in separate batches,
one for each known universe shard.
defmodule MyApp.Tracker do
use Phoenix.Tracker
@phoenix_tracker Application.get_env(:my_app, Phoenix.Tracker)
@phoenix_pubsub Application.get_env(:my_app, Phoenix.PubSub)
def start_link(opts) do
opts = Keyword.merge([name: __MODULE__], opts)
@phoenix_tracker.start_link(__MODULE__, opts, opts)
end
def init(opts) do
server = Keyword.fetch!(opts, :pubsub_server)
{:ok, %{pubsub_server: server, node_name: Phoenix.PubSub.node_name(server)}}
end
def handle_diff(diff, state) do
for {topic, {joins, leaves}} <- diff do
for {_key, meta} <- joins do
@phoenix_pubsub.broadcast(...)
end
for {_key, meta} <- leaves do
@phoenix_pubsub.broadcast(...)
end
end
{:ok, state}
end
end
wherever-you-use-tracker
wherever you use Tracker
defmodule MyApp.UsesTracker do
@tracker Application.compile_env!(:my_app, Phoenix.Tracker)
# ...
end