Current section
Files
Jump to
Current section
Files
lib/protocol/disconnect.ex
defmodule Pixie.Disconnect do
alias Pixie.Protocol.Error
alias Pixie.Backend
import Pixie.Utils.Map
def handle %{message: %{client_id: nil}}=event do
parameter_missing event
end
def handle %{message: %{channel: nil}}=event do
parameter_missing event
end
def handle %{message: %{connection_type: nil}}=event do
parameter_missing event
end
def handle %{message: %{client_id: c_id}, client: nil, response: r}=event do
case Backend.get_client(c_id) do
nil ->
%{event | response: Error.client_unknown(r, c_id)}
client ->
handle %{event | client: client}
end
end
def handle(%{message: %{client_id: c_id}}=event) do
Task.async Backend, :destroy_client, [c_id]
event
end
# Return a parameter_missing error with a list of missing params.
defp parameter_missing %{message: m, response: r}=event do
missing = []
|> missing_key?(m, :channel)
|> missing_key?(m, :client_id)
|> missing_key?(m, :connection_type)
%{event | response: Error.parameter_missing(r, missing)}
end
end