diff --git a/Gruntfile.js b/Gruntfile.js index 40cb75ac5..9354bd3fb 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -43,9 +43,6 @@ module.exports = function(grunt) { }, examples: { configFile: './test/examples/karma.conf.js' - }, - workersocket: { - configFile: './test/workersocket/karma.conf.js' } }, mochaTest: { @@ -110,7 +107,6 @@ module.exports = function(grunt) { grunt.registerTask('test', ['jshint', 'mochaTest:test', 'karma:test']); grunt.registerTask('test-examples', ['mochaTest:examples', 'karma:examples']); grunt.registerTask('test-tcp', ['mochaTest:tcp']); - grunt.registerTask('test-workersocket', ['karma:workersocket']); grunt.registerTask('build', ['shell', 'browserify', 'uglify']); grunt.registerTask('build_and_watch', ['watch']); grunt.registerTask('doc', ['clean', 'jsdoc']); diff --git a/package-lock.json b/package-lock.json index 10f8db3de..1f3477b2e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,8 +14,6 @@ "eventemitter3": "^5.0.1", "object-assign": "^4.0.0", "pngparse": "^2.0.0", - "webworkify": "^1.5.0", - "webworkify-webpack": "^2.1.5", "ws": "^8.0.0" }, "devDependencies": { @@ -7407,16 +7405,6 @@ "node": ">=0.8.0" } }, - "node_modules/webworkify": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/webworkify/-/webworkify-1.5.0.tgz", - "integrity": "sha512-AMcUeyXAhbACL8S2hqqdqOLqvJ8ylmIbNwUIqQujRSouf4+eUFaXbG6F1Rbu+srlJMmxQWsiU7mOJi0nMBfM1g==" - }, - "node_modules/webworkify-webpack": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/webworkify-webpack/-/webworkify-webpack-2.1.5.tgz", - "integrity": "sha512-2akF8FIyUvbiBBdD+RoHpoTbHMQF2HwjcxfDvgztAX5YwbZNyrtfUMgvfgFVsgDhDPVTlkbb5vyasqDHfIDPQw==" - }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", diff --git a/package.json b/package.json index 30398fbd2..40fc7de62 100644 --- a/package.json +++ b/package.json @@ -44,8 +44,6 @@ "eventemitter3": "^5.0.1", "object-assign": "^4.0.0", "pngparse": "^2.0.0", - "webworkify": "^1.5.0", - "webworkify-webpack": "^2.1.5", "ws": "^8.0.0" }, "directories": { @@ -60,7 +58,6 @@ "doc": "grunt doc", "test": "grunt test", "test-examples": "grunt test-examples", - "test-workersocket": "grunt test-workersocket", "test-tcp": "grunt test-tcp", "publish": "npm run build && npm run test" }, diff --git a/src/core/Ros.js b/src/core/Ros.js index 6c4ee42bd..111901692 100644 --- a/src/core/Ros.js +++ b/src/core/Ros.js @@ -4,7 +4,6 @@ */ var WebSocket = require('ws'); -var WorkerSocket = require('../util/workerSocket'); var socketAdapter = require('./SocketAdapter.js'); var Service = require('./Service'); @@ -33,7 +32,7 @@ class Ros extends EventEmitter { * @param {Object} [options] * @param {string} [options.url] - The WebSocket URL for rosbridge. Can be specified later with `connect`. * @param {boolean} [options.groovyCompatibility=true] - Don't use interfaces that changed after the last groovy release or rosbridge_suite and related tools. - * @param {'websocket'|'workersocket'|RTCPeerConnection} [options.transportLibrary='websocket'] - One of 'websocket', 'workersocket', or RTCPeerConnection instance controlling how the connection is created in `connect`. + * @param {'websocket'|RTCPeerConnection} [options.transportLibrary='websocket'] - 'websocket', or an RTCPeerConnection instance controlling how the connection is created in `connect`. * @param {Object} [options.transportOptions={}] - The options to use when creating a connection. Currently only used if `transportLibrary` is RTCPeerConnection. */ constructor(options) { @@ -78,8 +77,6 @@ class Ros extends EventEmitter { sock.binaryType = 'arraybuffer'; this.socket = assign(sock, socketAdapter(this)); } - } else if (this.transportLibrary === 'workersocket') { - this.socket = assign(new WorkerSocket(url), socketAdapter(this)); } else { throw 'Unknown transportLibrary: ' + this.transportLibrary.toString(); } diff --git a/src/util/workerSocket.js b/src/util/workerSocket.js deleted file mode 100644 index a742c50e7..000000000 --- a/src/util/workerSocket.js +++ /dev/null @@ -1,57 +0,0 @@ -try { - // @ts-expect-error -- webworker include workarounds I don't know enough about to fix right now - var work = require('webworkify'); -} catch (ReferenceError) { - // @ts-expect-error -- webworker include workarounds I don't know enough about to fix right now - // webworkify raises ReferenceError when required inside webpack - var work = require('webworkify-webpack'); -} -var workerSocketImpl = require('./workerSocketImpl'); - -class WorkerSocket { - constructor(uri) { - this.onclose = undefined; - this.onerror = undefined; - this.onopen = undefined; - this.onmessage = undefined; - this.socket_ = work(workerSocketImpl); - - this.socket_.addEventListener( - 'message', - this.handleWorkerMessage_.bind(this) - ); - - this.socket_.postMessage({ - uri: uri - }); - } - handleWorkerMessage_(ev) { - var data = ev.data; - if (data instanceof ArrayBuffer || typeof data === 'string') { - // binary or JSON message from rosbridge - this.onmessage(ev); - } else { - // control message from the wrapped WebSocket - var type = data.type; - if (type === 'close') { - this.onclose(null); - } else if (type === 'open') { - this.onopen(null); - } else if (type === 'error') { - this.onerror(null); - } else { - throw 'Unknown message from workersocket'; - } - } - } - send(data) { - this.socket_.postMessage(data); - } - close() { - this.socket_.postMessage({ - close: true - }); - } -} - -module.exports = WorkerSocket; diff --git a/src/util/workerSocketImpl.js b/src/util/workerSocketImpl.js deleted file mode 100644 index bfcc98828..000000000 --- a/src/util/workerSocketImpl.js +++ /dev/null @@ -1,48 +0,0 @@ -var WebSocket = WebSocket || require('ws'); - -module.exports = function (self) { - var socket = null; - - function handleSocketMessage(ev) { - var data = ev.data; - - if (data instanceof ArrayBuffer) { - // binary message, transfer for speed - self.postMessage(data, [data]); - } else { - // JSON message, copy string - self.postMessage(data); - } - } - - function handleSocketControl(ev) { - self.postMessage({ type: ev.type }); - } - - self.addEventListener('message', function (ev) { - var data = ev.data; - - if (typeof data === 'string') { - // JSON message from ROSLIB - socket.send(data); - } else { - // control message - if (data.hasOwnProperty('close')) { - socket.close(); - socket = null; - } else if (data.hasOwnProperty('uri')) { - var uri = data.uri; - - socket = new WebSocket(uri); - socket.binaryType = 'arraybuffer'; - - socket.onmessage = handleSocketMessage; - socket.onclose = handleSocketControl; - socket.onopen = handleSocketControl; - socket.onerror = handleSocketControl; - } else { - throw 'Unknown message to WorkerSocket'; - } - } - }); -}; diff --git a/test/build.bash b/test/build.bash index 76389f660..1492faa76 100644 --- a/test/build.bash +++ b/test/build.bash @@ -30,5 +30,3 @@ echo -e "\e[1m\e[35mnpm test\e[0m" npm test echo -e "\e[1m\e[35mnpm run test-examples\e[0m" npm run test-examples -echo -e "\e[1m\e[35mnpm run test-workersocket\e[0m" -npm run test-workersocket diff --git a/test/workersocket/karma.conf.js b/test/workersocket/karma.conf.js deleted file mode 100644 index a7c4ccdb8..000000000 --- a/test/workersocket/karma.conf.js +++ /dev/null @@ -1,65 +0,0 @@ -process.env.CHROME_BIN = require('puppeteer').executablePath() - -module.exports = function(config) { - config.set({ - - // Base path, that will be used to resolve files and exclude - basePath: '', - - // Testing frameworks - frameworks: ['mocha', 'chai'], - - // List of files / patterns to load in the browser - files: [ - "../../node_modules/eventemitter2/lib/eventemitter2.js", - "../../build/roslib.js", - "../require-shim.js", - "*.js" - ], - - // test results reporter to use - // possible values: 'dots', 'progress', 'junit' - reporters: ['progress'], - - - // web server port - port: 9876, - - - // cli runner port - runnerPort: 9200, - - - // enable / disable colors in the output (reporters and logs) - colors: true, - - - // level of logging - // possible values: ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, MARK, OFF - logLevel: "DEBUG", - - - // enable / disable watching file and executing tests whenever any file changes - autoWatch: true, - - - // Start these browsers, currently available: - // - Chrome - // - ChromeCanary - // - Firefox - // - Opera - // - Safari (only Mac) - // - PhantomJS - // - IE (only Windows) - browsers: ['Firefox'], - - - // If browser does not capture in given timeout [ms], kill it - captureTimeout: 60000, - browserNoActivityTimeout: 30000, - - // Continuous Integration mode - // if true, it capture browsers, run tests and exit - singleRun: true - }); -}; diff --git a/test/workersocket/pubsub.example.js b/test/workersocket/pubsub.example.js deleted file mode 100644 index bf6aa76b2..000000000 --- a/test/workersocket/pubsub.example.js +++ /dev/null @@ -1,101 +0,0 @@ -var expect = require('chai').expect; -var ROSLIB = require('../..'); - -describe('Topics Example', function() { - this.timeout(1000); - - var ros = new ROSLIB.Ros({ - url: 'ws://localhost:9090', - transportLibrary: 'workersocket' - }); - - var example = ros.Topic({ - name: '/workersocket/example_topic', - messageType: 'std_msgs/String' - }); - - function format(msg) { - return {data: msg}; - } - var messages1 = ['Hello Example2!', 'Whats good?'].map(format); - var messages2 = ['Hi there', 'this example working'].map(format); - - var example2 = ros.Topic({ - name: '/workersocket/example_topic', - messageType: 'std_msgs/String' - }); - - it('Listening and publishing to a topic', function(done) { - // Kind of harry... - var topic1msg = messages1[0], - topic2msg = {}; - example.subscribe(function(message) { - if (message.data === topic1msg.data) return; - topic1msg = messages1[0]; - expect(message).to.be.eql(messages2.shift()); - if (messages1.length) example.publish(topic1msg); - else done(); - }); - example2.subscribe(function(message) { - if (message.data === topic2msg.data) return; - topic2msg = messages2[0]; - expect(message).to.be.eql(messages1.shift()); - if (messages2.length) example2.publish(topic2msg); - else done(); - }); - example.publish(topic1msg); - }); - - it('unsubscribe doesn\'t affect other topics', function(done) { - example2.subscribe(function(message) { - // should never be called - expect(false).to.be.ok; - }); - example.unsubscribe(); - example2.removeAllListeners('message'); - example2.subscribe(function(message) { - expect(message).to.be.eql({ - data: 'hi' - }); - done(); - }); - example.publish({ - data: 'hi' - }); - }); - - it('unadvertise doesn\'t affect other topics', function(done) { - example.unsubscribe(); - example2.unadvertise(); - example2.removeAllListeners('message'); - example2.subscribe(function(message) { - expect(example2.isAdvertised).to.be.false; - expect(message).to.be.eql({ - data: 'hi' - }); - done(); - }); - example.publish({ - data: 'hi' - }); - }); - - it('unsubscribing from all Topics should stop the socket from receiving data (on that topic', function(done) { - example.unsubscribe(); - example2.unsubscribe(); - ros.on('/example_topic', function() { - expect(false).to.be.ok; - }); - example.publish({ - data: 'sup' - }); - setTimeout(done, 500); - }); - - this.afterAll(function() { - example.unadvertise(); - example.unsubscribe(); - example2.unadvertise(); - example2.unsubscribe(); - }); -});