-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcollector-manager-impl.android.ts
108 lines (89 loc) · 3.48 KB
/
collector-manager-impl.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import { CollectorManager, PrepareError } from "../collector-manager";
import {
getSensorListenerManager,
ListenerFilter,
SensorListener,
SensorListenerManager
} from "../../sensor-listener-manager";
import { Node } from "../../node";
import { SensorType } from "../../sensors/sensor-type";
import { CollectionConfiguration, configAsString, defaultCollectionConfiguration } from "../collection-configuration";
import { getMessagingClient } from "../../communication/messaging/android/messaging-client.android";
import { getEnabledSensors } from "../enabled-sensors";
export class CollectorManagerImpl implements CollectorManager {
private _enabledSensors: SensorType[];
get enabledSensors() {
if (!this._enabledSensors) {
this._enabledSensors = getEnabledSensors();
}
return this._enabledSensors;
}
constructor(
private messagingClient = (sensor) => getMessagingClient(sensor),
private listenerManager: SensorListenerManager = getSensorListenerManager(),
) {
}
isEnabled(sensor: SensorType): boolean {
return this.enabledSensors.indexOf(sensor) !== -1;
}
async isReady(node: Node, sensor: SensorType): Promise<boolean> {
if (!hasCapability(node, sensor) || !this.isEnabled(sensor)) {
return false;
}
const result = await this.messagingClient(sensor).sendIsReadyMessage(node);
return result.success;
}
async prepare(node: Node, sensor: SensorType): Promise<PrepareError> {
if (!hasCapability(node, sensor))
return {
node: node,
message: `Node ${node.name} (${node.id}) has not ${sensor} available`
};
if (!this.isEnabled(sensor)) {
return {
node: node,
message: `${sensor} is not enabled at plugin initialization`
};
}
const result = await this.messagingClient(sensor).sendPrepareMessage(node);
if (result.success)
return undefined;
else {
return {
node: node,
message: result.message
};
}
}
async startCollecting(node: Node, sensor: SensorType, config?: CollectionConfiguration): Promise<void> {
if (!hasCapability(node, sensor) || !this.isEnabled(sensor))
return;
const message = config ? configAsString(sensor, config) : configAsString(sensor, defaultCollectionConfiguration(sensor));
await this.messagingClient(sensor).sendStartMessage(node, message);
}
async stopCollecting(node: Node, sensor: SensorType): Promise<void> {
if (!hasCapability(node, sensor) || !this.isEnabled(sensor))
return;
await this.messagingClient(sensor).sendStopMessage(node, sensor);
}
addSensorListener(listener: SensorListener, filters?: ListenerFilter): number {
return this.listenerManager.add(listener, filters);
}
removeSensorListener(listenerId?: number) {
if (typeof listenerId === "number") {
this.listenerManager.remove(listenerId);
} else {
this.listenerManager.removeAll();
}
}
}
function hasCapability(node: Node, sensor: SensorType): boolean {
return node.capabilities.indexOf(sensor) !== -1;
}
let _instance: CollectorManager;
export function getAndroidCollectorManager(): CollectorManager {
if (!_instance) {
_instance = new CollectorManagerImpl();
}
return _instance;
}