out.end css
js_handler = (args, out, request, url_parts) ->
+ convert = false
basename = url_parts.pathname.substr 1, (url_parts.pathname.length - 4)
if basename is 'client'
filename = 'client.coffee'
+ convert = true
else if basename is 'common'
filename = 'common.coffee'
+ convert = true
+ else if basename is 'cs_cards'
+ filename = 'cs_cards.js'
+ convert = false
else
error = "Unknown js basename: #{basename}"
console.log error
fs.readFile filename, 'utf8', (err, data) ->
if err
return out.end "Server failed to read #{filename}"
- out.end coffee.compile data
+ if convert
+ out.end coffee.compile data
+ else
+ out.end data
html_handler = (args, out, request, url_parts) ->
fs.readFile 'index.html', 'utf8', (err, data) ->
queue = game.p2_queue
game.p2_waiter = false
game.p2_queue = []
- timeout 2000, -> # FIXME remove this delay for player 2 (just here to test lag handling)
- waiter.writeHead 200, 'Content-Type': 'text/javascript'
- waiter.end JSON.stringify queue
+ waiter.writeHead 200, 'Content-Type': 'text/javascript'
+ waiter.end JSON.stringify queue
# this marks a game as "dirty" and makes sure there's exactly one timeout
# that'll respond to any clients that are waiting, and now have messages.
forward_events.call this, 'mark', agent, card, state
game.on 'flip', (agent, card, state) ->
forward_events.call this, 'flip', agent, card, state
+ game.on 'new_cards', (agent, cards) ->
+ # server assigns card numbers, and tells both clients
+ # (unlike all other api calls, sending agent expects to get this one back)
+ forward_events.call this, 'new_cards', 'server', cards
game.on 'set_cards', (agent, cards) ->
forward_events.call this, 'set_cards', agent, cards
game.on 'send_state', (agent) ->
test_init = ->
test_game = new_game 'test'
- timeout 2, ->
- test_game.set_cards 'server', [
- { text: "Wildabeast 2/2", x: 220, y: 200, owner: 'p2'}
- { text: "Boar 2/2", x: 360, y: 200, owner: 'p2', pile: 'p2_discard'}
- { text: "Angora bunny 1/1", x: 500, y: 200, owner: 'p2'}
- { text: "Ambulatory Cactus 2/1", x: 660, y: 200, owner: 'p2'}
- { text: "Ent 0/5", x: 800, y: 200, owner: 'p2'}
- { text: "Carnivore 2/1", x: 220, y: 420, owner: 'p1'}
- { text: "Herbivore 1/2", x: 360, y: 420, owner: 'p1'}
- { text: "Stone Wall 0/10", x: 500, y: 420, owner: 'p1', pile: 'p1_draw', flipped: true}
- { text: "Log 0/1", x: 660, y: 420, owner: 'p1', pile: 'p1_draw', flipped: true}
- { text: "Ent 0/5", x: 800, y: 420, owner: 'p1', pile: 'p1_draw', flipped: true}
- { text: "Barricade 0/10", x: 500, y: 420, owner: 'p1', pile: 'p1_draw', flipped: true}
- { text: "O(log(n)) 0/1", x: 660, y: 420, owner: 'p1', pile: 'p1_draw', flipped: true}
- { text: "Fence 0/5", x: 800, y: 420, owner: 'p1', pile: 'p1_draw', flipped: true}
- ]
-
test_init()
for key, parg of post_args
query[key] = parg
return set_handler query, res, req, url_parts
+ return
else if rel_path.substr(rel_path.length - 4) is '/get'
return get_handler url_parts.query, res, req, url_parts
else if rel_path.substr(rel_path.length - 4) is '.ico'