2017-08-03 12 views
0

私はsockjsトランスフォーマで動作するプリマスサーバを持っています。私は部屋をサポートするためにプリムスルームのプラグインを使用しています。参加して部屋を離れると、特定の部屋に接続されているクライアントにメッセージを送信できます。Primus + primus-rooms + sockjs:部屋に接続しているすべてのクライアントを取得する方法

ある時点で、特定の部屋のすべての接続済みクライアントを取得する必要があります。私はこれを使用したい:https://github.com/cayasso/primus-rooms#primusroomroomclientsfn

primus.room('room').clients(fn); 

しかし、私がターゲットにしています部屋に接続しているクライアントがある場合でも、FN機能は常に、nullを返します。これは私の実装です:

var remoteRoom = 'the_room_I_need_to_target'; 
primus.room(remoteRoom).clients(function(clients){ 
    console.dir('primus clients in room ' + remoteRoom + ': ' + clients); 
}); 

これを実行するには何か特別な設定が必要ですか?私は部屋のアダプターを設定する必要があると思っていますが、私はそれが何をするのか、どのように行うべきかは不明です。


やや完了していることが、これは、プライマスの私の最初のセットアップです:私は成功した客室に参加して残すことができ

var app = require('express')(); 
var server = require('http').Server(app); 
var Primus = require('primus'); 
var Rooms = require('primus-rooms'); 
var primus = new Primus(server, {transformer: 'sockjs', pathname: '/primus/my-room'}); 
primus.plugin('rooms', Rooms); 

。 &放置に参加することは、クライアントでのいくつかのアクションによってトリガーされます。

primus.on('connection', function (spark) { 
    spark.on('data', function(data) { 

    data = data || {}; 

    var action = data.action; 
    var roomToJoin = data.roomToJoin; 

    if ('join' === action) { //join room 
     spark.join(roomToJoin, function() { 
      logger.debug('primus id ' + spark.id + ' joined room ' + roomToJoin);  
     }); 
    }else if ('leave' === action) { //leave room 
     spark.leave(roomToJoin, function() { 
      logger.debug('primus id ' + spark.id + ' left room ' + roomToJoin); 

     }); 
    } 
} 

答えて

0

ハンドラ関数は、FN(エラー、クライアント)とないFN(クライアント)です。コードを次のように変更すると、予期した動作が発生しました。

var remoteRoom = 'the_room_I_need_to_target'; 
primus.room(remoteRoom).clients(function(error, clients){ 
    console.dir('primus clients in room ' + remoteRoom + ': ' + clients); 
}); 
関連する問題