sunbeam/lib/sunbeam/connection.ex

32 lines
675 B
Elixir

defmodule Sunbeam.Connection do
use GenServer, restart: :temporary
require Logger
def start_link(socket) do
GenServer.start_link(__MODULE__, socket)
end
@impl true
def init(socket) do
{:ok, user} = Sunbeam.UserSupervisor.create_user(self())
Process.link(user)
{:ok, %{user: user, socket: socket}}
end
@impl true
def handle_info({:tcp, socket, data}, state) do
:inet.setopts(socket, active: :once)
{:noreply, state}
end
@impl true
def handle_info({:tcp_closed, socket}, state) do
{:stop, :normal, state}
end
@impl true
def handle_info({:tcp_error, socket, reason}, state) do
{:stop, reason, state}
end
end