CodeOceanEditorWebsocket = { websocket: null, createSocketUrl: function(url) { var rel_url_root = '<%= (defined? config.relative_url_root) && config.relative_url_root != nil && config.relative_url_root != "" ? config.relative_url_root : "" %>'; return '<%= DockerClient.config['ws_client_protocol'] %>' + window.location.hostname + ':' + rel_url_root + window.location.port + url; }, initializeSocket: function(url) { this.websocket = new CommandSocket(this.createSocketUrl(url), function (evt) { this.resetOutputTab(); }.bind(this) ); this.websocket.onError(this.showWebsocketError.bind(this)); }, initializeSocketForTesting: function(url) { this.initializeSocket(url); this.websocket.on('default',this.handleTestResponse.bind(this)); this.websocket.on('exit', this.handleExitCommand.bind(this)); }, initializeSocketForScoring: function(url) { this.initializeSocket(url); this.websocket.on('default',this.handleScoringResponse.bind(this)); this.websocket.on('exit', this.handleExitCommand.bind(this)); }, initializeSocketForRunning: function(url) { this.initializeSocket(url); this.websocket.on('input',this.showPrompt.bind(this)); this.websocket.on('write', this.printWebsocketOutput.bind(this)); this.websocket.on('turtle', this.handleTurtleCommand.bind(this)); this.websocket.on('turtlebatch', this.handleTurtlebatchCommand.bind(this)); this.websocket.on('render', this.renderWebsocketOutput.bind(this)); this.websocket.on('exit', this.handleExitCommand.bind(this)); this.websocket.on('timeout', this.showTimeoutMessage.bind(this)); this.websocket.on('status', this.showStatus.bind(this)); }, handleExitCommand: function() { this.killWebsocket(); this.handleQaApiOutput(); this.handleStderrOutputForFlowr(); this.augmentStacktraceInOutput(); this.cleanUpTurtle(); this.cleanUpUI(); } };