Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F665091
icecast_see_controller.ex
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
990 B
Subscribers
None
icecast_see_controller.ex
View Options
defmodule
NolaWeb.IcecastSseController
do
use
NolaWeb
,
:controller
require
Logger
@ping_interval
20_000
def
sse
(
conn
,
_params
)
do
conn
|>
put_resp_header
(
"X-Accel-Buffering"
,
"no"
)
|>
put_resp_header
(
"content-type"
,
"text/event-stream"
)
|>
send_chunked
(
200
)
|>
subscribe
|>
send_sse_message
(
"ping"
,
"ping"
)
|>
send_sse_message
(
"icecast"
,
Nola.IcecastAgent
.
get
)
|>
sse_loop
end
def
subscribe
(
conn
)
do
:timer
.
send_interval
(
@ping_interval
,
{
:event
,
:ping
})
{
:ok
,
_
}
=
Registry
.
register
(
Nola.BroadcastRegistry
,
"icecast"
,
[])
conn
end
def
sse_loop
(
conn
)
do
{
type
,
event
}
=
receive
do
{
:event
,
:ping
}
->
{
"ping"
,
"ping"
}
{
:icecast
,
stats
}
->
{
"icecast"
,
stats
}
end
conn
|>
send_sse_message
(
type
,
event
)
|>
sse_loop
()
end
defp
send_sse_message
(
conn
,
type
,
data
)
do
json
=
Jason
.
encode!
(%{
type
=>
data
})
{
:ok
,
conn
}
=
chunk
(
conn
,
"event:
#{
type
}
\n
data:
#{
json
}
\n\n
"
)
conn
end
end
File Metadata
Details
Attached
Mime Type
text/x-ruby
Expires
Fri, Feb 27, 9:19 AM (19 h, 25 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
87159
Default Alt Text
icecast_see_controller.ex (990 B)
Attached To
rNOLA Nola
Event Timeline
Log In to Comment