class Gameworks::Server

Attributes

game_registry[R]

Public Class Methods

new() click to toggle source
# File lib/gameworks/server.rb, line 14
def initialize
  @game_registry = Gameworks::GameRegistry.new
end

Public Instance Methods

call(env) click to toggle source
# File lib/gameworks/server.rb, line 22
def call(env)
  tokens = {}
  env.each do |key,value|
    case key
    when "HTTP_X_TURN_TOKEN"
      tokens[:turn] = value
    when "HTTP_X_OBSERVER_TOKEN"
      tokens[:observer] = value
    end
  end
  body = env["rack.input"].read
  unless body.empty?
    payload = JSON.parse("[#{body}]").first
  end
  process_request(
    :method => env["REQUEST_METHOD"],
    :path => env["REQUEST_PATH"],
    :payload => payload,
    :tokens => tokens,
    :async_cb => env['async.callback'])
end
game_class() click to toggle source
# File lib/gameworks/server.rb, line 18
def game_class
  raise NotImplementedError
end
process_request(request={}) click to toggle source
# File lib/gameworks/server.rb, line 44
def process_request(request={})
  handler = case request[:path]
    when %r{^/$}                then Gameworks::Servlet::GameList
    when %r{^/match$}           then Gameworks::Servlet::MatchMaker
    when %r{^/[^/]+/?$}         then Gameworks::Servlet::GameView
    when %r{^/[^/]+/players$}   then Gameworks::Servlet::AddPlayer
    when %r{^/[^/]+/moves$}     then Gameworks::Servlet::AddMove
    when %r{^/[^/]+/observers$} then Gameworks::Servlet::AddObserver
  end

  if handler
    begin
      handler.process(self, request)
    rescue Exception => e
      puts e.inspect
      puts e.backtrace
      [ 500, {}, [] ]
    end
  else
    [ 404, {}, [] ]
  end
end