Slide 28
Slide 28 text
n to m
defmodule RcDemo.Game.Balanced.Master do
def init(port) do
worker_pids = Enum.reduce(1..2, [], fn _x, acc ->
{:ok, pid} = Worker.start()
[pid] ++ acc
end)
spawn(fn ->
TcpListner.listen(port,{__MODULE__,
:new_connection, [[worker_pids]]})
end)
{:ok, %{}}
end
def new_connection([worker_pids], socket) do
worker_index = hash_socket(socket)
worker_pid = Enum.at(worker_pids, worker_index)
{Worker, :incoming, [worker_pid]}
end
defp hash_socket(_socket), do: :rand.uniform(2) – 1
end
defmodule RcDemo.Game.Balanced.Worker do
def init(_params), do: {:ok, %{}}
def incoming(pid, message),
do: GenServer.cast(pid, {:incoming, message})
def handle_cast({:incoming, message}, state) do
IO.inspect(message,
label:
"Received in Worker with pid: #{inspect self()}")
{:noreply, state}
end
end