parent
c95bf3d817
commit
f3e1c22f1a
@ -0,0 +1,69 @@ |
|||||||
|
defmodule IrckedElixir.ChatGroup do |
||||||
|
use GenServer |
||||||
|
|
||||||
|
alias IrckedElixir.Chatter.Message, as: Message |
||||||
|
alias IrckedElixir.Chatter.Privmsg, as: Privmsg |
||||||
|
|
||||||
|
@server_address "localhost" |
||||||
|
@server_port 6667 |
||||||
|
@base_nick "functism" |
||||||
|
@chatters 3 |
||||||
|
|
||||||
|
@impl true |
||||||
|
def init(chatters) do |
||||||
|
1..@chatters |
||||||
|
|> Enum.to_list |
||||||
|
|> Enum.map( |
||||||
|
fn n -> |
||||||
|
%{ |
||||||
|
id: "chatter"<>to_string(n), |
||||||
|
start: {IrckedElixir.Chatter, :start_link, [%IrckedElixir.Chatter.State{ip: @server_address, port: @server_port, nick: @base_nick <> to_string(n), reporter: n == 1}]} |
||||||
|
} |
||||||
|
end |
||||||
|
) |
||||||
|
|> Enum.each( |
||||||
|
fn child -> |
||||||
|
DynamicSupervisor.start_child(IrckedElixir.DynamicSupervisor, child) |
||||||
|
end |
||||||
|
) |
||||||
|
{:ok, chatters} |
||||||
|
end |
||||||
|
|
||||||
|
@impl true |
||||||
|
def handle_info({:checkin, nick, chatter}, chatters) do |
||||||
|
chatters = Map.put(chatters, nick, chatter) |
||||||
|
{:noreply, chatters} |
||||||
|
end |
||||||
|
|
||||||
|
def handle_info({:report, msg}, chatters) do |
||||||
|
case msg.command do |
||||||
|
"PRIVMSG" -> |
||||||
|
pm = Privmsg.parse(msg) |
||||||
|
IO.puts(inspect pm) |
||||||
|
case pm.body do |
||||||
|
".cunny" -> send_all(chatters, pm.to, "cunny!") |
||||||
|
_ -> "" |
||||||
|
end |
||||||
|
|
||||||
|
"" -> "" |
||||||
|
_ -> IO.puts(inspect msg) |
||||||
|
end |
||||||
|
{:noreply, chatters} |
||||||
|
end |
||||||
|
|
||||||
|
def start_link(chatters) do |
||||||
|
GenServer.start_link(__MODULE__, chatters, name: :chatgroup) |
||||||
|
end |
||||||
|
|
||||||
|
def send_all(chatters, to, body) do |
||||||
|
chatters |
||||||
|
|> Map.keys |
||||||
|
|> Enum.each( |
||||||
|
fn chatter -> |
||||||
|
send(String.to_atom(chatter), {:sendprivmsg, to, body}) |
||||||
|
IO.puts("LOL, "<>inspect(chatter)) |
||||||
|
end |
||||||
|
) |
||||||
|
end |
||||||
|
|
||||||
|
end |
@ -1,3 +1,3 @@ |
|||||||
defmodule IrckedElixir.Chatter.State do |
defmodule IrckedElixir.Chatter.State do |
||||||
defstruct ip: "", port: 0, nick: "", sock: nil |
defstruct ip: "", port: 0, nick: "", sock: nil, reporter: false |
||||||
end |
end |
||||||
|
@ -1,18 +1,16 @@ |
|||||||
defmodule IrckedElixir.Overseer do |
defmodule IrckedElixir.Overseer do |
||||||
use Supervisor |
use Supervisor |
||||||
|
|
||||||
@server_address "localhost" |
|
||||||
@server_port 6667 |
|
||||||
@base_nick "functism" |
|
||||||
@chatters 20 |
|
||||||
|
|
||||||
def start_link(opts) do |
def start_link(opts) do |
||||||
Supervisor.start_link(__MODULE__, :ok, opts) |
Supervisor.start_link(__MODULE__, :ok, opts) |
||||||
end |
end |
||||||
|
|
||||||
@impl true |
@impl true |
||||||
def init(:ok) do |
def init(:ok) do |
||||||
children = 1..@chatters |> Enum.to_list |> Enum.map(fn n -> %{id: "chatter"<>to_string(n), start: {IrckedElixir.Chatter, :start_link, [%IrckedElixir.Chatter.State{ip: @server_address, port: @server_port, nick: @base_nick <> to_string(n)}]}} end) |
children = [ |
||||||
|
{DynamicSupervisor, strategy: :one_for_one, name: IrckedElixir.DynamicSupervisor}, |
||||||
|
{IrckedElixir.ChatGroup, %{}} |
||||||
|
] |
||||||
Supervisor.init(children, strategy: :one_for_one) |
Supervisor.init(children, strategy: :one_for_one) |
||||||
end |
end |
||||||
end |
end |
||||||
|
Loading…
Reference in new issue