"use strict";
import * as msgpack from "msgpackr";
import sleep from "sleep-promise";
import {
Bus,
Rpc,
Frame,
QoS,
BusError,
BusErrorCode
} from "busrt";
const onNotification = async (ev) => {
console.log(ev.getPayload());
};
const onCall = async (ev) => {
const payload = ev.getPayload();
if (payload.length > 0) {
console.log(msgpack.unpack(payload));
}
const method = ev.method.toString();
if (method == "test") {
return msgpack.pack({ ok: true });
} else if (method == "err") {
throw new BusError(-777, "test error");
} else {
throw new BusError(
BusErrorCode.RpcMethodNotFound,
Buffer.from(`no such method: ${method}`)
);
}
};
const onFrame = async (ev) => {
const payload = ev.frame.getPayload();
console.log(
ev.frame.primary_sender,
ev.frame.topic,
payload.length > 0 ? msgpack.unpack(payload) : null
);
};
const main = async () => {
const bus = new Bus("js");
await bus.connect("/opt/eva4/var/bus.ipc");
const op = await bus.send("test", msgpack.pack("123"));
try {
await op.waitCompleted();
} catch (err) {
console.log(err.code, err.message?.toString());
}
const rpc = new Rpc(bus);
rpc.onNotification = onNotification;
rpc.onCall = onCall;
rpc.onFrame = onFrame;
await bus.subscribe("#");
await bus.publish("test", msgpack.pack("hello"));
let payload = { i: "#" };
await rpc.call0("target", "test");
try {
const request = await rpc.call("eva.core", "test");
const result = await request.waitCompleted();
console.log(msgpack.unpack(result.getPayload()));
} catch (err) {
console.log(err.code, err.message.toString());
}
while (rpc.isConnected()) {
await sleep(1000);
}
await bus.disconnect();
};
main();