32 lines
675 B
Elixir
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
|