33 lines
857 B
Crystal
33 lines
857 B
Crystal
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
|