summaryrefslogtreecommitdiff
path: root/share/server/loop.js
diff options
context:
space:
mode:
authorJohn Christopher Anderson <jchris@apache.org>2009-04-18 20:15:44 +0000
committerJohn Christopher Anderson <jchris@apache.org>2009-04-18 20:15:44 +0000
commit3e47bfd6586f42f9fe8e49cea03c4df976c781a1 (patch)
treeb3ae7a8203f2d4ec99a84762ea9aedda56864d88 /share/server/loop.js
parentdaa9d65a53dedaac5aeeb6394d4c0b6f99fa930c (diff)
refactor main.js into many files and improve show/list error handling
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@766383 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'share/server/loop.js')
-rw-r--r--share/server/loop.js62
1 files changed, 62 insertions, 0 deletions
diff --git a/share/server/loop.js b/share/server/loop.js
new file mode 100644
index 00000000..170a8dc8
--- /dev/null
+++ b/share/server/loop.js
@@ -0,0 +1,62 @@
+// Licensed under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License. You may obtain a copy
+// of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+var sandbox = null;
+
+try {
+ // if possible, use evalcx (not always available)
+ sandbox = evalcx('');
+ sandbox.emit = emit;
+ sandbox.sum = sum;
+ sandbox.log = log;
+ sandbox.toJSON = toJSON;
+ sandbox.respondWith = respondWith;
+ sandbox.registerType = registerType;
+} catch (e) {}
+
+// Commands are in the form of json arrays:
+// ["commandname",..optional args...]\n
+//
+// Responses are json values followed by a new line ("\n")
+
+var cmd, cmdkey;
+
+var dispatch = {
+ "reset" : State.reset,
+ "add_fun" : State.addFun,
+ "map_doc" : Views.mapDoc,
+ "reduce" : Views.reduce,
+ "rereduce" : Views.rereduce,
+ "validate" : Validate.validate,
+ "show_doc" : Render.showDoc,
+ "list_begin" : Render.listBegin,
+ "list_row" : Render.listRow,
+ "list_tail" : Render.listTail
+};
+
+while (cmd = eval(readline())) {
+ try {
+ cmdkey = cmd.shift();
+ if (dispatch[cmdkey]) {
+ // run the correct responder with the cmd body
+ dispatch[cmdkey].apply(this, cmd);
+ } else {
+ // unknown command, quit and hope the restarted version is better
+ respond({
+ error: "query_server_error",
+ reason: "unknown command '" + cmdkey + "'"});
+ quit();
+ }
+ } catch(e) {
+ respond(e);
+ }
+};