defmodule Collision.Detector.Server do
@moduledoc """
Collision detector server
"""
use GenServer
def start_link([]) do
GenServer.start_link(__MODULE__, [])
end
def send_result(pid, task_id, task) do
GenServer.cast(pid, {:send_result, task_id, task})
end
@impl true
def init(_ops) do
TaskManager.request_task(self())
{:ok, nil}
end
@impl true
def handle_cast({:send_result, task_id, task}, state) do
TaskManager.request_task(self())
## add code here
##
if task_id==:empty_task do
#IO.puts "Empty"
{:noreply, state}
else
result = Distributor.Server.test_fun(task)
#:timer.sleep(1)
IO.inspect task_id
TaskManager.recieve_result(task_id, result)
{:noreply, state}
end
end
end
defmodule CollisionDetectorSupervisor do
use Supervisor
def start_link(num_detector) do
Supervisor.start_link(__MODULE__, num_detector)
end
def init(num_detector) do
workers = Enum.map(1..num_detector, fn(n) ->
worker(Collision.Detector.Server, [[]], id: "Detector#{n}")
end)
supervise(workers, strategy: :one_for_one)
end
end