// Tell the worker the file it was created from.
messageHandler.send('workerSrc', workerSrc);
- messageHandler.on('test', function pdfDocTest(supportTypedArray) {
+ messageHandler.on('test', function pdfDocTest(message) {
+ var supportTypedArray = message.data;
if (supportTypedArray) {
this.worker = worker;
this.setupMessageHandler(messageHandler);
setupMessageHandler: function(messageHandler) {
this.messageHandler = messageHandler;
- messageHandler.on('page', function pdfDocPage(data) {
+ messageHandler.on('page', function pdfDocPage(message) {
+ var data = message.data;
var pageNum = data.pageNum;
var page = this.pageCache[pageNum];
var depFonts = data.depFonts;
page.startRenderingFromIRQueue(data.IRQueue, depFonts);
}, this);
- messageHandler.on('obj', function pdfDocObj(data) {
+ messageHandler.on('obj', function pdfDocObj(message) {
+ var data = message.data;
var id = data[0];
var type = data[1];
}
}, this);
- messageHandler.on('font_ready', function pdfDocFontReady(data) {
+ messageHandler.on('font_ready', function pdfDocFontReady(message) {
+ var data = message.data;
var id = data[0];
var font = new FontShape(data[1]);
}
}.bind(this));
- messageHandler.on('page_error', function pdfDocError(data) {
+ messageHandler.on('page_error', function pdfDocError(message) {
+ var data = message.data;
var page = this.pageCache[data.pageNum];
if (page.callback)
page.callback(data.error);
buf[j] = data[i];
}
}
- message.resolve({ data: buf, width: width, height: height});
+ message.reply({ data: buf, width: width, height: height});
}).bind(this);
var src = 'data:image/jpeg;base64,' + window.btoa(imageData);
img.src = src;
'use strict';
+function Message(data) {
+ this.data = data;
+ this.allowsReply = false;
+ this.messager;
+ this.id;
+}
+Message.prototype = {
+ reply: function messageReply(data) {
+ if (!this.allowsReply)
+ error('This message does not accept replies.');
+
+ this.messager({
+ isReply: true,
+ callbackId: this.id,
+ data: data
+ });
+ },
+ setupReply: function setupReply(messager, id) {
+ this.allowsReply = true;
+ this.messager = messager;
+ this.id = id;
+ }
+}
+
function MessageHandler(name, comObj) {
this.name = name;
this.comObj = comObj;
this.callbackIndex = 1;
- this.callbacks = {};
+ var callbacks = this.callbacks = {};
var ah = this.actionHandler = {};
ah['console_log'] = [function ahConsoleLog(data) {
ah['console_error'] = [function ahConsoleError(data) {
console.error.apply(console, data);
}];
- ah['__resolve__'] = [ function(data) {
+
+ comObj.onmessage = function messageHandlerComObjOnMessage(event) {
+ var data = event.data;
+ if (data.isReply) {
var callbackId = data.callbackId;
- if (data.callbackId in this.callbacks) {
- var callback = this.callbacks[callbackId];
- delete this.callbacks[callbackId];
+ if (data.callbackId in callbacks) {
+ var callback = callbacks[callbackId];
+ delete callbacks[callbackId];
callback(data.data);
} else {
throw 'Cannot resolve callback ' + callbackId;
}
- }, this];
-
- comObj.onmessage = function messageHandlerComObjOnMessage(event) {
- var data = event.data;
- if (data.action in ah) {
+ } else if (data.action in ah) {
var action = ah[data.action];
- if (data.callbackId) {
- action[0].call(action[1], {
- data: data.data,
- resolve: (function(callbackId) {
- return function(resolvedData) {
- comObj.postMessage({
- action: '__resolve__',
- data: {
- data: resolvedData,
- callbackId: data.callbackId
- }
- });
- }})(data.callbackId)
- });
- } else {
- action[0].call(action[1], data.data);
- }
+ var message = new Message(data.data);
+ if (data.callbackId)
+ message.setupReply(this.postMessage, data.callbackId);
+
+ action[0].call(action[1], message);
} else {
throw 'Unkown action from worker: ' + data.action;
}
setup: function wphSetup(handler) {
var pdfDoc = null;
- handler.on('test', function wphSetupTest(data) {
+ handler.on('test', function wphSetupTest(message) {
+ var data = message.data;
handler.send('test', data instanceof Uint8Array);
});
// undefined action `workerSrc`.
});
- handler.on('doc', function wphSetupDoc(data) {
+ handler.on('doc', function wphSetupDoc(message) {
+ var data = message.data;
// Create only the model of the PDFDoc, which is enough for
// processing the content of the pdf.
pdfDoc = new PDFDocModel(new Stream(data));
});
- handler.on('page_request', function wphSetupPageRequest(pageNum) {
+ handler.on('page_request', function wphSetupPageRequest(message) {
+ var pageNum = message.data;
pageNum = parseInt(pageNum);
});
}, this);
- handler.on('font', function wphSetupFont(data) {
+ handler.on('font', function wphSetupFont(message) {
+ var data = message.data;
var objId = data[0];
var name = data[1];
var file = data[2];
handler.send('font_ready', [objId, obj]);
});
-
- handler.on('jpeg_decoded', function jpegDecoded(data) {
- var objId = data[0];
- var imageData = data[1];
- console.log('worker recieved decoded jpeg');
- debugger;
- }, this);
}
};