Hello,
I am trying to run a worker with the latest api.
Now many examples are now old and I am having problems with my test.
package gears.worker.jsni.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.gears.client.Factory;
import com.google.gwt.gears.client.workerpool.WorkerPool;
import
com.google.gwt.gears.client.workerpool.WorkerPoolMessageHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
public class Jsni implements EntryPoint {
private final VerticalPanel panel = new VerticalPanel();
private WorkerPool workerPool;
public void start() {
// create a new worker thread to start generating primes
final int workerId = workerPool.createWorker(worker());
panel.add(new Label(String.valueOf(workerId)));
workerPool.sendMessage("Test", workerId);
}
private native String worker() /*-{
function workerMessageHandler(a, b, msg) {
$wnd.alert(msg.body);
google.gears.workerPool.sendMessage('Echo ' + msg.body,
msg.sender);
}
var workerCode = String(workerMessageHandler) +
'google.gears.workerPool.onmessage = workerMessageHandler';
return workerCode;
}-*/;
public void onModuleLoad() {
// create a new worker pool instance
workerPool = Factory.getInstance().createWorkerPool();
workerPool.setMessageHandler(new WorkerPoolMessageHandler() {
public void onMessageReceived(final MessageEvent
message) {
panel.add(new Label("[" + message.getSender() +
"] "
+ message.getBody()));
}
});
// workerPool.setErrorHandler(new
WorkerPoolErrorHandler() {
//
// public boolean onError(final ErrorEvent errorEvent) {
// panel.add(new Label(errorEvent.getLineNumber() + " : "
// + errorEvent.getMessage()));
// return false;
// }
// });
RootPanel.get().add(panel);
panel.add(new Button("Invoke", new ClickListener() {
public void onClick(final Widget arg0) {
panel.add(new Label("started"));
start();
}
}));
}
}
I got the invokation of start() but the worker does not respond.
I want to find a worker that works with the latest API.
// my code, based on Gears API (non GWT) Worker example
private native String worker() /*-{
function workerMessageHandler(a, b, msg) {
$wnd.alert(msg.body);
google.gears.workerPool.sendMessage('Echo ' + msg.body,
msg.sender);
}
var workerCode = String(workerMessageHandler) +
'google.gears.workerPool.onmessage = workerMessageHandler';
return workerCode;
}-*/;
// some code a year ago
private native String getSudokuGenerationFunction() /*-{
function workerMessageHandler(msg, sender) {
try {
//computePrimes computes all primes for the number in
msg
var primes = computePrimes(msg);
gearsWorkerPool.sendMessage(primes, sender);
} catch(e) {
//take corrective action
}
}
var workerCode = String(workerMessageHandler) + '
gearsWorkerPool.onmessage = workerMessageHandler';
return workerCode;
}-*/;
Is "gearsWorkerPool" correct?
Is "workerMessageHandler(msg, sender)" correct?
I also have a problem with setErrorHandler
Uncaught Error: The onerror property cannot be set on a parent worker
(from Google Chrome Javascript console)
The page stops completely.
References
http://groups.google.com/group/Google-Web-Toolkit/msg/4aec89cb494e56ce
Thank you.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Google Web Toolkit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/Google-Web-Toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---