diff options
-rw-r--r-- | lib/octochat/acceptor.ex | 7 | ||||
-rw-r--r-- | lib/octochat/servers/echo.ex | 23 | ||||
-rw-r--r-- | lib/octochat/supervisor.ex | 1 | ||||
-rw-r--r-- | mix.exs | 2 |
4 files changed, 31 insertions, 2 deletions
diff --git a/lib/octochat/acceptor.ex b/lib/octochat/acceptor.ex index 66d97fc..5730ee4 100644 --- a/lib/octochat/acceptor.ex +++ b/lib/octochat/acceptor.ex @@ -14,7 +14,12 @@ defmodule Octochat.Acceptor do defp loop_acceptor(socket) do {:ok, client} = :gen_tcp.accept(socket) - :gen_tcp.close(client) + {:ok, pid} = Task.Supervisor.start_child( + Octochat.TaskSupervisor, + Octochat.Echo, + :serve, + [client]) + :ok = :gen_tcp.controlling_process(client, pid) loop_acceptor(socket) end diff --git a/lib/octochat/servers/echo.ex b/lib/octochat/servers/echo.ex new file mode 100644 index 0000000..fe25079 --- /dev/null +++ b/lib/octochat/servers/echo.ex @@ -0,0 +1,23 @@ +defmodule Octochat.Echo do + @moduledoc """ + Octochat Echo server + """ + + def serve(socket) do + socket + |> read_line!() + |> write_line!(socket) + + serve(socket) + end + + defp read_line!(socket) do + {:ok, line} = :gen_tcp.recv(socket, 0) + line + end + + defp write_line!(line, socket) do + :gen_tcp.send(socket, line) + end + +end diff --git a/lib/octochat/supervisor.ex b/lib/octochat/supervisor.ex index 0c38829..d551628 100644 --- a/lib/octochat/supervisor.ex +++ b/lib/octochat/supervisor.ex @@ -11,6 +11,7 @@ defmodule Octochat.Supervisor do def init(_) do children = [ + supervisor(Task.Supervisor, [[name: Octochat.TaskSupervisor]]), worker(Task, [Octochat.Acceptor, :accept, []]) ] @@ -5,7 +5,7 @@ defmodule Octochat.Mixfile do [app: :octochat, description: "Demo Application for How Swapping Code", package: package(), - version: "0.1.0", + version: "0.2.0", elixir: "~> 1.3", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, |