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