import 'dart:html';
import 'package:crypto/crypto.dart';
import 'dart:typed_data';
import 'dart:js';
import 'dart:convert';
class OdfWorker{
Worker inner;
void postMessage(message){
this.inner.postMessage(message);
}
void listen(handler){
this.inner.onMessage.listen(handler);
}
OdfWorker(){
this.inner = new Worker("demo3.js");
}
}
void main() {
var w = new OdfWorker();
w.listen((_m){
print(_m.data);
var msg = JSON.decode(_m.data);
switch(msg["Type"]){
case "init":
print("worker initialized, sending responce...");
w.postMessage(JSON.encode({"Type": "init"}));
break;
case "data":
print("data received");
Uint8List data = new Uint8List.fromList(CryptoUtils.base64StringToBytes(msg["Data"]));
context.callMethod("saveAs", [new Blob([data], "application/octet-stream"), "report.odf"]);
break;
default: throw new ArgumentError(msg["Type"]);
}
});
querySelector("#do-demo").onClick.listen((m){
w.postMessage(JSON.encode({"Type": "get", "Param": "demo"}));
});
querySelector("#do-report").onClick.listen((m){
w.postMessage(JSON.encode({"Type": "get", "Param": "report"}));
});
}