dl
Version:
DreamLab Libs
84 lines (74 loc) • 3.11 kB
JavaScript
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;