Current section

Files

Jump to
dbus lib dbus pub_sub.ex
Raw

lib/dbus/pub_sub.ex

defmodule Dbus.PubSub do
require Logger
alias Dbus.Redis, as: R
alias Dbus.Db, as: DB
alias Dbus.Common, as: C
alias Dbus.Queue, as: Q
def pub(topic, msg) do
R.q!(["RPUSH", DB.topic_id(topic), msg |> C.serialize])
R.q!(["INCR", DB.total_id(topic)])
Logger.debug("Sent #{topic}: #{msg |> inspect}")
end
def sub(topic, my_fn) do
_sub(topic, my_fn, Q.pop(topic))
Logger.debug("Subscribing to #{topic}.")
end
defp _sub(topic, my_fn, nil) do
Logger.debug("Subscriber to #{topic} sleeping 5 seconds awaiting message.")
:timer.sleep(5*1000)
sub(topic, my_fn)
end
defp _sub(topic, my_fn, msg) do
E.run(topic, my_fn, msg)
sub(topic, my_fn)
end
end