UNPKG

dl

Version:

DreamLab Libs

86 lines (72 loc) 2.78 kB
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;