2017-09-04 16 views
0

tcpポートからの受信データを、「ビュー」のデータであるかのように扱うことを計画しています。いくつかのRxRuby Observablesを設定したいのですが、tcpポートから取得したデータに応じて適切なObservableを選択し、on_nextメソッドを呼び出して何かを公開してください。Rubyインスタンス変数をRxRuby Observableに設定する方法はありますか?

次のコードは機能しますが、不器用なようです。 Rx::Observable.createに渡されたブロックは、インスタンス変数を渡されたオブザーバブルに設定するだけです。巨大な量のボイラープレートではありませんが、何かが正しいとは思わないのです。何か不足していますか? Rxの::件名についての詳細を読んだ後

require 'rx' 
class GUIMessagePublisher 
    attr_accessor :handshake, :handshake_stream, :remote_button, :remote_button_stream 

    def initialize 
    self.handshake_stream = Rx::Observable.create { |o| self.handshake = o } 
    self.remote_button_stream = Rx::Observable.create { |o| self.remote_button = o } 
    end 

    def publish_handshake 
    handshake.on_next("hello") 
    end 

    def publish_remote_button 
    remote_button.on_next(nil) 
    end 

end 

publisher = GUIMessagePublisher.new 
publisher.handshake_stream.subscribe { |m| puts "message = #{m}"} 
publisher.remote_button_stream.subscribe { puts "remote button clicked" } 
publisher.publish_handshake 
publisher.publish_remote_button 

答えて

0

、私はこれがこの

require 'rx' 
require 'forwardable' 
class GUIMessagePublisher 
    extend Forwardable 
    attr_accessor :handshake_subject, :remote_button_subject 
    def_delegator :handshake_subject, :as_observable, :handshake_stream 
    def_delegator :remote_button_subject, :as_observable, :remote_button_stream 

    def initialize 
    self.handshake_subject = Rx::Subject.new 
    self.remote_button_subject = Rx::Subject.new 
    end 

    def publish_handshake 
    handshake_subject.on_next("hello") 
    end 

    def publish_remote_button 
    remote_button_subject.on_next("remote button") 
    end 

end 

publisher = GUIMessagePublisher.new 
publisher.handshake_stream.subscribe { |m| puts "message = #{m}"} 
publisher.remote_button_stream.subscribe { |m| puts "remote button clicked, message = #{m}" } 
publisher.publish_handshake 
publisher.publish_remote_button 

を処理するための好ましい方法だと思う転送可能の使用はオプションです。私は方法によって委任したことがあるか、または暴露された被験者の.as_observableとちょうど呼ばれたかもしれませんが、これは正しいようです。

関連する問題