require 'safely' Game.broadcast = EM::Channel.new module GameServer class Backend < Struct.new(:app) KEEP_ALIVE_TIME = 15 def call(env) if Faye::WebSocket.websocket?(env) web_socket = Faye::WebSocket.new(env, nil, ping: KEEP_ALIVE_TIME) player = env['warden'].authenticate(:player) PlayerConnection.new(player: player, web_socket: web_socket).listen # Return async Rack response web_socket.rack_response else app.call(env) end end end end