Current section

Files

Jump to
pixie lib adapters cowboy websocket_handler.ex
Raw

lib/adapters/cowboy/websocket_handler.ex

require Logger
defmodule Pixie.Adapter.CowboyWebsocket do
@behaviour :cowboy_websocket_handler
def init _transport, req, opts do
init req, opts
end
def init req, opts do
{:upgrade, :protocol, :cowboy_websocket, req, opts}
end
def upgrade req, env, _handler, handler_opts do
:cowboy_websocket.upgrade req, env, __MODULE__, handler_opts
end
def websocket_init _transport, req, state do
{:ok, req, state}
end
def websocket_handle {:text, data}, req, _state do
Logger.debug "websocket_handle :text, #{inspect(data)}"
json = case Pixie.Protocol.handle Poison.decode!(data) do
[] ->
nil
events when is_list(events) ->
events
|> Enum.map(fn
%{response: r}-> r
end)
|> Poison.encode!
%{response: r} when not is_nil(r)->
Poison.encode! [r]
_ ->
nil
end
if json do
Logger.debug "sending frame #{inspect json}"
{:reply, {:text, json}, req, nil}
else
{:ok, req, nil}
end
end
def websocket_handle frame, req, state do
:cowboy_websocket.handle frame, req, state
end
def websocket_info msg, req, state do
IO.inspect msg
{:ok, req, state}
end
def websocket_terminate _msg, _req, _state do
:ok
end
end