mirror of
https://github.com/faye/faye-websocket-ruby.git
synced 2025-11-01 13:59:13 +00:00
60 lines
1.3 KiB
Ruby
60 lines
1.3 KiB
Ruby
require 'puma'
|
|
require 'puma/binder'
|
|
require 'puma/events'
|
|
|
|
unless RUBY_PLATFORM =~ /java/
|
|
Faye::WebSocket.load_adapter('thin')
|
|
Thin::Logging.silent = true
|
|
end
|
|
|
|
class EchoServer
|
|
def call(env)
|
|
socket = Faye::WebSocket.new(env, ["echo"])
|
|
socket.onmessage = lambda do |event|
|
|
socket.send(event.data)
|
|
end
|
|
socket.rack_response
|
|
end
|
|
|
|
def log(*args)
|
|
end
|
|
|
|
def listen(port, backend, tls = false)
|
|
case backend
|
|
when :puma then listen_puma(port, tls)
|
|
when :thin then listen_thin(port, tls)
|
|
end
|
|
end
|
|
|
|
def stop
|
|
case @server
|
|
when Puma::Server then @server.stop(true)
|
|
else @server.stop
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def listen_puma(port, tls)
|
|
events = Puma::Events.new(StringIO.new, StringIO.new)
|
|
binder = Puma::Binder.new(events)
|
|
binder.parse(["tcp://0.0.0.0:#{ port }"], self)
|
|
@server = Puma::Server.new(self, events)
|
|
@server.binder = binder
|
|
@server.run
|
|
end
|
|
|
|
def listen_thin(port, tls)
|
|
Rack::Handler.get('thin').run(self, :Port => port) do |s|
|
|
if tls
|
|
s.ssl = true
|
|
s.ssl_options = {
|
|
:private_key_file => File.expand_path('../server.key', __FILE__),
|
|
:cert_chain_file => File.expand_path('../server.crt', __FILE__)
|
|
}
|
|
end
|
|
@server = s
|
|
end
|
|
end
|
|
end
|