Mercurial > repos > icfp2013
diff src/requests.tp @ 25:bb80f86c5048
Added code for sending and decoding the responses of evalRequests
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 10 Aug 2013 16:31:48 -0700 |
parents | e1109e33b796 |
children | 18a043613dae |
line wrap: on
line diff
--- a/src/requests.tp Sat Aug 10 11:53:21 2013 -0700 +++ b/src/requests.tp Sat Aug 10 16:31:48 2013 -0700 @@ -24,7 +24,7 @@ - evalRequest <- :id args { + evalId <- :id args { #{ string <- { idStr <- (quote: "id") . ":" . (quote: id) @@ -34,6 +34,25 @@ } } + evalProgram <- :program args { + args <- args map: :el { + "\"0x" . (hex: el) . "\"" + } + #{ + string <- { + progStr <- (quote: "program") . ":" . (quote: program) + argsStr <- (quote: "arguments") . ":[" . (strJoin: "," args) . "]" + "{" . progStr . "," . argsStr . "}" + } + sendWithKey <- :key { + print: "Sending: " . string . "\n" + cli <- http client: "icfpc2013.cloudapp.net" + resp <- cli post: string toPath: "/eval?auth=" . key withType: "application/json" + evalResponse: resp + } + } + } + guessRequest <- :id :prog { #{ string <- { @@ -44,67 +63,58 @@ } } - - - - - expect:in:else <- :target src doElse { - src find: target else: { - print: "parse error: expected " . target . "!\n" - doElse: + evalResponse <- :httpResp { + _code <- httpResp statusCode + bod <- httpResp body + print: "Response code: " . (string: _code) . "\n" + print: bod . "\n" + decoded <- json decode: bod + _status <- "error" + if: _code = 200 { + _status <- decoded get: "status" withDefault: "error" + } else: { + print: "bad status" } - } - - getStrForKey:from:else <- :key :src :doElse { - firstKeyQuote <- expect: "\"" in: src else: doElse - secondQuote <- firstKeyQuote + 1 + (key length) - - #{ - value <- "" - rest <- src from: (value length) - } - } - - getOutputs:else <- :str :fail { - - } - - getEval:else <- :str :fail { - statusRest <- getStrForKey: "status" from: str else: fail - if: (statusRest value) = "ok" { // string equality? revisit. - outputsRest <- getOutputs: (statusRest rest) else: fail + if: _status = "ok" { + _outputs <- (decoded get: "outputs" withDefault: #[]) map: :num { + (num from: 2) parseHex64 + } #{ - value <- #{ - status <- statusRest value - outputs <- outputsRest value + status <- { "ok" } + outputs <- { _outputs } + string <- { + str <- "OK:" + foreach: _outputs :idx val { + str <- str . "\n" . (string: idx) . ": 0x" . (hex: val) + } + str } - rest <- outputsRest rest + print <- { + print: string . "\n" + } } } else: { - message <- "" - print: "Status was error, message: " . message - messageRest <- getStrForKey: "message" from: (statusRest rest) else: fail + _message <- decoded get: "message" withDefault: "" #{ - value <- #{ - status <- statusRest value - message <- messageRest value + status <- { "error" } + message <- { _message } + string <- { + "Error: " . _message } - rest <- messageRest rest + print <- { + print: string . "\n" + } } } } - - - main <- { - print: ((evalRequest: "someId" #[1 2i64 3i64]) string) . "\n" + main <- :args { + print: ((evalId: "someId" #[1u64 2u64 3u64]) string) . "\n" print: ((guessRequest: "someId" "someProg") string) . "\n" - exampleEvalResponse <- "{\"status\":\"ok\",\"outputs\":[\"0x0000000000000002\",\"0x01DFFFFFFFFFFFFE\"]}" - resp <- getEval: exampleEvalResponse else: { - println: "failed to parse response." + if: (args length) > 1 { + key <- args get: 1 + print: ((evalProgram: "(lambda (input) (shl1 input))" #[1u64 0xEFFFFFFFFFFFFFu64]) sendWithKey: key) } - println: ((resp value) status) } - }