1 | var EventEmitter = require('events').EventEmitter,
|
2 | inherits = require('util').inherits,
|
3 | DebuggerClient = require('./DebuggerClient').DebuggerClient,
|
4 | ScriptManager = require('./ScriptManager').ScriptManager,
|
5 | FrontendClient = require('./FrontendClient').FrontendClient,
|
6 | FrontendCommandHandler = require('./FrontendCommandHandler').FrontendCommandHandler,
|
7 | BreakEventHandler = require('./BreakEventHandler').BreakEventHandler,
|
8 | ConsoleClient = require('./ConsoleClient').ConsoleClient,
|
9 | HeapProfilerClient = require('./HeapProfilerClient').HeapProfilerClient,
|
10 | InjectorClient = require('./InjectorClient').InjectorClient;
|
11 |
|
12 | function Session(config, debuggerHost, debuggerPort, wsConnection) {
|
13 | this.debuggerClient = new DebuggerClient(debuggerHost, debuggerPort);
|
14 | this.frontendClient = new FrontendClient(wsConnection);
|
15 | this.injectorClient = new InjectorClient(config, this);
|
16 | this.consoleClient = new ConsoleClient(config, this);
|
17 | this.heapProfilerClient = new HeapProfilerClient(config, this);
|
18 | this.scriptManager = new ScriptManager(config, this);
|
19 | this.breakEventHandler = new BreakEventHandler(config, this);
|
20 | this.frontendCommandHandler = new FrontendCommandHandler(config, this);
|
21 |
|
22 | this.resourceTreeResolved = false;
|
23 | this.once('resource-tree-resolved', function() {
|
24 | this.resourceTreeResolved = true;
|
25 | }.bind(this));
|
26 |
|
27 | this.frontendClient.on('close', this.close.bind(this));
|
28 | this.debuggerClient.on('close', this._onDebuggerClientClose.bind(this));
|
29 | this.debuggerClient.on('error', this._onDebuggerClientError.bind(this));
|
30 |
|
31 | this._pingInterval = setInterval(function() {
|
32 | wsConnection.ping(null, null, true);
|
33 | }.bind(this), 1000);
|
34 | }
|
35 |
|
36 | inherits(Session, EventEmitter);
|
37 |
|
38 | Session.prototype.close = function() {
|
39 | clearInterval(this._pingInterval);
|
40 | if (this.debuggerClient.isConnected)
|
41 | this.debuggerClient.close();
|
42 | else
|
43 | this.emit('close');
|
44 | };
|
45 |
|
46 | Session.prototype._onDebuggerClientClose = function(reason) {
|
47 | if (this.frontendClient.isConnected)
|
48 | this.frontendClient.sendInspectorDetached(reason);
|
49 | this.close();
|
50 | };
|
51 |
|
52 | Session.prototype._onDebuggerClientError = function(e) {
|
53 | var err = e.toString();
|
54 | if (e.helpString) {
|
55 | err += '\n' + e.helpString;
|
56 | }
|
57 | this.frontendClient.sendLogToConsole('error', err);
|
58 | };
|
59 |
|
60 | module.exports = Session;
|