Sha256: e694f98631488ea4df33b80a9a1256034d0cbe2cd67b43a6d524196be5e53330

Contents?: true

Size: 1.04 KB

Versions: 7

Compression:

Stored size: 1.04 KB

Contents

require 'ganymed/websocket'
require 'ganymed/websocket/filter'

module Ganymed
  class Websocket
    module Subscribe
      def self.included(base)
        base.command :subscribe
        base.command :unsubscribe
      end

      def filters
        @filters ||= {}
      end

      def subscribe(data)
        return if not authenticated?
        data.each do |ns, filter|
          log.debug("client #{peer} subscribed to #{ns} with filter=#{filter.inspect}")
          filters[ns] = Filter.new(filter)
        end
      end

      def unsubscribe(data)
        return if not authenticated?
        data.each do |ns, filter|
          log.debug("client #{peer} unsubscribed namespace #{ns}")
          filters.delete(ns)
        end
      end

      def subscribed?(event)
        filters.map do |ns, filter|
          filter if ns == "all" or event.ns == ns
        end.compact.map do |filter|
          filter.match?(event)
        end.any?
      end

      def publish(event)
        send(:event, [event]) if subscribed?(event)
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
ganymed-0.3.4 lib/ganymed/websocket/subscribe.rb
ganymed-0.3.3 lib/ganymed/websocket/subscribe.rb
ganymed-0.3.2 lib/ganymed/websocket/subscribe.rb
ganymed-0.3.1 lib/ganymed/websocket/subscribe.rb
ganymed-0.3.0 lib/ganymed/websocket/subscribe.rb
ganymed-0.2.3 lib/ganymed/websocket/subscribe.rb
ganymed-0.2.2 lib/ganymed/websocket/subscribe.rb