diff options
author | Indrajith K L | 2023-11-06 06:12:28 +0530 |
---|---|---|
committer | Indrajith K L | 2023-11-06 06:12:28 +0530 |
commit | bf91c7ef4f374a78bff46a42a85c0426b0abf7d0 (patch) | |
tree | a38e002b64c3dd5fb6f9dca7791eba4f99a68760 /src | |
download | wialt_listener-master.tar.gz wialt_listener-master.tar.bz2 wialt_listener-master.zip |
* 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
Diffstat (limited to 'src')
-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 |