mirror of
https://github.com/faye/websocket-driver-ruby.git
synced 2025-11-01 13:59:38 +00:00
48 lines
1.1 KiB
Ruby
48 lines
1.1 KiB
Ruby
require File.expand_path('../../lib/faye/websocket', __FILE__)
|
|
require 'rack'
|
|
|
|
static = Rack::File.new(File.dirname(__FILE__))
|
|
|
|
App = lambda do |env|
|
|
if Faye::WebSocket.web_socket?(env)
|
|
socket = Faye::WebSocket.new(env, ['irc', 'xmpp'])
|
|
p [:open, socket.url, socket.version, socket.protocol]
|
|
|
|
socket.onmessage = lambda do |event|
|
|
socket.send(event.data)
|
|
end
|
|
|
|
socket.onclose = lambda do |event|
|
|
p [:close, event.code, event.reason]
|
|
socket = nil
|
|
end
|
|
|
|
socket.rack_response
|
|
|
|
elsif Faye::EventSource.event_source?(env)
|
|
socket = Faye::EventSource.new(env)
|
|
time = socket.last_event_id.to_i
|
|
|
|
p [:open, socket.url, socket.last_event_id]
|
|
|
|
loop = EM.add_periodic_timer(2) do
|
|
time += 1
|
|
socket.send("Time: #{time}")
|
|
EM.add_timer(1) do
|
|
socket.send('Update!!', :event => 'update', :id => time)
|
|
end
|
|
end
|
|
|
|
socket.onclose = lambda do
|
|
EM.cancel_timer(loop)
|
|
socket = nil
|
|
end
|
|
|
|
socket.rack_response
|
|
|
|
else
|
|
static.call(env)
|
|
end
|
|
end
|
|
|