Skip to content

Commit 5e996a6

Browse files
committed
[feature] Add ability to use transformer specific configuration options
1 parent 00b5f5a commit 5e996a6

File tree

8 files changed

+54
-34
lines changed

8 files changed

+54
-34
lines changed

index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ function Primus(server, options) {
2727
}
2828

2929
options = options || {};
30+
options.transport = options.transport || {};
3031
this.fuse();
3132

3233
var primus = this

transformers/browserchannel/server.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22

3-
var http = require('http');
3+
var browserchannel = require('browserchannel')
4+
, http = require('http');
45

56
/**
67
* Minimum viable Browserchannel server for Node.js that works through the primus
@@ -10,18 +11,17 @@ var http = require('http');
1011
* @api private
1112
*/
1213
module.exports = function server() {
13-
var browserchannel = require('browserchannel')
14-
, primus = this.primus
14+
var primus = this.primus
1515
, Spark = this.Spark;
1616

1717
//
1818
// We've received a new connection, create a new Spark. The Spark will
1919
// automatically announce it self as a new connection once it's created (after
2020
// the next tick).
2121
//
22-
this.service = browserchannel.server({
22+
this.service = browserchannel.server(Object.assign(primus.options.transport, {
2323
base: primus.pathname
24-
}, function connection(socket) {
24+
}), function connection(socket) {
2525
var spark = new Spark(
2626
socket.headers // HTTP request headers.
2727
, { // IP address Location.

transformers/engine.io/server.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
'use strict';
22

3+
var Engine = require('engine.io').Server;
4+
35
/**
46
* Minimum viable Engine.IO server for Node.js that works through the primus
57
* interface.
@@ -8,13 +10,12 @@
810
* @api private
911
*/
1012
module.exports = function server() {
11-
var Engine = require('engine.io').Server
12-
, Spark = this.Spark;
13+
var Spark = this.Spark;
1314

14-
var service = this.service = new Engine({
15+
var service = this.service = new Engine(Object.assign({
1516
perMessageDeflate: !!this.primus.options.compression,
1617
httpCompression: !!this.primus.options.compression
17-
});
18+
}, this.primus.options.transport));
1819

1920
//
2021
// We've received a new connection, create a new Spark. The Spark will

transformers/faye/server.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22

33
var PrimusError = require('../../errors').PrimusError
4+
, Faye = require('faye-websocket')
45
, parse = require('url').parse
56
, http = require('http');
67

@@ -11,8 +12,7 @@ var PrimusError = require('../../errors').PrimusError
1112
* @api private
1213
*/
1314
module.exports = function server() {
14-
var Faye = require('faye-websocket')
15-
, primus = this.primus
15+
var primus = this.primus
1616
, Spark = this.Spark
1717
, options = {};
1818

@@ -37,6 +37,8 @@ module.exports = function server() {
3737
}
3838
}
3939

40+
options = Object.assign(options, primus.options.transport);
41+
4042
//
4143
// Listen to upgrade requests.
4244
//

transformers/socket.io/server.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22

3-
var PrimusError = require('../../errors').PrimusError;
3+
var PrimusError = require('../../errors').PrimusError
4+
, Engine = require('socket.io').Manager;
45

56
/**
67
* Minimum viable WebSocket server for Node.js that works through the Primus
@@ -10,9 +11,8 @@ var PrimusError = require('../../errors').PrimusError;
1011
* @api private
1112
*/
1213
module.exports = function server() {
13-
var Engine = require('socket.io').Manager
14-
, Spark = this.Spark
15-
, primus = this.primus;
14+
var primus = this.primus
15+
, Spark = this.Spark;
1616

1717
//
1818
// Socket.IO is not, and will never be supported as long as it's using
@@ -39,7 +39,7 @@ module.exports = function server() {
3939
//
4040
// Listen to upgrade requests.
4141
//
42-
var service = this.service = new Engine(this, {
42+
var service = this.service = new Engine(this, Object.assign(primus.options.transport, {
4343
'resource': primus.pathname,
4444

4545
//
@@ -74,7 +74,7 @@ module.exports = function server() {
7474
// transformers.
7575
//
7676
'client store expiration': 0
77-
});
77+
}));
7878

7979
//
8080
// We've received a new connection, create a new Spark. The Spark will

transformers/sockjs/server.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
'use strict';
22

33
var PrimusError = require('../../errors').PrimusError
4-
, parse = require('url').parse;
4+
, parse = require('url').parse
5+
, sockjs = require('sockjs');
56

67
/**
78
* Minimum viable Sockjs server for Node.js that works through the primus
@@ -11,8 +12,7 @@ var PrimusError = require('../../errors').PrimusError
1112
* @api private
1213
*/
1314
module.exports = function server() {
14-
var sockjs = require('sockjs')
15-
, primus = this.primus
15+
var primus = this.primus
1616
, prefix = primus.pathname
1717
, Spark = this.Spark
1818
, fayeOptions = null;
@@ -77,11 +77,12 @@ module.exports = function server() {
7777
//
7878
// Listen to requests.
7979
//
80-
var handle = this.service.listener({
81-
faye_server_options: fayeOptions,
80+
var handle = this.service.listener(Object.assign({
81+
faye_server_options: fayeOptions
82+
}, primus.options.transport, {
8283
log: this.logger.plain,
8384
prefix: prefix
84-
}).getHandler();
85+
})).getHandler();
8586

8687
//
8788
// Here be demons. SockJS has this really horrible "security" feature where it

transformers/uws/server.js

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,23 @@ var parse = require('url').parse
1111
* @api private
1212
*/
1313
module.exports = function server() {
14-
var options = this.primus.options.compression ? uws.PERMESSAGE_DEFLATE : 0
15-
, service = this.service = new uws.uws.Server(0, options)
16-
, Spark = this.Spark;
14+
var options = this.primus.options
15+
, Spark = this.Spark
16+
, mask = 0;
17+
18+
if (options.compression || options.transport.perMessageDeflate) {
19+
mask = uws.PERMESSAGE_DEFLATE;
20+
if (options.transport.perMessageDeflate) {
21+
if (options.transport.perMessageDeflate.serverNoContextTakeover) {
22+
mask |= uws.SERVER_NO_CONTEXT_TAKEOVER;
23+
}
24+
if (options.transport.perMessageDeflate.clientNoContextTakeover) {
25+
mask |= uws.CLIENT_NO_CONTEXT_TAKEOVER;
26+
}
27+
}
28+
}
29+
30+
var service = this.service = new uws.uws.Server(0, mask, options.transport.maxPayload);
1731

1832
service.onMessage(function message(socket, msg, binary, spark) {
1933
spark.emit('incoming::data', binary ? msg : msg.toString());
@@ -33,7 +47,7 @@ module.exports = function server() {
3347
, ticket;
3448

3549
if (secKey && secKey.length === 24) {
36-
soc.setNoDelay(true);
50+
soc.setNoDelay(options.transport.noDelay);
3751
ticket = service.transfer(soc._handle.fd, soc.ssl ? soc.ssl._external : null);
3852

3953
soc.on('close', function destroy() {

transformers/websockets/server.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
'use strict';
22

3-
var http = require('http')
4-
, parse = require('url').parse;
3+
var WebSocketServer = require('ws').Server
4+
, parse = require('url').parse
5+
, http = require('http');
56

67
/**
78
* Minimum viable WebSocket server for Node.js that works through the Primus
@@ -11,15 +12,15 @@ var http = require('http')
1112
* @api private
1213
*/
1314
module.exports = function server() {
14-
var WebSocketServer = require('ws').Server
15-
, logger = this.logger
15+
var logger = this.logger
1616
, Spark = this.Spark;
1717

18-
var service = this.service = new WebSocketServer({
19-
perMessageDeflate: !!this.primus.options.compression,
18+
var service = this.service = new WebSocketServer(Object.assign({
19+
perMessageDeflate: !!this.primus.options.compression
20+
}, this.primus.options.transport, {
2021
clientTracking: false,
2122
noServer: true
22-
});
23+
}));
2324

2425
/**
2526
* Noop! Pointless, empty function that will actually be really useful.

0 commit comments

Comments
 (0)