aboutsummaryrefslogtreecommitdiff
path: root/lib/octochat/servers/echo.ex
blob: bea986447f6a07c9d951e8af1381435e70a930fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
defmodule Octochat.Echo do
  @moduledoc """
  Octochat Echo server
  """
  use GenServer
  require Logger

  def start_link(socket) do
    GenServer.start_link(__MODULE__, socket)
  end

  def init(socket) do
    :ok = :inet.setopts(socket, active: true)
    {:ok, %{socket: socket}}
  end

  def handle_info({:tcp, _, msg}, state = %{socket: socket}) do
    msg
      |> write_line!(socket)
    {:noreply, state}
  end

  def handle_info({:tcp_closed, _}, state) do
    Logger.info("#{__MODULE__}: Connection closing")
    {:stop, :normal, %{}}
  end

  defp write_line!(line, socket) do
    :gen_tcp.send(socket, line)
  end

end