I am trying to update Phoenix to its latest version, According to the guide… I have changed
- pubsub: [name: EvercamMedia.PubSub,
- adapter: Phoenix.PubSub.PG2]
+ pubsub_server: EvercamMedia.PubSub
I am finding trouble with this method.
Phoenix.PubSub.Local.subscribers(EvercamMedia.PubSub, "cameras:#{camera_exid}", 0)
I did a few discussions over slack and I am suggested to register the pids with the registry, But I am not sure which pids? and where/when to register them.
After getting the subscribers, this is what code is doing.
def subscribers(camera_exid) do
Phoenix.PubSub.Local.subscribers(EvercamMedia.PubSub, "cameras:#{camera_exid}", 0)
end
def parse_clients(camera_exid) do
pids = subscribers(camera_exid)
Enum.map(pids, fn(pid) ->
socket = Phoenix.Channel.Server.socket(pid)
case socket do
%Phoenix.Socket{assigns: %{current_user: user, ip: ip, source: source}} ->
desc =
"#{user.username}"
|> check_empty_nil(ip)
|> check_empty_nil(source)
"{#{desc}}"
%Phoenix.Socket{assigns: %{ip: ip, source: source}} -> "{#{ip}, #{source}}"
_ -> ""
end
end)
|> Enum.filter(fn(v) -> v != "" end)
|> Enum.join(", ")
end
I am only looking for the place where I am going to find subscribers? or where even they are gettign subscribed after update?
this is the place where I am starting the streamer.
defmodule EvercamMediaWeb.CameraChannel do
use Phoenix.Channel
alias EvercamMedia.Snapshot.StreamerSupervisor
alias EvercamMedia.Util
def join("cameras:" <> camera_exid, _auth_msg, socket) do
camera = Camera.get_full(camera_exid)
user = Util.deep_get(socket, [:assigns, :current_user], nil)
case Permission.Camera.can_snapshot?(user, camera) do
true ->
send(self(), {:after_join, camera_exid})
{:ok, socket}
_ -> {:error, "Unauthorized."}
end
end
def terminate(_msg, socket) do
{:noreply, socket}
end
def handle_info({:after_join, camera_exid}, socket) do
StreamerSupervisor.start_streamer(camera_exid)
{:noreply, socket}
end
end