11var WebSocketServer = require ( 'ws' ) . Server
2- var debug = require ( 'debug' ) ( 'solid:subscription ' )
2+ var debug = require ( 'debug' ) ( 'ldnode:ws ' )
33var InMemory = require ( './in-memory' )
44var parallel = require ( 'run-parallel' )
5+ var url = require ( 'url' )
56
67module . exports = WsServer
78
9+ function defaultToChannel ( iri ) {
10+ return url . parse ( iri ) . path
11+ }
12+
813function WsServer ( server , opts ) {
914 var self = this
1015
1116 opts = opts || { }
1217 this . suffix = opts . suffix || '.changes'
1318 this . store = opts . store || new InMemory ( opts )
19+ var toChannel = opts . toChannel || defaultToChannel
1420
1521 // Starting WSS server
1622 var wss = new WebSocketServer ( {
@@ -33,13 +39,16 @@ function WsServer (server, opts) {
3339 }
3440
3541 var tuple = message . split ( ' ' )
42+ var command = tuple [ 0 ]
43+ var iri = tuple [ 1 ]
3644
3745 // Only accept 'sub http://example.tld/hello'
38- if ( tuple . length < 2 || tuple [ 0 ] !== 'sub' ) {
46+ if ( tuple . length < 2 || command !== 'sub' ) {
3947 return
4048 }
4149
42- self . store . subscribe ( tuple [ 1 ] , client , function ( err , uuid ) {
50+ var channel = toChannel ? toChannel ( iri ) : iri
51+ self . store . subscribe ( channel , iri , client , function ( err , uuid ) {
4352 if ( err ) {
4453 // TODO Should return an error
4554 return
@@ -56,8 +65,8 @@ function WsServer (server, opts) {
5665 } )
5766}
5867
59- WsServer . prototype . publish = function ( uri , callback ) {
60- this . store . get ( uri , function ( err , subscribers ) {
68+ WsServer . prototype . publish = function ( iri , callback ) {
69+ this . store . get ( iri , function ( err , subscribers ) {
6170
6271 if ( err ) {
6372 if ( callback ) return callback ( err )
@@ -71,8 +80,10 @@ WsServer.prototype.publish = function (uri, callback) {
7180 var tasks = Object . keys ( subscribers )
7281 . map ( function ( uuid ) {
7382 return function ( cb ) {
74- var client = subscribers [ uuid ]
75- client . send ( 'pub ' + uri )
83+ var client = subscribers [ uuid ] [ 0 ]
84+ var channel = subscribers [ uuid ] [ 1 ]
85+ debug ( 'pub ' + channel + ' to ' + client . uuid )
86+ client . send ( 'pub ' + channel )
7687 }
7788 } )
7889
0 commit comments