Remove Plugin.Agent, replace everywhere with Plugin.GenServer
Being able to handle arbitrary messages from other processes is a generally useful thing to have for fine-grained control of the plugin. Agents don't provide that, while GenServers do. I've removed all instances of the Agent and replaced it with the GenServer and everything appears fine so far. Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
@@ -1,40 +0,0 @@
|
||||
defmodule Omnibot.Plugin.Agent do
|
||||
defmacro __using__([]) do
|
||||
quote do
|
||||
alias Omnibot.Plugin
|
||||
use Agent
|
||||
|
||||
def start_link(opts) do
|
||||
cfg = opts[:cfg]
|
||||
state = opts[:state] || on_init(cfg)
|
||||
Plugin.Agent.start_link(cfg, state, opts)
|
||||
end
|
||||
|
||||
def cfg, do: Plugin.Agent.cfg(__MODULE__)
|
||||
def state, do: Plugin.Agent.state(__MODULE__)
|
||||
|
||||
def update_state(update, timeout \\ 5000),
|
||||
do: Plugin.Agent.update_state(__MODULE__, update, timeout)
|
||||
end
|
||||
end
|
||||
|
||||
def start_link(cfg, state, opts) do
|
||||
Agent.start_link(fn -> {cfg, state} end, opts)
|
||||
end
|
||||
|
||||
def cfg(agent) do
|
||||
Agent.get(agent, fn {cfg, _} -> cfg end)
|
||||
end
|
||||
|
||||
def state(agent) do
|
||||
Agent.get(agent, fn {_, state} -> state end)
|
||||
end
|
||||
|
||||
def update_state(agent, update, timeout \\ 5000) do
|
||||
Agent.update(
|
||||
agent,
|
||||
fn {cfg, state} -> {cfg, apply(update, [state])} end,
|
||||
timeout
|
||||
)
|
||||
end
|
||||
end
|
||||
@@ -2,7 +2,7 @@ defmodule Omnibot.Plugin do
|
||||
defmacro __using__([]) do
|
||||
quote do
|
||||
use Omnibot.Plugin.Base
|
||||
use Omnibot.Plugin.Agent
|
||||
use Omnibot.Plugin.GenServer
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user