defmodule Octonetcat.Echo do @moduledoc """ Echo TCP Socket Server Started under a task supervisor, lives for the life of the socket, dies on failure or disconnect. """ 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 |> String.trim() |> String.reverse() |> write_line!(socket) {:noreply, state} end def handle_info({:tcp_closed, _}, _state) do Logger.info("#{__MODULE__}: Connection closing...") {:stop, :normal, %{}} end def write_line!(line, socket) do :gen_tcp.send(socket, line) end end