Sha256: 4c68810aaae2815d7fb7fabc23c18d7eb9a1d6a79f2c502dc117836c233ba207

Contents?: true

Size: 1.48 KB

Versions: 2

Compression:

Stored size: 1.48 KB

Contents

module FayeRails
  class Controller
    class Channel

      attr_reader :channel, :endpoint

      def initialize(channel, endpoint=nil)
        @channel = channel
        @endpoint = endpoint
      end

      def client
        FayeRails.client(endpoint)
      end

      def publish(message)
        client.publish(channel, message)
      end

      def monitor(event, &block)
        raise ArgumentError, "Unknown event #{event.inspect}" unless [:subscribe,:unsubscribe,:publish].member? event

        FayeRails.server(endpoint).bind(event) do |*args|
          Monitor.new.tap do |m|
            m.client_id = args.shift
            m.channel = args.shift
            m.data = args.shift
            m.instance_eval(&block) if m.channel == channel
          end
        end
      end

      def filter(direction=:any, &block)
        filter = FayeRails::Filter.new(channel, direction, block)
        server = FayeRails.server(endpoint)
        server.add_extension(filter)
        filter.server = server
        filter
      end

      def subscribe(&block)
        EM.schedule do 
          @subscription = FayeRails.client(endpoint).subscribe(channel) do |message|
            Message.new.tap do |m|
              m.message = message
              m.channel = channel
              m.instance_eval(&block)
            end
          end
        end
      end

      def unsubscribe
        EM.schedule do
          FayeRails.client(endpoint).unsubscribe(@subscription)
        end
      end

    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
faye-rails-1.0.3 lib/faye-rails/controller/channel.rb
faye-rails-1.0.2 lib/faye-rails/controller/channel.rb