Parallel task worker with kill signaling in Elixir

defmodule Taskwork2 do
@moduledoc """
Generated by erl2ex (http://github.com/dazuma/erl2ex)
From Erlang source: (Unknown source file)
At: 2019-12-20 13:57:37

"""

def main() do
{:ok, context} = :erlzmq.context()
{:ok, receiver} = :erlzmq.socket(context, [:pull, {:active, true}])
:ok = :erlzmq.connect(receiver, 'tcp://localhost:5557')
{:ok, sender} = :erlzmq.socket(context, :push)
:ok = :erlzmq.connect(sender, 'tcp://localhost:5558')
{:ok, controller} = :erlzmq.socket(context, [:sub, {:active, true}])
:ok = :erlzmq.connect(controller, 'tcp://localhost:5559')
:ok = :erlzmq.setsockopt(controller, :subscribe, @<>@)
process_messages(receiver, controller, sender)
:ok = :erlzmq.close(receiver)
:ok = :erlzmq.close(sender)
:ok = :erlzmq.close(controller)
:ok = :erlzmq.term(context)
end

def process_messages(receiver, controller, sender) do
receive do
{:zmq, ^receiver, msg, _flags} ->
:timer.sleep(:erlang.list_to_integer(:erlang.binary_to_list(msg)))
:ok = :erlzmq.send(sender, msg)
:io.format('.')
process_messages(receiver, controller, sender)
{:zmq, ^controller, _msg, _flags} ->
:ok
end
end

end

Taskwork2.main