-
Notifications
You must be signed in to change notification settings - Fork 3
/
deviceTree.ts
63 lines (56 loc) · 2.94 KB
/
deviceTree.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
import { ConnectionString } from "azure-iot-device";
import * as path from "path";
import * as vscode from "vscode";
import { AppInsightsClient } from "./appInsightsClient";
import { DeviceItem } from "./Model/DeviceItem";
import { Utility } from "./utility";
import iothub = require("azure-iothub");
export class DeviceTree implements vscode.TreeDataProvider<DeviceItem> {
public _onDidChangeTreeData: vscode.EventEmitter<DeviceItem | undefined> = new vscode.EventEmitter<DeviceItem | undefined>();
public readonly onDidChangeTreeData: vscode.Event<DeviceItem | undefined> = this._onDidChangeTreeData.event;
constructor(private context: vscode.ExtensionContext) {
}
public refresh(): void {
this._onDidChangeTreeData.fire();
AppInsightsClient.sendEvent("RefreshDeviceTree");
}
public getTreeItem(element: DeviceItem): vscode.TreeItem {
return element;
}
public async getChildren(element?: DeviceItem): Promise<DeviceItem[]> {
let iotHubConnectionString = await Utility.getConfig("iotHubConnectionString", "IoT Hub Connection String");
if (!iotHubConnectionString) {
return;
}
let registry = iothub.Registry.fromConnectionString(iotHubConnectionString);
let devices = [];
let hostName = Utility.getHostName(iotHubConnectionString);
return new Promise<DeviceItem[]>((resolve, reject) => {
registry.list((err, deviceList) => {
if (err) {
reject(`[Failed to list IoT Hub devices] ${err.message}`);
} else {
deviceList.forEach((device, index) => {
let image = device.connectionState.toString() === "Connected" ? "device-on.png" : "device-off.png";
let deviceConnectionString = "";
if (device.authentication.SymmetricKey.primaryKey != null) {
deviceConnectionString = ConnectionString.createWithSharedAccessKey(hostName, device.deviceId,
device.authentication.SymmetricKey.primaryKey);
} else if (device.authentication.x509Thumbprint.primaryThumbprint != null) {
deviceConnectionString = ConnectionString.createWithX509Certificate(hostName, device.deviceId);
}
devices.push(new DeviceItem(device.deviceId,
deviceConnectionString,
this.context.asAbsolutePath(path.join("resources", image)),
{
command: "azure-iot-toolkit.getDevice",
title: "",
arguments: [device.deviceId],
}));
});
resolve(devices);
}
});
});
}
}