* Listener Implementation - In-Progress * Initial API Endpoints and Websocket implementation * API End Points Implemented -> /music_changed, /state_change * Websocket End Points implemented -> /i_am_listening_to * Socket Implementation - In-Progress
53 lines
1017 B
Crystal
53 lines
1017 B
Crystal
# TODO: Write documentation for `WialtListener`
|
|
require "kemal"
|
|
|
|
class MusicChange
|
|
include JSON::Serializable
|
|
|
|
property title : String
|
|
end
|
|
|
|
|
|
module WialtListener
|
|
VERSION = "0.1.0"
|
|
sockets = [] of HTTP::WebSocket
|
|
|
|
static_headers do |response|
|
|
response.headers.add("Access-Control-Allow-Origin", "")
|
|
end
|
|
|
|
post "/music_changed" do |env|
|
|
response = MusicChange.from_json env.request.body.not_nil!
|
|
puts "#{response.title}"
|
|
send_message_to_clients(sockets, response.title)
|
|
{status: "OK"}
|
|
end
|
|
|
|
post "/state_change" do |env|
|
|
puts "#{env.request.body}"
|
|
{status: "OK"}
|
|
end
|
|
|
|
ws "/i_am_listening_to" do |socket|
|
|
sockets.push socket
|
|
|
|
socket.on_message do |message|
|
|
send_message_to_clients(sockets, message)
|
|
end
|
|
|
|
socket.on_close do |_|
|
|
sockets.delete(socket)
|
|
puts "Closing Socket: #{socket}"
|
|
end
|
|
|
|
end
|
|
|
|
def self.send_message_to_clients(sockets, title)
|
|
sockets.each do |a_socket|
|
|
a_socket.send title
|
|
end
|
|
end
|
|
|
|
Kemal.run
|
|
end
|