diff options
Diffstat (limited to 'src/wialt_listener.cr')
-rw-r--r-- | src/wialt_listener.cr | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/wialt_listener.cr b/src/wialt_listener.cr new file mode 100644 index 0000000..7c4d01e --- /dev/null +++ b/src/wialt_listener.cr @@ -0,0 +1,52 @@ +# 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 |