roku-debug 0.19.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
 
8
8
 
9
+ ## [0.20.0](https://github.com/rokucommunity/roku-debug/compare/v0.19.1...v0.20.0) - 2023-07-05
10
+ ### Added
11
+ - Support sgrendezvous through ECP ([#150](https://github.com/rokucommunity/roku-debug/pull/150))
12
+ ### Changed
13
+ - upgrade to [brighterscript@0.65.1](https://github.com/rokucommunity/brighterscript/blob/master/CHANGELOG.md#0651---2023-06-09)
14
+
15
+
16
+
17
+ ## [0.19.1](https://github.com/rokucommunity/roku-debug/compare/v0.19.0...v0.19.1) - 2023-06-08
18
+ ### Changed
19
+ - Move @types/request to deps to fix d.bs files ([691a7be](https://github.com/rokucommunity/roku-debug/commit/691a7be))
20
+
21
+
22
+
9
23
  ## [0.19.0](https://github.com/rokucommunity/roku-debug/compare/v0.18.12...v0.19.0) - 2023-06-01
10
24
  ### Added
11
25
  - File logging ([#155](https://github.com/rokucommunity/roku-debug/pull/155))
@@ -217,6 +217,12 @@ export interface LaunchConfiguration extends DebugProtocol.LaunchRequestArgument
217
217
  * Show variables that are prefixed with a special prefix designated to be hidden
218
218
  */
219
219
  showHiddenVariables: boolean;
220
+ /**
221
+ * If true: turn on ECP rendezvous tracking, or turn on 8080 rendezvous tracking if ECP unsupported
222
+ * If false, turn off both.
223
+ * @default true
224
+ */
225
+ rendezvousTracking: boolean;
220
226
  }
221
227
  export interface ComponentLibraryConfiguration {
222
228
  /**
@@ -1,11 +1,22 @@
1
1
  import type { SourceLocation } from './managers/LocationManager';
2
2
  export declare class RendezvousTracker {
3
- constructor();
3
+ private deviceInfo;
4
+ constructor(deviceInfo: any);
4
5
  private clientPathsMap;
5
6
  private emitter;
6
7
  private filterOutLogs;
7
8
  private rendezvousBlocks;
8
9
  private rendezvousHistory;
10
+ /**
11
+ * Where should the rendezvous data be tracked from? If ecp, then the ecp ping data will be reported. If telnet, then any
12
+ * rendezvous data from telnet will reported. If 'off', then no data will be reported
13
+ */
14
+ private trackingSource;
15
+ /**
16
+ * Determine if the current Roku device supports the ECP rendezvous tracking feature
17
+ */
18
+ get doesHostSupportEcpRendezvousTracking(): boolean;
19
+ logger: import("@rokucommunity/logger/dist/Logger").Logger;
9
20
  on(eventname: 'rendezvous', handler: (output: RendezvousHistory) => void): any;
10
21
  private emit;
11
22
  get getRendezvousHistory(): RendezvousHistory;
@@ -26,6 +37,32 @@ export declare class RendezvousTracker {
26
37
  * Clears the current rendezvous history
27
38
  */
28
39
  clearHistory(): void;
40
+ private ecpPingTimer;
41
+ startEcpPingTimer(): void;
42
+ stopEcpPingTimer(): void;
43
+ pingEcpRendezvous(): Promise<void>;
44
+ /**
45
+ * Determine if rendezvous tracking is enabled via the 8080 telnet command
46
+ */
47
+ getIsTelnetRendezvousTrackingEnabled(): Promise<boolean>;
48
+ /**
49
+ * Run a SceneGraph logendezvous 8080 command and get the text output
50
+ */
51
+ private runSGLogrendezvousCommand;
52
+ /**
53
+ * Determine if rendezvous tracking is enabled via the ECP command
54
+ */
55
+ getIsEcpRendezvousTrackingEnabled(): Promise<boolean>;
56
+ activate(): Promise<boolean>;
57
+ /**
58
+ * Get the response from an ECP sgrendezvous request from the Roku
59
+ */
60
+ getEcpRendezvous(): Promise<EcpRendezvousData>;
61
+ /**
62
+ * Enable/Disable ECP Rendezvous tracking on the Roku device
63
+ * @returns true if successful, false if there was an issue setting the value
64
+ */
65
+ toggleEcpRendezvousTracking(toggle: 'track' | 'untrack'): Promise<boolean>;
29
66
  /**
30
67
  * Takes the debug output from the device and parses it for any rendezvous information.
31
68
  * Also if consoleOutput was not set to 'full' then any rendezvous output will be filtered from the output.
@@ -33,6 +70,7 @@ export declare class RendezvousTracker {
33
70
  * @returns The debug output after parsing
34
71
  */
35
72
  processLog(log: string): Promise<string>;
73
+ private parseRendezvousLog;
36
74
  /**
37
75
  * Checks the client path map for existing path data and adds new data to the map if not found
38
76
  * @param fileName The filename or path parsed from the rendezvous output
@@ -56,6 +94,10 @@ export declare class RendezvousTracker {
56
94
  * @param duration how long the rendezvous took to complete, if not supplied it is assumed to be zero
57
95
  */
58
96
  private getTime;
97
+ /**
98
+ * Destroy/tear down this class
99
+ */
100
+ destroy(): Promise<void>;
59
101
  }
60
102
  export interface RendezvousHistory {
61
103
  hitCount: number;
@@ -78,5 +120,16 @@ interface RendezvousLineInfo {
78
120
  totalTime: number;
79
121
  type: ElementType;
80
122
  }
123
+ interface EcpRendezvousData {
124
+ trackingEnabled: boolean;
125
+ items: EcpRendezvousItem[];
126
+ }
127
+ interface EcpRendezvousItem {
128
+ id: string;
129
+ startTime: string;
130
+ endTime: string;
131
+ lineNumber: string;
132
+ file: string;
133
+ }
81
134
  declare type ElementType = 'fileInfo' | 'historyInfo' | 'lineInfo';
82
135
  export {};
@@ -4,14 +4,33 @@ exports.RendezvousTracker = void 0;
4
4
  const events_1 = require("events");
5
5
  const path = require("path");
6
6
  const replaceLast = require("replace-last");
7
+ const logging_1 = require("./logging");
8
+ const SceneGraphDebugCommandController_1 = require("./SceneGraphDebugCommandController");
9
+ const xml2js = require("xml2js");
10
+ const util_1 = require("./util");
11
+ const semver = require("semver");
12
+ const telnetRendezvousString = 'on\n';
7
13
  class RendezvousTracker {
8
- constructor() {
14
+ constructor(deviceInfo) {
15
+ this.deviceInfo = deviceInfo;
16
+ /**
17
+ * Where should the rendezvous data be tracked from? If ecp, then the ecp ping data will be reported. If telnet, then any
18
+ * rendezvous data from telnet will reported. If 'off', then no data will be reported
19
+ */
20
+ this.trackingSource = 'off';
21
+ this.logger = logging_1.logger.createLogger(`[${RendezvousTracker.name}]`);
9
22
  this.clientPathsMap = {};
10
23
  this.emitter = new events_1.EventEmitter();
11
24
  this.filterOutLogs = true;
12
25
  this.rendezvousBlocks = {};
13
26
  this.rendezvousHistory = this.createNewRendezvousHistory();
14
27
  }
28
+ /**
29
+ * Determine if the current Roku device supports the ECP rendezvous tracking feature
30
+ */
31
+ get doesHostSupportEcpRendezvousTracking() {
32
+ return semver.gte(this.deviceInfo['software-version'], '11.5.0');
33
+ }
15
34
  on(eventName, handler) {
16
35
  this.emitter.on(eventName, handler);
17
36
  return () => {
@@ -46,6 +65,137 @@ class RendezvousTracker {
46
65
  this.rendezvousHistory = this.createNewRendezvousHistory();
47
66
  this.emit('rendezvous', this.rendezvousHistory);
48
67
  }
68
+ startEcpPingTimer() {
69
+ if (!this.ecpPingTimer) {
70
+ this.ecpPingTimer = setInterval(() => {
71
+ void this.pingEcpRendezvous();
72
+ }, 1000);
73
+ }
74
+ }
75
+ stopEcpPingTimer() {
76
+ if (this.ecpPingTimer) {
77
+ clearInterval(this.ecpPingTimer);
78
+ this.ecpPingTimer = undefined;
79
+ }
80
+ }
81
+ async pingEcpRendezvous() {
82
+ // Get ECP rendezvous data, parse it, and send it to event emitter
83
+ let ecpData = await this.getEcpRendezvous();
84
+ for (let blockInfo of ecpData.items) {
85
+ let duration = ((parseInt(blockInfo.endTime) - parseInt(blockInfo.startTime)) / 1000).toString();
86
+ this.rendezvousBlocks[blockInfo.id] = {
87
+ fileName: await this.updateClientPathMap(blockInfo.file, parseInt(blockInfo.lineNumber)),
88
+ lineNumber: blockInfo.lineNumber
89
+ };
90
+ this.parseRendezvousLog(this.rendezvousBlocks[blockInfo.id], duration);
91
+ }
92
+ this.emit('rendezvous', this.rendezvousHistory);
93
+ }
94
+ /**
95
+ * Determine if rendezvous tracking is enabled via the 8080 telnet command
96
+ */
97
+ async getIsTelnetRendezvousTrackingEnabled() {
98
+ var _a, _b;
99
+ return ((_b = (_a = (await this.runSGLogrendezvousCommand('status'))) === null || _a === void 0 ? void 0 : _a.trim()) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === 'on';
100
+ }
101
+ /**
102
+ * Run a SceneGraph logendezvous 8080 command and get the text output
103
+ */
104
+ async runSGLogrendezvousCommand(command) {
105
+ let sgDebugCommandController = new SceneGraphDebugCommandController_1.SceneGraphDebugCommandController(this.deviceInfo.host);
106
+ try {
107
+ return (await sgDebugCommandController.logrendezvous(command)).result.rawResponse;
108
+ }
109
+ catch (error) {
110
+ this.logger.warn(`An error occurred running SG command "${command}"`, error);
111
+ }
112
+ finally {
113
+ await sgDebugCommandController.end();
114
+ }
115
+ }
116
+ /**
117
+ * Determine if rendezvous tracking is enabled via the ECP command
118
+ */
119
+ async getIsEcpRendezvousTrackingEnabled() {
120
+ let ecpData = await this.getEcpRendezvous();
121
+ return ecpData.trackingEnabled;
122
+ }
123
+ async activate() {
124
+ //if ECP tracking is supported, turn that on
125
+ if (this.doesHostSupportEcpRendezvousTracking) {
126
+ // Toggle ECP tracking off and on to clear the log and then continue tracking
127
+ let untrack = await this.toggleEcpRendezvousTracking('untrack');
128
+ let track = await this.toggleEcpRendezvousTracking('track');
129
+ const isEcpTrackingEnabled = untrack && track && await this.getIsEcpRendezvousTrackingEnabled();
130
+ if (isEcpTrackingEnabled) {
131
+ this.trackingSource = 'ecp';
132
+ this.startEcpPingTimer();
133
+ //disable telnet rendezvous tracking since ECP is working
134
+ try {
135
+ await this.runSGLogrendezvousCommand('off');
136
+ }
137
+ catch (_a) { }
138
+ return true;
139
+ }
140
+ }
141
+ //ECP tracking is not supported (or had an issue). Try enabling telnet rendezvous tracking (that only works with run_as_process=0, but worth a try...)
142
+ await this.runSGLogrendezvousCommand('on');
143
+ if (await this.getIsTelnetRendezvousTrackingEnabled()) {
144
+ this.trackingSource = 'telnet';
145
+ return true;
146
+ }
147
+ return false;
148
+ }
149
+ /**
150
+ * Get the response from an ECP sgrendezvous request from the Roku
151
+ */
152
+ async getEcpRendezvous() {
153
+ // Send rendezvous query to ECP
154
+ const rendezvousQuery = await util_1.util.httpGet(`http://${this.deviceInfo.host}:${this.deviceInfo.remotePort}/query/sgrendezvous`);
155
+ let rendezvousQueryData = rendezvousQuery.body;
156
+ let ecpData = {
157
+ trackingEnabled: false,
158
+ items: []
159
+ };
160
+ // Parse rendezvous query data
161
+ await new Promise((resolve, reject) => {
162
+ xml2js.parseString(rendezvousQueryData, (err, result) => {
163
+ if (err) {
164
+ reject(err);
165
+ }
166
+ else {
167
+ const itemArray = result.sgrendezvous.data[0].item;
168
+ ecpData.trackingEnabled = result.sgrendezvous.data[0]['tracking-enabled'][0];
169
+ if (Array.isArray(itemArray)) {
170
+ ecpData.items = itemArray.map((obj) => ({
171
+ id: obj.id[0],
172
+ startTime: obj['start-tm'][0],
173
+ endTime: obj['end-tm'][0],
174
+ lineNumber: obj['line-number'][0],
175
+ file: obj.file[0]
176
+ }));
177
+ }
178
+ resolve(ecpData);
179
+ }
180
+ });
181
+ });
182
+ return ecpData;
183
+ }
184
+ /**
185
+ * Enable/Disable ECP Rendezvous tracking on the Roku device
186
+ * @returns true if successful, false if there was an issue setting the value
187
+ */
188
+ async toggleEcpRendezvousTracking(toggle) {
189
+ try {
190
+ const response = await util_1.util.httpPost(`http://${this.deviceInfo.host}:${this.deviceInfo.remotePort}/sgrendezvous/${toggle}`,
191
+ //not sure if we need this, but it works...so probably better to just leave it here
192
+ { body: '' });
193
+ return true;
194
+ }
195
+ catch (e) {
196
+ return false;
197
+ }
198
+ }
49
199
  /**
50
200
  * Takes the debug output from the device and parses it for any rendezvous information.
51
201
  * Also if consoleOutput was not set to 'full' then any rendezvous output will be filtered from the output.
@@ -53,7 +203,6 @@ class RendezvousTracker {
53
203
  * @returns The debug output after parsing
54
204
  */
55
205
  async processLog(log) {
56
- var _a, _b;
57
206
  let dataChanged = false;
58
207
  let lines = log.split('\n');
59
208
  for (let i = 0; i < lines.length; i++) {
@@ -61,58 +210,25 @@ class RendezvousTracker {
61
210
  let match = /\[sg\.node\.(BLOCK|UNBLOCK)\s{0,}\] Rendezvous\[(\d+)\](?:\s\w+\n|\s\w{2}\s(.*)\((\d+)\)|[\s\w]+(\d+\.\d+)+|\s\w+)/g.exec(line);
62
211
  // see the following for an explanation for this regex: https://regex101.com/r/In0t7d/6
63
212
  if (match) {
64
- let [, type, id, fileName, lineNumber, duration] = match;
65
- if (type === 'BLOCK') {
66
- // detected the start of a rendezvous event
67
- this.rendezvousBlocks[id] = {
68
- fileName: await this.updateClientPathMap(fileName, parseInt(lineNumber)),
69
- lineNumber: lineNumber
70
- };
71
- }
72
- else if (type === 'UNBLOCK' && this.rendezvousBlocks[id]) {
73
- // detected the completion of a rendezvous event
74
- dataChanged = true;
75
- let blockInfo = this.rendezvousBlocks[id];
76
- let clientLineNumber = (_b = (_a = this.clientPathsMap[blockInfo.fileName]) === null || _a === void 0 ? void 0 : _a.clientLines[blockInfo.lineNumber].toString()) !== null && _b !== void 0 ? _b : blockInfo.lineNumber;
77
- if (this.rendezvousHistory.occurrences[blockInfo.fileName]) {
78
- // file is in history
79
- if (this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber]) {
80
- // line is in history, just update it
81
- this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber].totalTime += this.getTime(duration);
82
- this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber].hitCount++;
83
- }
84
- else {
85
- // new line to be added to a file in history
86
- this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber] = this.createLineObject(blockInfo.fileName, parseInt(clientLineNumber), duration);
87
- }
88
- }
89
- else {
90
- // new file to be added to the history
91
- this.rendezvousHistory.occurrences[blockInfo.fileName] = {
92
- occurrences: {
93
- [clientLineNumber]: this.createLineObject(blockInfo.fileName, parseInt(clientLineNumber), duration)
94
- },
95
- hitCount: 0,
96
- totalTime: 0,
97
- type: 'fileInfo',
98
- zeroCostHitCount: 0
213
+ if (this.trackingSource === 'telnet') {
214
+ let [, type, id, fileName, lineNumber, duration] = match;
215
+ if (type === 'BLOCK') {
216
+ // detected the start of a rendezvous event
217
+ this.rendezvousBlocks[id] = {
218
+ fileName: await this.updateClientPathMap(fileName, parseInt(lineNumber)),
219
+ lineNumber: lineNumber
99
220
  };
100
221
  }
101
- // how much time to add to the files total time
102
- let timeToAdd = this.getTime(duration);
103
- // increment hit count and add to the total time for this file
104
- this.rendezvousHistory.occurrences[blockInfo.fileName].hitCount++;
105
- this.rendezvousHistory.hitCount++;
106
- // increment hit count and add to the total time for the history as a whole
107
- this.rendezvousHistory.occurrences[blockInfo.fileName].totalTime += timeToAdd;
108
- this.rendezvousHistory.totalTime += timeToAdd;
109
- if (timeToAdd === 0) {
110
- this.rendezvousHistory.occurrences[blockInfo.fileName].zeroCostHitCount++;
111
- this.rendezvousHistory.zeroCostHitCount++;
222
+ else if (type === 'UNBLOCK' && this.rendezvousBlocks[id]) {
223
+ // detected the completion of a rendezvous event
224
+ dataChanged = true;
225
+ let blockInfo = this.rendezvousBlocks[id];
226
+ this.parseRendezvousLog(blockInfo, duration);
227
+ // remove this event from pre history tracking
228
+ delete this.rendezvousBlocks[id];
112
229
  }
113
- // remove this event from pre history tracking
114
- delete this.rendezvousBlocks[id];
115
230
  }
231
+ // still need to empty logs even if rendezvous tracking through ECP is enabled
116
232
  if (this.filterOutLogs) {
117
233
  lines.splice(i--, 1);
118
234
  }
@@ -123,6 +239,46 @@ class RendezvousTracker {
123
239
  }
124
240
  return lines.join('\n');
125
241
  }
242
+ parseRendezvousLog(blockInfo, duration) {
243
+ var _a, _b;
244
+ let clientLineNumber = (_b = (_a = this.clientPathsMap[blockInfo.fileName]) === null || _a === void 0 ? void 0 : _a.clientLines[blockInfo.lineNumber].toString()) !== null && _b !== void 0 ? _b : blockInfo.lineNumber;
245
+ if (this.rendezvousHistory.occurrences[blockInfo.fileName]) {
246
+ // file is in history
247
+ if (this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber]) {
248
+ // line is in history, just update it
249
+ this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber].totalTime += this.getTime(duration);
250
+ this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber].hitCount++;
251
+ }
252
+ else {
253
+ // new line to be added to a file in history
254
+ this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber] = this.createLineObject(blockInfo.fileName, parseInt(clientLineNumber), duration);
255
+ }
256
+ }
257
+ else {
258
+ // new file to be added to the history
259
+ this.rendezvousHistory.occurrences[blockInfo.fileName] = {
260
+ occurrences: {
261
+ [clientLineNumber]: this.createLineObject(blockInfo.fileName, parseInt(clientLineNumber), duration)
262
+ },
263
+ hitCount: 0,
264
+ totalTime: 0,
265
+ type: 'fileInfo',
266
+ zeroCostHitCount: 0
267
+ };
268
+ }
269
+ // how much time to add to the files total time
270
+ let timeToAdd = this.getTime(duration);
271
+ // increment hit count and add to the total time for this file
272
+ this.rendezvousHistory.occurrences[blockInfo.fileName].hitCount++;
273
+ this.rendezvousHistory.hitCount++;
274
+ // increment hit count and add to the total time for the history as a whole
275
+ this.rendezvousHistory.occurrences[blockInfo.fileName].totalTime += timeToAdd;
276
+ this.rendezvousHistory.totalTime += timeToAdd;
277
+ if (timeToAdd === 0) {
278
+ this.rendezvousHistory.occurrences[blockInfo.fileName].zeroCostHitCount++;
279
+ this.rendezvousHistory.zeroCostHitCount++;
280
+ }
281
+ }
126
282
  /**
127
283
  * Checks the client path map for existing path data and adds new data to the map if not found
128
284
  * @param fileName The filename or path parsed from the rendezvous output
@@ -214,6 +370,25 @@ class RendezvousTracker {
214
370
  getTime(duration) {
215
371
  return duration ? parseFloat(duration) : 0.000;
216
372
  }
373
+ /**
374
+ * Destroy/tear down this class
375
+ */
376
+ async destroy() {
377
+ var _a;
378
+ (_a = this.emitter) === null || _a === void 0 ? void 0 : _a.removeAllListeners();
379
+ this.stopEcpPingTimer();
380
+ //turn off ECP rendezvous tracking
381
+ if (this.doesHostSupportEcpRendezvousTracking) {
382
+ await this.toggleEcpRendezvousTracking('untrack');
383
+ }
384
+ //turn off telnet rendezvous tracking
385
+ try {
386
+ await this.runSGLogrendezvousCommand('off');
387
+ }
388
+ catch (e) {
389
+ this.logger.error('Failed to disable logrendezvous over 8080', e);
390
+ }
391
+ }
217
392
  }
218
393
  exports.RendezvousTracker = RendezvousTracker;
219
394
  //# sourceMappingURL=RendezvousTracker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RendezvousTracker.js","sourceRoot":"","sources":["../src/RendezvousTracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RendezvousTracker.js","sourceRoot":"","sources":["../src/RendezvousTracker.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { ConstructorOptions, ProtocolVersionDetails } from '../debugProtocol/Debugger';
2
2
  import type { BSDebugDiagnostic } from '../CompileErrorProcessor';
3
- import type { RendezvousHistory } from '../RendezvousTracker';
3
+ import type { RendezvousTracker } from '../RendezvousTracker';
4
4
  import type { ChanperfData } from '../ChanperfTracker';
5
5
  import type { SourceLocation } from '../managers/LocationManager';
6
6
  import type { AdapterOptions, HighLevelType, RokuAdapterEvaluateResponse } from '../interfaces';
@@ -14,7 +14,8 @@ export declare class DebugProtocolAdapter {
14
14
  private options;
15
15
  private projectManager;
16
16
  private breakpointManager;
17
- constructor(options: AdapterOptions & ConstructorOptions, projectManager: ProjectManager, breakpointManager: BreakpointManager);
17
+ private rendezvousTracker;
18
+ constructor(options: AdapterOptions & ConstructorOptions, projectManager: ProjectManager, breakpointManager: BreakpointManager, rendezvousTracker: RendezvousTracker);
18
19
  private logger;
19
20
  /**
20
21
  * Indicates whether the adapter has successfully established a connection with the device
@@ -30,7 +31,6 @@ export declare class DebugProtocolAdapter {
30
31
  private compileErrorProcessor;
31
32
  private emitter;
32
33
  private chanperfTracker;
33
- private rendezvousTracker;
34
34
  private socketDebugger;
35
35
  private nextFrameId;
36
36
  private stackFramesCache;
@@ -54,7 +54,6 @@ export declare class DebugProtocolAdapter {
54
54
  on(eventName: 'connected', handler: (params: boolean) => void): any;
55
55
  on(eventname: 'console-output', handler: (output: string) => void): any;
56
56
  on(eventname: 'protocol-version', handler: (output: ProtocolVersionDetails) => void): any;
57
- on(eventname: 'rendezvous', handler: (output: RendezvousHistory) => void): any;
58
57
  on(eventName: 'runtime-error', handler: (error: BrightScriptRuntimeError) => void): any;
59
58
  on(eventName: 'suspend', handler: () => void): any;
60
59
  on(eventName: 'start', handler: () => void): any;
@@ -5,7 +5,6 @@ const Debugger_1 = require("../debugProtocol/Debugger");
5
5
  const EventEmitter = require("events");
6
6
  const net_1 = require("net");
7
7
  const CompileErrorProcessor_1 = require("../CompileErrorProcessor");
8
- const RendezvousTracker_1 = require("../RendezvousTracker");
9
8
  const ChanperfTracker_1 = require("../ChanperfTracker");
10
9
  const Constants_1 = require("../debugProtocol/Constants");
11
10
  const util_1 = require("../util");
@@ -16,10 +15,11 @@ const ActionQueue_1 = require("../managers/ActionQueue");
16
15
  * A class that connects to a Roku device over telnet debugger port and provides a standardized way of interacting with it.
17
16
  */
18
17
  class DebugProtocolAdapter {
19
- constructor(options, projectManager, breakpointManager) {
18
+ constructor(options, projectManager, breakpointManager, rendezvousTracker) {
20
19
  this.options = options;
21
20
  this.projectManager = projectManager;
22
21
  this.breakpointManager = breakpointManager;
22
+ this.rendezvousTracker = rendezvousTracker;
23
23
  this.logger = logging_1.logger.createLogger(`[${DebugProtocolAdapter.name}]`);
24
24
  /**
25
25
  * Due to casing issues with the variables request on some versions of the debug protocol, we first need to try the request in the supplied case.
@@ -43,17 +43,12 @@ class DebugProtocolAdapter {
43
43
  util_1.util.normalizeAdapterOptions(this.options);
44
44
  this.emitter = new EventEmitter();
45
45
  this.chanperfTracker = new ChanperfTracker_1.ChanperfTracker();
46
- this.rendezvousTracker = new RendezvousTracker_1.RendezvousTracker();
47
46
  this.compileErrorProcessor = new CompileErrorProcessor_1.CompileErrorProcessor();
48
47
  this.connected = false;
49
48
  // watch for chanperf events
50
49
  this.chanperfTracker.on('chanperf', (output) => {
51
50
  this.emit('chanperf', output);
52
51
  });
53
- // watch for rendezvous events
54
- this.rendezvousTracker.on('rendezvous', (output) => {
55
- this.emit('rendezvous', output);
56
- });
57
52
  }
58
53
  /**
59
54
  * Get the version of the protocol for the Roku device we're currently connected to.