Sha256: 95fc651d575e4030a21d547e71002d1bffbc6180a6371e53342ac34d98060533

Contents?: true

Size: 1.05 KB

Versions: 6

Compression:

Stored size: 1.05 KB

Contents

require 'json'
require 'sockjs/session'

class ChannelHandler < SockJS::Session
  # Create one instance of the dispatcher
  
  def self.dispatcher=(val)
    @@dispatcher = val
  end
  
  def self.dispatcher
    @@dispatcher
  end
  
  # Sends a message to all, optionally skipping a users channel
  def self.send_message_all(skip_channel=nil, *args)
    @@channels.each do |channel|
      if skip_channel && channel == skip_channel
        next
      end
      channel.send_message(*args)
    end
    
  end
  
  def initialize(session, *args)
    @session = session

    @@channels ||= []
    @@channels << self
    
    super
  end
  
  def process_message(message)
    # self.class.message_all(message)
    # Messages are json and wrapped in an array
    message = JSON.parse(message).first
    
    puts "GOT: #{message.inspect}"
    @@dispatcher.dispatch(self, message)
  end
  
  def send_message(*args)
    str = JSON.dump([*args])
    
    send(str)
  end
  
  def closed    
    # Remove ourself from the available channels
    @@channels.delete(self)
  end

end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
volt-0.4.7 lib/volt/server/channel_handler.rb
volt-0.4.5 lib/volt/server/channel_handler.rb
volt-0.4.4 lib/volt/server/channel_handler.rb
volt-0.4.3 lib/volt/server/channel_handler.rb
volt-0.4.2 lib/volt/server/channel_handler.rb
volt-0.4.1 lib/volt/server/channel_handler.rb