]> git.sesse.net Git - remoteglot/blobdiff - www/js/hash-lookup.js
Add a SCORE_NONE, and fix a typo.
[remoteglot] / www / js / hash-lookup.js
index d9499d00d2c55beaf235ff55cf505a7dce01e059..8fe12970bb0e5ac5f75dc8b730a3a6586fa0d882 100644 (file)
@@ -7,7 +7,14 @@ var hashprobe_proto = grpc.load(PROTO_PATH).hashprobe;
 // TODO: Make destination configurable.
 var client = new hashprobe_proto.HashProbe('localhost:50051', grpc.credentials.createInsecure());
 
+var board = new Chess();
+
 var handle_request = function(fen, response) {
+       if (!board.validate_fen(fen).valid) {
+               response.writeHead(400, {});
+               response.end();
+               return;
+       }
        client.probe({fen: fen}, function(err, probe_response) {
                if (err) {
                        response.writeHead(500, {});
@@ -20,15 +27,13 @@ var handle_request = function(fen, response) {
 exports.handle_request = handle_request;
 
 var handle_response = function(fen, response, probe_response) {
-       var board = new Chess();
-
        var lines = {};
 
-       var root = translate_line(board, fen, probe_response['root'], true);
+       var root = translate_line(board, fen, probe_response['root']);
        for (var i = 0; i < probe_response['line'].length; ++i) {
                var line = probe_response['line'][i];
                var uci_move = line['move']['from_sq'] + line['move']['to_sq'] + line['move']['promotion'];
-               lines[uci_move] = translate_line(board, fen, line, false);
+               lines[uci_move] = translate_line(board, fen, line);
        }
 
        var text = JSON.stringify({
@@ -44,20 +49,24 @@ var handle_response = function(fen, response, probe_response) {
        response.end();
 }
 
-var translate_line = function(board, fen, line, pretty_score) {
+var translate_line = function(board, fen, line) {
        var r = {};
        board.load(fen);
        var toplay = board.turn();
 
        if (line['move'] && line['move']['from_sq']) {
-               r['pretty_move'] = board.move({ from: line['move']['from_sq'], to: line['move']['to_sq'], promotion: line['move']['promotion'] }).san;
+               var promo = line['move']['promotion'];
+               if (promo) {
+                       r['pretty_move'] = board.move({ from: line['move']['from_sq'], to: line['move']['to_sq'], promotion: promo.toLowerCase() }).san;
+               } else {
+                       r['pretty_move'] = board.move({ from: line['move']['from_sq'], to: line['move']['to_sq'] }).san;
+               }
        } else {
                r['pretty_move'] = '';
        }
        r['sort_key'] = r['pretty_move'];
        if (!line['found']) {
                r['pv_pretty'] = [];
-               r['score_sort_key'] = -100000000;
                return r;
        }
        r['depth'] = line['depth'];
@@ -77,54 +86,22 @@ var translate_line = function(board, fen, line, pretty_score) {
        }
        r['pv_pretty'] = pv;
 
-       // Write out the pretty score.
-       // TODO: mates!
-       var score = pretty_score ? 'Score: ' : '';
-
-       if (line['bound'] === 'BOUND_UPPER') {
-               score += '≤\u00a0';
-       } else if (line['bound'] === 'BOUND_LOWER') {
-               score += '≥\u00a0';
-       }
-
-       var value = line['value']['score_cp'];
-       if (value > 0) {
-               score += '+' + (value / 100.0).toFixed(2);
-       } else if (value < 0) {
-               score += (value / 100.0).toFixed(2);
-       } else if (value == 0) {
-               score += '0.00';
-       } else {
-               score += '';
+       // Convert the score.
+       var score = null;
+       if (line['value']['score_type'] === 'SCORE_CP') {
+               score = ['cp', line['value']['score_cp']];
+       } else if (line['value']['score_type'] === 'SCORE_MATE') {
+               score = ['m', line['value']['score_mate']];
        }
-       r['pretty_score'] = score;
-       r['score_sort_key'] = score_sort_key(line['value'], toplay === 'b') * 200 + r['depth'];
-
-       return r;
-}
-
-var score_sort_key = function(score, invert) {
-       if (score['score_type'] === 'SCORE_MATE') {
-               var mate = score['score_mate'];
-               var score;
-               if (mate > 0) {
-                       // Side to move mates
-                       score = 99999 - mate;
-               } else {
-                       // Side to move is getting mated (note the double negative for mate)
-                       score = -99999 - mate;
+       if (score) {
+               if (line['bound'] === 'BOUND_UPPER') {
+                       score.push('≤');
+               } else if (line['bound'] === 'BOUND_LOWER') {
+                       score.push('≥');
                }
-               if (invert) {
-                       score = -score;
-               }
-               return score;
-       } else if (score['score_type'] === 'SCORE_CP') {
-               var score = score['score_cp'];
-               if (invert) {
-                       score = -score;
-               }
-               return score;
        }
 
-       return null;
+       r['score'] = score;
+
+       return r;
 }