JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
Let drags go off the edge
[peach-cgt.git] / server.coffee
index 46d48c5..91250cb 100644 (file)
@@ -23,11 +23,17 @@ css_handler = (args, out, request, url_parts) ->
                        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
@@ -37,7 +43,10 @@ js_handler = (args, out, request, url_parts) ->
        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) ->
@@ -134,9 +143,8 @@ answer_now = (game) ->
                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.
@@ -161,12 +169,16 @@ new_game = (id) ->
        game.p1_queue = []
        game.p2_queue = []
 
-       game.on 'move', (agent, card, x, y) ->
-               forward_events.call this, 'move', agent, card, x, y
+       game.on 'move', (agent, card, x, y, z, pile) ->
+               forward_events.call this, 'move', agent, card, x, y, z, pile
        game.on 'mark', (agent, card, state) ->
                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) ->
@@ -182,20 +194,6 @@ new_game = (id) ->
 
 test_init = ->
        test_game = new_game 'test'
-       timeout 4000, ->
-               test_game.set_cards 'server', [
-                       { text: "Wildabeast 2/2", x: 220, y: 200, owner: 'p2'}
-                       { text: "Wild beast 2/2", x: 360, y: 200, owner: 'p2'}
-                       { 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'}
-                       { text: "Log 0/1", x: 660, y: 420, owner: 'p1'}
-                       { text: "Ent 0/5", x: 800, y: 420, owner: 'p1'}
-               ]
-
 test_init()
 
 
@@ -224,6 +222,7 @@ http_server = http.createServer (req, res) ->
                        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'