Remove Omnibot.State.cfg/0 from Omnibot.Irc module

Deprecating Omnibot.State: IRC module holds its own configuration now.

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
2020-08-11 12:48:28 -07:00
parent b423507796
commit 715480230a
2 changed files with 27 additions and 15 deletions

View File

@@ -6,8 +6,9 @@ defmodule Omnibot.Irc do
## Client API
def start_link(opts \\ []) do
GenServer.start_link(__MODULE__, :ok, opts)
def start_link(opts) do
{cfg, opts} = Keyword.pop!(opts, :cfg)
GenServer.start_link(__MODULE__, cfg, opts)
end
def send_msg(irc, msg) do
@@ -15,8 +16,7 @@ defmodule Omnibot.Irc do
end
def send_msg(irc, command, params) when is_list(params) do
cfg = State.cfg()
GenServer.cast(irc, {:send_msg, Config.msg(cfg, command, params)})
GenServer.cast(irc, {:send_msg, command, params})
end
def send_msg(irc, command, param), do: send_msg(irc, command, [param])
@@ -27,6 +27,8 @@ defmodule Omnibot.Irc do
def part(irc, channel), do: send_msg(irc, "PART", channel)
def cfg(irc), do: GenServer.call(irc, :cfg)
defp route_msg(irc, msg) do
plugins = Msg.channel(msg) |> State.channel_plugins()
@@ -44,8 +46,7 @@ defmodule Omnibot.Irc do
## Server callbacks
@impl true
def init(:ok) do
cfg = State.cfg()
def init(cfg) do
_ssl = cfg.ssl
{:ok, socket} =
@@ -56,7 +57,7 @@ defmodule Omnibot.Irc do
send_msg(self(), "USER", [cfg.user, "0", "*", cfg.real])
:inet.setopts(socket, active: true)
{:ok, socket}
{:ok, {socket, cfg}}
end
defp write(socket, msg) do
@@ -66,19 +67,31 @@ defmodule Omnibot.Irc do
end
@impl true
def handle_cast({:send_msg, msg}, socket) do
def handle_cast({:send_msg, command, params}, state = {socket, cfg}) do
msg = Config.msg(cfg, command, params)
write(socket, msg)
{:noreply, socket}
{:noreply, state}
end
@impl true
def handle_info({:tcp, _socket, line}, socket) do
def handle_cast({:send_msg, msg}, state = {socket, _cfg}) do
write(socket, msg)
{:noreply, state}
end
@impl true
def handle_call(:cfg, _from, state = {_socket, cfg}) do
{:reply, cfg, state}
end
@impl true
def handle_info({:tcp, _socket, line}, state) do
Logger.debug(String.trim(line))
msg = Msg.parse(line)
# Send the message to the router
route_msg(self(), msg)
{:noreply, socket}
{:noreply, state}
end
end

View File

@@ -15,16 +15,15 @@ defmodule Omnibot.Supervisor do
|> Code.eval_file()
cfg = bindings[:config]
# TODO : move cfg to its own process so reloading it is as simple as killing the process
children = [
{Task.Supervisor, name: Omnibot.RouterSupervisor, strategy: :one_for_one},
{Omnibot.State, cfg: cfg, name: Omnibot.State},
{Omnibot.PluginSupervisor, cfg: cfg, name: Omnibot.PluginSupervisor},
{Omnibot.PluginManager, cfg: cfg, name: Omnibot.PluginManager},
] ++ unless IEx.started?(),
do: [{Omnibot.Irc, name: Omnibot.Irc}],
do: [{Omnibot.Irc, cfg: cfg, name: Omnibot.Irc}],
else: []
# TODO : how to handle config reloading?
# :one_for_all here because the RouterSupervisor and IRC server are co-dependent
Supervisor.init(children, strategy: :one_for_all)
end