require "kemal" # Array to store chat message history messages = [] of String # Array to keep track of connected WebSocket clients sockets = [] of HTTP::WebSocket # Create WebSocket endpoint at root path "/" ws "/" do |socket| # Add newly connected client socket to our sockets array sockets.push socket # Handle incoming messages from clients socket.on_message do |message| # Store the new message in history messages.push message # Broadcast the updated message history to all connected clients sockets.each do |a_socket| a_socket.send messages.to_json end end # Handle client disconnection socket.on_close do |_| # Remove disconnected client's socket from our array sockets.delete(socket) # Log disconnection event puts "Closing Socket: #{socket}" end end # Start the Kemal server Kemal.run