PlugStatem
A gen_statem-style event loop that fits the Plug contract.
Elixir HTTP servers using Plug require every write to a Plug.Conn to come from the
process that received the request. PlugStatem.enter_loop/6 takes over that process
during the execution of a long-lived response, such as when serving SSE.
Over the lifetime of the response, your callback module will be executed just like
a standard gen_statem.
On :stop, PlugStatem.enter_loop/5 returns a result instead of exiting the process,
so that the rest of the Plug call/2 contract can be fulfilled.
def call(%Plug.Conn{path_info: ["events"]} = conn, _opts) do
conn = Plug.Conn.put_resp_content_type(conn, "text/event-stream")
case PlugStatem.enter_loop(MyStream, [], conn, :streaming, %{}) do
{_reason, _state, conn, _data} -> conn
end
end
See the PlugStatem module documentation for more details.
Installation
def deps do
[
{:plug_statem, "~> 0.1.0"}
]
end