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
33
34
35
36
37
38
|
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()
|> Kernel.<>("\n")
|> 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
|