mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 01:16:31 +03:00
jsonrpc: make event loop in ts client optional (#4347)
* jsonrpc: make event loop in ts client optional * jsonrpc: ts: fix tests and make specifying `startEventLoop` mandatory * add changelog entry * Update CHANGELOG.md
This commit is contained in:
@@ -7,6 +7,7 @@
|
|||||||
This better corresponds to JSON-RPC 2.0 server-client distinction
|
This better corresponds to JSON-RPC 2.0 server-client distinction
|
||||||
and is expected to simplify writing new bindings
|
and is expected to simplify writing new bindings
|
||||||
because dispatching events can be done on higher level.
|
because dispatching events can be done on higher level.
|
||||||
|
- JSON-RPC: TS: Client now has a mandatory argument whether you want to start listening for events.
|
||||||
|
|
||||||
### Fixes
|
### Fixes
|
||||||
- JSON-RPC: do not print to stdout on failure to find an account.
|
- JSON-RPC: do not print to stdout on failure to find an account.
|
||||||
|
|||||||
@@ -36,12 +36,15 @@ export class BaseDeltaChat<
|
|||||||
account?: T.Account;
|
account?: T.Account;
|
||||||
private contextEmitters: { [key: number]: TinyEmitter<ContextEvents> } = {};
|
private contextEmitters: { [key: number]: TinyEmitter<ContextEvents> } = {};
|
||||||
|
|
||||||
|
//@ts-ignore
|
||||||
private eventTask: Promise<void>;
|
private eventTask: Promise<void>;
|
||||||
|
|
||||||
constructor(public transport: Transport) {
|
constructor(public transport: Transport, startEventLoop: boolean) {
|
||||||
super();
|
super();
|
||||||
this.rpc = new RawClient(this.transport);
|
this.rpc = new RawClient(this.transport);
|
||||||
this.eventTask = this.eventLoop();
|
if (startEventLoop) {
|
||||||
|
this.eventTask = this.eventLoop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async eventLoop(): Promise<void> {
|
async eventLoop(): Promise<void> {
|
||||||
@@ -77,10 +80,12 @@ export class BaseDeltaChat<
|
|||||||
|
|
||||||
export type Opts = {
|
export type Opts = {
|
||||||
url: string;
|
url: string;
|
||||||
|
startEventLoop: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const DEFAULT_OPTS: Opts = {
|
export const DEFAULT_OPTS: Opts = {
|
||||||
url: "ws://localhost:20808/ws",
|
url: "ws://localhost:20808/ws",
|
||||||
|
startEventLoop: true,
|
||||||
};
|
};
|
||||||
export class DeltaChat extends BaseDeltaChat<WebsocketTransport> {
|
export class DeltaChat extends BaseDeltaChat<WebsocketTransport> {
|
||||||
opts: Opts;
|
opts: Opts;
|
||||||
@@ -88,20 +93,24 @@ export class DeltaChat extends BaseDeltaChat<WebsocketTransport> {
|
|||||||
this.transport.close();
|
this.transport.close();
|
||||||
}
|
}
|
||||||
constructor(opts?: Opts | string) {
|
constructor(opts?: Opts | string) {
|
||||||
if (typeof opts === "string") opts = { url: opts };
|
if (typeof opts === "string") {
|
||||||
if (opts) opts = { ...DEFAULT_OPTS, ...opts };
|
opts = { ...DEFAULT_OPTS, url: opts };
|
||||||
else opts = { ...DEFAULT_OPTS };
|
} else if (opts) {
|
||||||
|
opts = { ...DEFAULT_OPTS, ...opts };
|
||||||
|
} else {
|
||||||
|
opts = { ...DEFAULT_OPTS };
|
||||||
|
}
|
||||||
const transport = new WebsocketTransport(opts.url);
|
const transport = new WebsocketTransport(opts.url);
|
||||||
super(transport);
|
super(transport, opts.startEventLoop);
|
||||||
this.opts = opts;
|
this.opts = opts;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class StdioDeltaChat extends BaseDeltaChat<StdioTransport> {
|
export class StdioDeltaChat extends BaseDeltaChat<StdioTransport> {
|
||||||
close() {}
|
close() {}
|
||||||
constructor(input: any, output: any) {
|
constructor(input: any, output: any, startEventLoop: boolean) {
|
||||||
const transport = new StdioTransport(input, output);
|
const transport = new StdioTransport(input, output);
|
||||||
super(transport);
|
super(transport, startEventLoop);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ describe("basic tests", () => {
|
|||||||
|
|
||||||
before(async () => {
|
before(async () => {
|
||||||
serverHandle = await startServer();
|
serverHandle = await startServer();
|
||||||
dc = new DeltaChat(serverHandle.stdin, serverHandle.stdout);
|
dc = new DeltaChat(serverHandle.stdin, serverHandle.stdout, true);
|
||||||
// dc.on("ALL", (event) => {
|
// dc.on("ALL", (event) => {
|
||||||
//console.log("event", event);
|
//console.log("event", event);
|
||||||
// });
|
// });
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ describe("online tests", function () {
|
|||||||
this.skip();
|
this.skip();
|
||||||
}
|
}
|
||||||
serverHandle = await startServer();
|
serverHandle = await startServer();
|
||||||
dc = new DeltaChat(serverHandle.stdin, serverHandle.stdout);
|
dc = new DeltaChat(serverHandle.stdin, serverHandle.stdout, true);
|
||||||
|
|
||||||
dc.on("ALL", (contextId, { type }) => {
|
dc.on("ALL", (contextId, { type }) => {
|
||||||
if (type !== "Info") console.log(contextId, type);
|
if (type !== "Info") console.log(contextId, type);
|
||||||
|
|||||||
Reference in New Issue
Block a user