# 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