2017-01-06 9 views
0

私はRuby Socket.IO client simpleを使用しています。このJSコードをRubyで再現しようとしています。 JSコードは期待どおりに動作していますが、Rubyのバージョンでは、 'auth' emitでコールバック出力 'Authentication successful'が生成されません。Ruby Socket.IOコールバック

Rubyでの認証は成功しましたが、私は認証後に他のプライベートメソッドを発行できます。コールバックは、あなたがどこでもそれを呼び出すことはありませんので、呼び出されません

JS

var ws = io('https://test.com') 

ws.on('connect', function() { 
    auth(ws, pubKey, secKey, function (err, auth) { 
     if (err) return console.error('Error', err); 
     if (auth.success) 
      console.log('Authentication successful'); 
     else 
      console.log('Authentication failed'); 
    }); 
}); 

function auth(ws, pubKey, secKey, cb) { 
    var data = { apiKey: pubKey, cmd: 'getAuthInfo', nonce: Date.now() }; 
    var sig = crypto.sign(data, secKey); 
    ws.emit('auth', data, sig, cb); 
} 

ルビー

require 'socket.io-client-simple' 
require 'date' 

ws = SocketIO::Client::Simple.connect 'https://test.com' 

socket.on :connect do 
    auth(ws, pubKey, secKey, method(:auth_callback)) 
end 

def auth(ws, pubKey, secKey, cb) 
    data = { apiKey: pubKey, cmd: 'getAuthInfo', nonce: DateTime.now } 
    sig = Crypto.sign(data, secKey) 
    ws.emit :auth, [data.to_json, sig, cb] 
end 

def auth_callback(err, auth) 
    if auth.success 
     puts 'Authentication successful' 
    end 
end 

答えて

0

auth_callbackに動作しない理由だけで質問です!

cbauthメソッドのパラメータとしてメソッドmethod(:auth_callback)を渡しますが、cbでは何も行いません。

cbMethodなので、callを使用できます。あなたはdef auth_callback(err, auth)から削除することができるように、

cb=3.method(:+) 
cb.call(2) 
#=> 5 

err

が定義されていないにも使用もされていない:あなたのコードをテストするための十分なデータはので、ここではありません

は、基本的な例です。

+0

ありがとう、私はあなたが意味することを参照してくださいが、私は実際には、jsのように、ルビーのメソッドをemitの応答を得ることはできません。 socket.io-client-simpleラッパーの制限のようです –

関連する問題