Skip to content

Instantly share code, notes, and snippets.

View eleinadani's full-sized avatar

Daniele Bonetta eleinadani

  • VU Amsterdam
View GitHub Profile
// HTTP request handler
WebServer.create(configuration, route.get("/request", (req, res) -> {
// ( #1 ) An HTTP GET request is received. Get some request data
int requestId = getRequestId(req);
// Send the data to JavaScript. Perform computation in JS and
// send back to the HTTP client a response message when done.
executeJs(requestId).whenComplete((r, ex) -> {
if (ex != null) {
res.status(404)
.send("404 error");
// Expose a JS asynchronous function to Java
Value asyncFunction = context.eval("js", "(async function(x) { return x; })");
// Invoke the function. The result is a JavaScript Promise object
Value jsPromise = asyncFunction.execute(42);
// Register promise reactions
jsPromise.invokeMember("then", (Consumer<Object>) (result) -> {
System.out.println("JavaScript resolves: " + result);
})
.invokeMember("catch", (Consumer<Throwable>) (error) -> {
System.out.println("JavaScript rejects: " + error);
async function() {
// a Java object implementing the `then` method
let javaTrampoline = ... // created from Java
// create a JavaScript promise
let interopPromise = new Promise(javaTrampoline);
// register some promise reactions
try {
// await for the “interop” promise to resolve
let result = await interopPromise;
console.log('Java resolves: ' + result);
public class ThenableObject {
void then(Value resolve, Value reject) {
try {
Object someResult = computeSomething();
resolve.executeVoid(someResult);
} catch (Throwable t) {
reject.executeVoid(t);
}
}
}
// a Java object implementing the `then` method (created from Java)
let javaExecutor = Java.type('some.awesome.Klass').createNew();
// create a JavaScript promise
let interopPromise = new Promise(javaExecutor);
// register some promise reactions
interopPromise.then(result => { console.log('Java resolves: ' + result); },
error => { console.log('Java rejects: ' + error); });
void then(Value resolve, Value reject);
$ SKIP_JACOCO=true mvn test -Dtest=io.reactiverse.es4x.test.StackTraceTest
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building es4x 0.11.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-enforcer-plugin:1.4.1:enforce (enforce-maven) @ es4x ---
[INFO]
[INFO] --- jacoco-maven-plugin:0.8.5:prepare-agent (default) @ es4x ---
public class AwesomeClass {
// a concurrent queue shared with Node
private final Queue<Object> queue;
public AwesomeClass(Queue<Object> queue) {
this.queue = queue;
}
public void start() {
Thread thread = new Thread(new Runnable() {
function JavaToJSNotifier {
this.queue = new java.util.concurrent.LinkedBlockingDeque();
this.worker = new Worker(`
const { workerData, parentPort } = require('worker_threads');
while (true) {
// block the worker waiting for the next notification from Java
var data = workerData.queue.take();
// notify the main event loop that we got new data
parentPort.postMessage(data);
}`,
let w = new Worker(`
const { parentPort } = require('worker_threads');
parentPort.on('message', (m) => {
const x = m.random.nextInt(100);
const y = m.random.nextInt(100);
var Point = Java.type('java.awt.Point');
parentPort.postMessage(new Point(x,y));
});
`, {eval:true});