From bf91c7ef4f374a78bff46a42a85c0426b0abf7d0 Mon Sep 17 00:00:00 2001 From: Indrajith K L Date: Mon, 6 Nov 2023 06:12:28 +0530 Subject: Initial Commit * 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 --- src/wialt_listener.cr | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/wialt_listener.cr (limited to 'src') 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 -- cgit v1.2.3