UNPKG

dl

Version:

DreamLab Libs

84 lines (74 loc) 3.11 kB
var JsonRpcMethod = require('core').jsonrpc.JsonRpcMethod, Event = require('core').event.Event, ErrorEvent = require('core').event.ErrorEvent, Request = require('core').http.Request, Response = require('core').http.Response, BinaryData = require('core').data.BinaryData, NsessManager = require('dl').nsess.NsessManager; var QueryMethod = function () { JsonRpcMethod.apply(this, arguments); }; QueryMethod.prototype = Object.create(JsonRpcMethod.prototype); QueryMethod.prototype.execute = function (params) { var request = new Request(params.request), response = new Response({ "headers": { "content-type": "text/javascript; charset=utf-8", "cache-control": "no-cache, must-revalidate, post-check=0, pre-check=0", "pargma": "no-cache" } }), session = new NsessManager(request, response), dispatched = false, that = this; session.addEventListener(NsessManager.Event.ERROR, function (e) { var body; if (!dispatched) { dispatched = true; body = new BinaryData(JSON.stringify(e.toJson()), BinaryData.Encoding.TEXT, BinaryData.CharacterEncoding.UTF8); response.setStatusCode(503); response.setBody(body); response.setHeader("content-length", body.length()); this.dispatchEvent(new Event(JsonRpcMethod.Event.OK, response.toJson())); } }, this); session.get(function (err, data) { if (!err) { if (data) { data = JSON.parse(JSON.stringify(data)); // clone } else { data = {}; } if (data.counter) { ++data.counter; } else { data.counter = 1; } data.time = new Date(); try { session.set(data); } catch (e) { session.dispatchEvent(new ErrorEvent(NsessManager.Event.ERROR, null, -1, e.toString())); return; } session.addEventListener(NsessManager.Event.WRITE_OK, function (e) { var body; if (!dispatched) { dispatched = true; body = new BinaryData(JSON.stringify(data), BinaryData.Encoding.TEXT, BinaryData.CharacterEncoding.UTF8); response.setStatusCode(200); response.setBody(body); response.setHeader("content-length", body.length()); this.dispatchEvent(new Event(JsonRpcMethod.Event.OK, response.toJson())); } }, that); try { session.write(); } catch (e) { session.dispatchEvent(new ErrorEvent(NsessManager.Event.ERROR, null, -1, e.toString())); return; } } }); }; exports.QueryMethod = QueryMethod;