Current section

Files

Jump to
agala lib bot poller.ex
Raw

lib/bot/poller.ex

defmodule Agala.Bot.Poller do
@moduledoc """
### Using
Include `Agala.Bot.Poller` into your supervision tree
### Example
Supervisor.start_link([
MyApp.TelegramPoller
], options)
### Poller inside provider
Provider's poller should be a GenServer realisation, that will take two params - Handler module and storage's pid
"""
defmacro __using__(opts) do
quote bind_quoted: [opts: opts] do
@behaviour Agala.Bot.Poller
{otp_app, provider, config} = Agala.Bot.Config.compile_config(:poller, __MODULE__, opts)
@otp_app otp_app
@provider provider
@config config
def config() do
{:ok, config} = Agala.Bot.Supervisor.runtime_config(:poller, :dry_run, __MODULE__, @otp_app, @config)
end
def child_spec(opts) do
%{
id: __MODULE__,
start: {__MODULE__, :start_link, [opts]},
type: :supervisor
}
end
def start_link(opts \\ []) do
Agala.Bot.Supervisor.start_link(:poller, __MODULE__, @otp_app, @provider, @config)
end
def stop(pid, timeout \\ 5000) do
Supervisor.stop(pid, :normal, timeout)
end
end
end
end