Cleaned up how messages are passed and replies work.
This commit is contained in:
parent
f7207a51f8
commit
d1c823efce
17
src/core.js
17
src/core.js
@ -509,7 +509,8 @@ var PDFDoc = (function pdfDoc() {
|
|||||||
// Tell the worker the file it was created from.
|
// Tell the worker the file it was created from.
|
||||||
messageHandler.send('workerSrc', workerSrc);
|
messageHandler.send('workerSrc', workerSrc);
|
||||||
|
|
||||||
messageHandler.on('test', function pdfDocTest(supportTypedArray) {
|
messageHandler.on('test', function pdfDocTest(message) {
|
||||||
|
var supportTypedArray = message.data;
|
||||||
if (supportTypedArray) {
|
if (supportTypedArray) {
|
||||||
this.worker = worker;
|
this.worker = worker;
|
||||||
this.setupMessageHandler(messageHandler);
|
this.setupMessageHandler(messageHandler);
|
||||||
@ -547,7 +548,8 @@ var PDFDoc = (function pdfDoc() {
|
|||||||
setupMessageHandler: function(messageHandler) {
|
setupMessageHandler: function(messageHandler) {
|
||||||
this.messageHandler = 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 pageNum = data.pageNum;
|
||||||
var page = this.pageCache[pageNum];
|
var page = this.pageCache[pageNum];
|
||||||
var depFonts = data.depFonts;
|
var depFonts = data.depFonts;
|
||||||
@ -555,7 +557,8 @@ var PDFDoc = (function pdfDoc() {
|
|||||||
page.startRenderingFromIRQueue(data.IRQueue, depFonts);
|
page.startRenderingFromIRQueue(data.IRQueue, depFonts);
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
messageHandler.on('obj', function pdfDocObj(data) {
|
messageHandler.on('obj', function pdfDocObj(message) {
|
||||||
|
var data = message.data;
|
||||||
var id = data[0];
|
var id = data[0];
|
||||||
var type = data[1];
|
var type = data[1];
|
||||||
|
|
||||||
@ -588,7 +591,8 @@ var PDFDoc = (function pdfDoc() {
|
|||||||
}
|
}
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
messageHandler.on('font_ready', function pdfDocFontReady(data) {
|
messageHandler.on('font_ready', function pdfDocFontReady(message) {
|
||||||
|
var data = message.data;
|
||||||
var id = data[0];
|
var id = data[0];
|
||||||
var font = new FontShape(data[1]);
|
var font = new FontShape(data[1]);
|
||||||
|
|
||||||
@ -600,7 +604,8 @@ var PDFDoc = (function pdfDoc() {
|
|||||||
}
|
}
|
||||||
}.bind(this));
|
}.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];
|
var page = this.pageCache[data.pageNum];
|
||||||
if (page.callback)
|
if (page.callback)
|
||||||
page.callback(data.error);
|
page.callback(data.error);
|
||||||
@ -637,7 +642,7 @@ var PDFDoc = (function pdfDoc() {
|
|||||||
buf[j] = data[i];
|
buf[j] = data[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
message.resolve({ data: buf, width: width, height: height});
|
message.reply({ data: buf, width: width, height: height});
|
||||||
}).bind(this);
|
}).bind(this);
|
||||||
var src = 'data:image/jpeg;base64,' + window.btoa(imageData);
|
var src = 'data:image/jpeg;base64,' + window.btoa(imageData);
|
||||||
img.src = src;
|
img.src = src;
|
||||||
|
@ -3,11 +3,35 @@
|
|||||||
|
|
||||||
'use strict';
|
'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) {
|
function MessageHandler(name, comObj) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.comObj = comObj;
|
this.comObj = comObj;
|
||||||
this.callbackIndex = 1;
|
this.callbackIndex = 1;
|
||||||
this.callbacks = {};
|
var callbacks = this.callbacks = {};
|
||||||
var ah = this.actionHandler = {};
|
var ah = this.actionHandler = {};
|
||||||
|
|
||||||
ah['console_log'] = [function ahConsoleLog(data) {
|
ah['console_log'] = [function ahConsoleLog(data) {
|
||||||
@ -16,38 +40,25 @@ function MessageHandler(name, comObj) {
|
|||||||
ah['console_error'] = [function ahConsoleError(data) {
|
ah['console_error'] = [function ahConsoleError(data) {
|
||||||
console.error.apply(console, 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;
|
var callbackId = data.callbackId;
|
||||||
if (data.callbackId in this.callbacks) {
|
if (data.callbackId in callbacks) {
|
||||||
var callback = this.callbacks[callbackId];
|
var callback = callbacks[callbackId];
|
||||||
delete this.callbacks[callbackId];
|
delete callbacks[callbackId];
|
||||||
callback(data.data);
|
callback(data.data);
|
||||||
} else {
|
} else {
|
||||||
throw 'Cannot resolve callback ' + callbackId;
|
throw 'Cannot resolve callback ' + callbackId;
|
||||||
}
|
}
|
||||||
}, this];
|
} else if (data.action in ah) {
|
||||||
|
|
||||||
comObj.onmessage = function messageHandlerComObjOnMessage(event) {
|
|
||||||
var data = event.data;
|
|
||||||
if (data.action in ah) {
|
|
||||||
var action = ah[data.action];
|
var action = ah[data.action];
|
||||||
if (data.callbackId) {
|
var message = new Message(data.data);
|
||||||
action[0].call(action[1], {
|
if (data.callbackId)
|
||||||
data: data.data,
|
message.setupReply(this.postMessage, data.callbackId);
|
||||||
resolve: (function(callbackId) {
|
|
||||||
return function(resolvedData) {
|
action[0].call(action[1], message);
|
||||||
comObj.postMessage({
|
|
||||||
action: '__resolve__',
|
|
||||||
data: {
|
|
||||||
data: resolvedData,
|
|
||||||
callbackId: data.callbackId
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}})(data.callbackId)
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
action[0].call(action[1], data.data);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
throw 'Unkown action from worker: ' + data.action;
|
throw 'Unkown action from worker: ' + data.action;
|
||||||
}
|
}
|
||||||
@ -81,7 +92,8 @@ var WorkerMessageHandler = {
|
|||||||
setup: function wphSetup(handler) {
|
setup: function wphSetup(handler) {
|
||||||
var pdfDoc = null;
|
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);
|
handler.send('test', data instanceof Uint8Array);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -92,13 +104,15 @@ var WorkerMessageHandler = {
|
|||||||
// undefined action `workerSrc`.
|
// 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
|
// Create only the model of the PDFDoc, which is enough for
|
||||||
// processing the content of the pdf.
|
// processing the content of the pdf.
|
||||||
pdfDoc = new PDFDocModel(new Stream(data));
|
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);
|
pageNum = parseInt(pageNum);
|
||||||
|
|
||||||
|
|
||||||
@ -147,7 +161,8 @@ var WorkerMessageHandler = {
|
|||||||
});
|
});
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
handler.on('font', function wphSetupFont(data) {
|
handler.on('font', function wphSetupFont(message) {
|
||||||
|
var data = message.data;
|
||||||
var objId = data[0];
|
var objId = data[0];
|
||||||
var name = data[1];
|
var name = data[1];
|
||||||
var file = data[2];
|
var file = data[2];
|
||||||
@ -195,13 +210,6 @@ var WorkerMessageHandler = {
|
|||||||
|
|
||||||
handler.send('font_ready', [objId, obj]);
|
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);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user