feat(WebWorker) Add channel support to MessageBus
closes #3661 and #3686
This commit is contained in:
@ -1,28 +1,29 @@
|
||||
library angular2.examples.message_broker.background_index;
|
||||
|
||||
import "package:angular2/src/web-workers/worker/application.dart"
|
||||
show WebWorkerMessageBus;
|
||||
import "package:angular2/src/web-workers/worker/broker.dart"
|
||||
show MessageBroker, UiArguments;
|
||||
import "package:angular2/src/web-workers/shared/serializer.dart"
|
||||
show Serializer;
|
||||
|
||||
import "package:angular2/src/web-workers/shared/isolate_message_bus.dart";
|
||||
import "package:angular2/src/web-workers/worker/application.dart"
|
||||
show WebWorkerMessageBusSink;
|
||||
import "package:angular2/src/facade/async.dart";
|
||||
import "dart:isolate";
|
||||
|
||||
main(List<String> args, SendPort replyTo) {
|
||||
ReceivePort rPort = new ReceivePort();
|
||||
WebWorkerMessageBus bus = new WebWorkerMessageBus.fromPorts(replyTo, rPort);
|
||||
bus.source.addListener((message) {
|
||||
if (identical(message['data']['type'], "echo")) {
|
||||
bus.sink
|
||||
.send({"type": "echo_response", "value": message['data']['value']});
|
||||
}
|
||||
var sink = new WebWorkerMessageBusSink(replyTo, rPort);
|
||||
var source = new IsolateMessageBusSource(rPort);
|
||||
IsolateMessageBus bus = new IsolateMessageBus(sink, source);
|
||||
|
||||
ObservableWrapper.subscribe(bus.from("echo"), (value) {
|
||||
ObservableWrapper.callNext(bus.to("echo"), value);
|
||||
});
|
||||
|
||||
MessageBroker broker =
|
||||
new MessageBroker(bus, new Serializer(null, null, null), null);
|
||||
var args = new UiArguments("test", "tester");
|
||||
new MessageBroker(bus, new Serializer(null, null, null), "test");
|
||||
var args = new UiArguments("tester");
|
||||
broker.runOnUiThread(args, String).then((data) {
|
||||
bus.sink.send({"type": "result", "value": data});
|
||||
ObservableWrapper.callNext(bus.to("result"), data);
|
||||
});
|
||||
}
|
||||
|
@ -1,21 +1,30 @@
|
||||
import {
|
||||
WebWorkerMessageBus,
|
||||
WebWorkerMessageBusSource,
|
||||
WebWorkerMessageBusSink
|
||||
} from "angular2/src/web-workers/worker/application";
|
||||
PostMessageBus,
|
||||
PostMessageBusSink,
|
||||
PostMessageBusSource
|
||||
} from 'angular2/src/web-workers/shared/post_message_bus';
|
||||
import {ObservableWrapper} from 'angular2/src/facade/async';
|
||||
import {MessageBroker, UiArguments} from "angular2/src/web-workers/worker/broker";
|
||||
import {Serializer} from "angular2/src/web-workers/shared/serializer";
|
||||
|
||||
export function main() {
|
||||
var bus = new WebWorkerMessageBus(new WebWorkerMessageBusSink(), new WebWorkerMessageBusSource());
|
||||
bus.source.addListener((message) => {
|
||||
if (message.data.type === "echo") {
|
||||
bus.sink.send({type: "echo_response", 'value': message.data.value});
|
||||
}
|
||||
});
|
||||
|
||||
var broker = new MessageBroker(bus, new Serializer(null, null, null), null);
|
||||
var args = new UiArguments("test", "tester");
|
||||
broker.runOnUiThread(args, String)
|
||||
.then((data: string) => { bus.sink.send({type: "result", value: data}); });
|
||||
interface PostMessageInterface {
|
||||
(message: any, transferrables?:[ArrayBuffer]): void;
|
||||
}
|
||||
var _postMessage: PostMessageInterface = <any>postMessage;
|
||||
|
||||
export function main() {
|
||||
var sink = new PostMessageBusSink({
|
||||
postMessage:
|
||||
(message: any, transferrables?:[ArrayBuffer]) => { _postMessage(message, transferrables); }
|
||||
});
|
||||
var source = new PostMessageBusSource();
|
||||
var bus = new PostMessageBus(sink, source);
|
||||
|
||||
ObservableWrapper.subscribe(bus.from("echo"),
|
||||
(value) => { ObservableWrapper.callNext(bus.to("echo"), value); });
|
||||
|
||||
var broker = new MessageBroker(bus, new Serializer(null, null, null), "test");
|
||||
var args = new UiArguments("tester");
|
||||
broker.runOnUiThread(args, String)
|
||||
.then((data: string) => { ObservableWrapper.callNext(bus.to("result"), data); });
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
library angular2.examples.message_broker.index;
|
||||
|
||||
import "package:angular2/src/web-workers/ui/application.dart"
|
||||
show spawnWebWorker, UIMessageBus, UIMessageBusSink, UIMessageBusSource;
|
||||
|
||||
show spawnWebWorker;
|
||||
import "package:angular2/src/facade/async.dart";
|
||||
import "dart:html";
|
||||
|
||||
main() {
|
||||
@ -10,21 +10,21 @@ main() {
|
||||
spawnWebWorker(Uri.parse("background_index.dart")).then((bus) {
|
||||
querySelector("#send_echo").addEventListener("click", (e) {
|
||||
var val = (querySelector("#echo_input") as InputElement).value;
|
||||
bus.sink.send({'type': 'echo', 'value': val});
|
||||
ObservableWrapper.callNext(bus.to("echo"), val);
|
||||
});
|
||||
bus.source.addListener((message) {
|
||||
var data = message['data'];
|
||||
if (identical(data['type'], "echo_response")) {
|
||||
querySelector("#echo_result")
|
||||
.appendHtml("<span class='response'>${data['value']}</span>");
|
||||
} else if (identical(data['type'], "test")) {
|
||||
bus.sink.send({'type': "result", 'id': data['id'], 'value': VALUE});
|
||||
} else if (identical(data['type'], "result")) {
|
||||
querySelector("#ui_result")
|
||||
.appendHtml("<span class='result'>${data['value']}</span>");
|
||||
} else if (identical(data['type'], "ready")) {
|
||||
bus.sink.send({'type': "init"});
|
||||
}
|
||||
|
||||
ObservableWrapper.subscribe(bus.from("echo"), (message) {
|
||||
querySelector("#echo_result")
|
||||
.appendHtml("<span class='response'>${message}</span>");
|
||||
});
|
||||
ObservableWrapper.subscribe(bus.from("result"), (message) {
|
||||
querySelector("#ui_result")
|
||||
.appendHtml("<span class='result'>${message}</span>");
|
||||
});
|
||||
ObservableWrapper.subscribe(bus.from("test"),
|
||||
(Map<String, dynamic> message) {
|
||||
ObservableWrapper.callNext(bus.to("test"),
|
||||
{'id': message['id'], 'type': "result", 'value': VALUE});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -1,29 +1,28 @@
|
||||
import {
|
||||
UIMessageBus,
|
||||
UIMessageBusSink,
|
||||
UIMessageBusSource
|
||||
} from "angular2/src/web-workers/ui/application";
|
||||
PostMessageBus,
|
||||
PostMessageBusSink,
|
||||
PostMessageBusSource
|
||||
} from 'angular2/src/web-workers/shared/post_message_bus';
|
||||
import {ObservableWrapper} from 'angular2/src/facade/async';
|
||||
|
||||
var worker = new Worker("loader.js");
|
||||
var bus = new UIMessageBus(new UIMessageBusSink(worker), new UIMessageBusSource(worker));
|
||||
var VALUE = 5;
|
||||
var webWorker = new Worker("loader.js");
|
||||
var sink = new PostMessageBusSink(webWorker);
|
||||
var source = new PostMessageBusSource(webWorker);
|
||||
var bus = new PostMessageBus(sink, source);
|
||||
const VALUE = 5;
|
||||
|
||||
document.getElementById("send_echo")
|
||||
.addEventListener("click", (e) => {
|
||||
var val = (<HTMLInputElement>document.getElementById("echo_input")).value;
|
||||
bus.sink.send({type: "echo", value: val});
|
||||
ObservableWrapper.callNext(bus.to("echo"), val);
|
||||
});
|
||||
|
||||
bus.source.addListener((message) => {
|
||||
if (message.data.type === "echo_response") {
|
||||
document.getElementById("echo_result").innerHTML =
|
||||
`<span class='response'>${message.data.value}</span>`;
|
||||
} else if (message.data.type === "test") {
|
||||
bus.sink.send({type: "result", id: message.data.id, value: VALUE});
|
||||
} else if (message.data.type == "result") {
|
||||
document.getElementById("ui_result").innerHTML =
|
||||
`<span class='result'>${message.data.value}</span>`;
|
||||
} else if (message.data.type == "ready") {
|
||||
bus.sink.send({type: "init"});
|
||||
}
|
||||
ObservableWrapper.subscribe(bus.from("echo"), (message) => {
|
||||
document.getElementById("echo_result").innerHTML = `<span class='response'>${message}</span>`;
|
||||
});
|
||||
ObservableWrapper.subscribe(bus.from("result"), (message) => {
|
||||
document.getElementById("ui_result").innerHTML = `<span class='result'>${message}</span>`;
|
||||
});
|
||||
ObservableWrapper.subscribe(bus.from("test"), (message: StringMap<string, any>) => {
|
||||
ObservableWrapper.callNext(bus.to("test"), {id: message['id'], type: "result", value: VALUE});
|
||||
});
|
||||
|
@ -5,19 +5,19 @@ import 'dart:typed_data';
|
||||
|
||||
// TODO(jteplitz602) Implement this class #3493
|
||||
class BitmapService {
|
||||
ImageData applySepia (ImageData imageData) {
|
||||
ImageData applySepia(ImageData imageData) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String arrayBufferToDataUri (Uint8ClampedList data) {
|
||||
String arrayBufferToDataUri(Uint8ClampedList data) {
|
||||
return null;
|
||||
}
|
||||
|
||||
ImageData convertToImageData (ByteBuffer buffer) {
|
||||
ImageData convertToImageData(ByteBuffer buffer) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String toDataUri (ImageData imageData) {
|
||||
String toDataUri(ImageData imageData) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user