-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathplain-message-client.android.ts
64 lines (53 loc) · 2.1 KB
/
plain-message-client.android.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import { CommunicationClient } from "../../communication-client.android";
import {
plainMessageProtocol,
PlainMessage,
ReceivedMessage,
PlainMessageListener,
arePlainMessagesEnabled
} from "../index";
import { PlainMessageClient } from "../plain-message-client";
import { Node } from "../../../node";
import { getPlainMessageResultService } from "./plain-message-result-service.android";
import { encodePlainMessage } from "../encoder-decoder";
export class PlainMessageAndroidClient extends CommunicationClient<ReceivedMessage> implements PlainMessageClient {
constructor(
private protocol = plainMessageProtocol,
private plainMessageResultService = getPlainMessageResultService(),
) {
super(plainMessageResultService);
plainMessageResultService.setProtocol(protocol);
}
public enabled(): boolean {
return arePlainMessagesEnabled();
}
public registerListener(listener: PlainMessageListener): void {
this.plainMessageResultService.setDefaultListener(listener);
}
public unregisterListener(): void {
this.plainMessageResultService.clearDefaultListener();
}
public async send(node: Node, plainMessage: PlainMessage): Promise<void> {
if (!this.enabled()) return;
const message = encodePlainMessage(plainMessage);
await this.sendMessage(node, this.protocol.withoutResponse, message);
}
public async sendExpectingResponse(node: Node, plainMessage: PlainMessage, timeout: number = 5000): Promise<ReceivedMessage> {
if (!this.enabled()) return undefined;
const resolutionPromise = this.createResolutionPromise(
this.protocol,
node,
timeout
);
const message = encodePlainMessage(plainMessage);
await this.sendMessage(node, this.protocol.expectingResponse, message);
return await resolutionPromise;
}
}
let _instance: PlainMessageClient;
export function getPlainMessageAndroidClient(): PlainMessageClient {
if (!_instance) {
_instance = new PlainMessageAndroidClient();
}
return _instance;
}