src/streamer/network-streamer.js
- /**
- * @file Network Streamer
- * @author Alexander Rose <alexander.rose@weirdbyte.de>
- * @private
- */
-
- import Streamer from './streamer.js'
-
- class NetworkStreamer extends Streamer {
- get type () { return 'network' }
-
- get __srcName () { return 'url' }
-
- _read (callback) {
- let url = this.src
-
- if (typeof importScripts === 'function') {
- // FIXME
- // adjust relative path when inside a web worker
- if (url.substr(0, 3) === '../') url = '../' + url
- }
-
- const xhr = new window.XMLHttpRequest()
- xhr.open('GET', url, true)
-
- //
-
- xhr.addEventListener('load', function () {
- if (xhr.status === 200 || xhr.status === 304 ||
- // when requesting from local file system
- // the status in Google Chrome/Chromium is 0
- xhr.status === 0
- ) {
- try {
- callback(xhr.response)
- } catch (e) {
- this.onerror(e)
- }
- } else {
- if (typeof this.onerror === 'function') {
- this.onerror(xhr.status)
- }
-
- throw new Error('NetworkStreamer._read: status code ' + xhr.status)
- }
- }.bind(this), false)
-
- //
-
- // if( typeof this.onprogress === "function" ){
-
- // xhr.addEventListener( 'progress', function ( event ) {
-
- // this.onprogress( event );
-
- // }.bind( this ), false );
-
- // }
-
- //
-
- if (typeof this.onerror === 'function') {
- xhr.addEventListener('error', function (event) {
- this.onerror(event)
- }.bind(this), false)
- }
-
- //
-
- if (this.isBinary()) {
- xhr.responseType = 'arraybuffer'
- } else if (this.json) {
- xhr.responseType = 'json'
- } else if (this.xml) {
- xhr.responseType = 'document'
- } else {
- xhr.responseType = 'text'
- }
- // xhr.crossOrigin = true;
-
- xhr.send(null)
-
- // try {
- // xhr.send( null );
- // }catch( e ){
- // if( typeof this.onerror === "function" ){
- // this.onerror( e.message );
- // }
- // }
- }
- }
-
- export default NetworkStreamer