dl
Version:
DreamLab Libs
86 lines (72 loc) • 2.78 kB
JavaScript
var OpalResponse = require('./OpalResponse.js').OpalResponse;
var Event = require("core").event.Event;
var ErrorEvent = require("core").event.ErrorEvent;
var Class = require("core").Class;
var Loader = require("core").http.Loader;
var Response = require("core").http.Response;
var JsonRpcResponse = require("core").jsonrpc.JsonRpcResponse;
var JsonRpcBatchResponse = require("core").jsonrpc.JsonRpcBatchResponse;
/**
* @class OpalLoader
* @extends EventDispatcher
* @requires Class
* @requires OpalRequest
* @requires Event
* @requires ErrorEvent
* @requires EventDispatcher
* @requires http
*
* @param {OpalRequest} request
*/
var OpalLoader = function(){
/** @ignore */
this.Extends = Loader;
this.initialize = function(request){
this.parent(request);
};
this._createResponse = function(data) {
var result = [];
if (Array.isArray(data)) {
result = new JsonRpcBatchResponse(data);
}
else {
result = new JsonRpcResponse(data);
}
return result;
};
this._parseResponse = function(response){
var isJson = response.headers.hasOwnProperty('content-type') && response.headers['content-type'].indexOf('application/json') !== -1, data, body;
if(isJson){
var json = this._buffer.toString();
try {
body = this._createResponse(JSON.parse(json));
} catch(err) {
this.dispatchEvent(new ErrorEvent(Loader.Event.ERROR, {json: json, error: (err.message || err)}, -4, 'JSON parse error'));
return false;
}
}else if(response.statusCode!=200){
this.dispatchEvent(new ErrorEvent(Loader.Event.ERROR, {statusCode: response.statusCode}, -5, 'opal error, status code != 200 -> '+ response.statusCode));
return false;
}else{
body = new Response(this._buffer);
}
data = new OpalResponse({
"statusCode": response.statusCode,
"headers": response.headers,
"httpVersion": response.httpVersion,
"body": body
});
if(isJson){
this.dispatchEvent(new Event(OpalLoader.Event.JSON_RESPONSE, data));
}else{
this.dispatchEvent(new Event(OpalLoader.Event.HTTP_RESPONSE, data));
}
//zwracamy "blad" aby Loader oszukac dispatch Loader.Event.LOADED
return false;
};
};
OpalLoader = new Class(new OpalLoader());
OpalLoader.Event = {};
OpalLoader.Event.JSON_RESPONSE = 'OpalLoader_JSON_RESPONSE';
OpalLoader.Event.HTTP_RESPONSE = 'OpalLoader_HTTP_RESPONSE';
exports.OpalLoader = OpalLoader;